1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielski //*************************************************************************** 25*b1cdbd2cSJim Jagielski // comment: Step 1: get the Desktop object from the office 26*b1cdbd2cSJim Jagielski // Step 2: open an empty text document 27*b1cdbd2cSJim Jagielski // Step 3: enter a example text 28*b1cdbd2cSJim Jagielski // Step 4: get some text attributes 29*b1cdbd2cSJim Jagielski // Step 5: check the PropertyState from the selection 30*b1cdbd2cSJim Jagielski // 31*b1cdbd2cSJim Jagielski // Chapter 4.1.4 Hard formatting 32*b1cdbd2cSJim Jagielski //*************************************************************************** 33*b1cdbd2cSJim Jagielski 34*b1cdbd2cSJim Jagielski import com.sun.star.uno.UnoRuntime; 35*b1cdbd2cSJim Jagielski 36*b1cdbd2cSJim Jagielski public class HardFormatting { 37*b1cdbd2cSJim Jagielski main(String args[])38*b1cdbd2cSJim Jagielski public static void main(String args[]) { 39*b1cdbd2cSJim Jagielski // You need the desktop to create a document 40*b1cdbd2cSJim Jagielski // The getDesktop method does the UNO bootstrapping, gets the 41*b1cdbd2cSJim Jagielski // remote servie manager and the desktop object. 42*b1cdbd2cSJim Jagielski com.sun.star.frame.XDesktop xDesktop = null; 43*b1cdbd2cSJim Jagielski xDesktop = getDesktop(); 44*b1cdbd2cSJim Jagielski 45*b1cdbd2cSJim Jagielski try { 46*b1cdbd2cSJim Jagielski // create text document 47*b1cdbd2cSJim Jagielski com.sun.star.text.XTextDocument xTextDocument = null; 48*b1cdbd2cSJim Jagielski xTextDocument = createTextdocument(xDesktop); 49*b1cdbd2cSJim Jagielski 50*b1cdbd2cSJim Jagielski // the text interface contains all methods and properties to 51*b1cdbd2cSJim Jagielski // manipulate the content from a text document 52*b1cdbd2cSJim Jagielski com.sun.star.text.XText xText = null; 53*b1cdbd2cSJim Jagielski xText = xTextDocument.getText(); 54*b1cdbd2cSJim Jagielski 55*b1cdbd2cSJim Jagielski String sMyText = "A very short paragraph for illustration only"; 56*b1cdbd2cSJim Jagielski 57*b1cdbd2cSJim Jagielski // you can travel with the cursor throught the text document. 58*b1cdbd2cSJim Jagielski // you travel only at the model, not at the view. The cursor that you can 59*b1cdbd2cSJim Jagielski // see on the document doesn't change the position 60*b1cdbd2cSJim Jagielski com.sun.star.text.XTextCursor xTextCursor = null; 61*b1cdbd2cSJim Jagielski xTextCursor = (com.sun.star.text.XTextCursor) 62*b1cdbd2cSJim Jagielski xTextDocument.getText().createTextCursor(); 63*b1cdbd2cSJim Jagielski 64*b1cdbd2cSJim Jagielski xText.insertString( xTextCursor, "Headline", false ); 65*b1cdbd2cSJim Jagielski xText.insertControlCharacter(xTextCursor, 66*b1cdbd2cSJim Jagielski com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK, false); 67*b1cdbd2cSJim Jagielski 68*b1cdbd2cSJim Jagielski xText.insertString(xTextCursor, sMyText, false); 69*b1cdbd2cSJim Jagielski 70*b1cdbd2cSJim Jagielski com.sun.star.text.XTextRange xTextRange = null; 71*b1cdbd2cSJim Jagielski com.sun.star.beans.XPropertySet xPropertySet = null; 72*b1cdbd2cSJim Jagielski 73*b1cdbd2cSJim Jagielski // BEGIN: 'Hard formating' 74*b1cdbd2cSJim Jagielski // the text range not the cursor contains the 'parastyle' property 75*b1cdbd2cSJim Jagielski xTextRange = xText.getEnd(); 76*b1cdbd2cSJim Jagielski xPropertySet = (com.sun.star.beans.XPropertySet) 77*b1cdbd2cSJim Jagielski UnoRuntime.queryInterface( 78*b1cdbd2cSJim Jagielski com.sun.star.beans.XPropertySet.class, xTextRange); 79*b1cdbd2cSJim Jagielski 80*b1cdbd2cSJim Jagielski // create a paragraph cursor to travel throught the paragraphs 81*b1cdbd2cSJim Jagielski com.sun.star.text.XParagraphCursor xParagraphCursor = null; 82*b1cdbd2cSJim Jagielski xParagraphCursor = (com.sun.star.text.XParagraphCursor) 83*b1cdbd2cSJim Jagielski UnoRuntime.queryInterface( 84*b1cdbd2cSJim Jagielski com.sun.star.text.XParagraphCursor.class, xTextRange); 85*b1cdbd2cSJim Jagielski 86*b1cdbd2cSJim Jagielski xParagraphCursor.gotoStart( false ); 87*b1cdbd2cSJim Jagielski xParagraphCursor.gotoEndOfParagraph( true ); 88*b1cdbd2cSJim Jagielski xTextRange = xParagraphCursor.getText().getStart(); 89*b1cdbd2cSJim Jagielski 90*b1cdbd2cSJim Jagielski // create a WordCursor to travel into the paragraph 91*b1cdbd2cSJim Jagielski com.sun.star.text.XWordCursor xWordCursor = null; 92*b1cdbd2cSJim Jagielski xWordCursor = (com.sun.star.text.XWordCursor) UnoRuntime.queryInterface( 93*b1cdbd2cSJim Jagielski com.sun.star.text.XWordCursor.class, xTextRange); 94*b1cdbd2cSJim Jagielski 95*b1cdbd2cSJim Jagielski // the PropertySet from the cursor contains the text attributes 96*b1cdbd2cSJim Jagielski xPropertySet = (com.sun.star.beans.XPropertySet) 97*b1cdbd2cSJim Jagielski UnoRuntime.queryInterface( 98*b1cdbd2cSJim Jagielski com.sun.star.beans.XPropertySet.class, xWordCursor); 99*b1cdbd2cSJim Jagielski System.out.println( 100*b1cdbd2cSJim Jagielski "Parastyle : " 101*b1cdbd2cSJim Jagielski +xPropertySet.getPropertyValue("ParaStyleName").toString() 102*b1cdbd2cSJim Jagielski + "\nFontname : " 103*b1cdbd2cSJim Jagielski + xPropertySet.getPropertyValue("CharFontName").toString() 104*b1cdbd2cSJim Jagielski + "\nWeight : " 105*b1cdbd2cSJim Jagielski + xPropertySet.getPropertyValue("CharWeight").toString() ); 106*b1cdbd2cSJim Jagielski 107*b1cdbd2cSJim Jagielski xWordCursor.gotoNextWord(false); 108*b1cdbd2cSJim Jagielski xWordCursor.gotoNextWord(false); 109*b1cdbd2cSJim Jagielski xWordCursor.gotoEndOfWord(true); 110*b1cdbd2cSJim Jagielski 111*b1cdbd2cSJim Jagielski xPropertySet = (com.sun.star.beans.XPropertySet) 112*b1cdbd2cSJim Jagielski UnoRuntime.queryInterface( 113*b1cdbd2cSJim Jagielski com.sun.star.beans.XPropertySet.class, xWordCursor); 114*b1cdbd2cSJim Jagielski xPropertySet.setPropertyValue("CharWeight", 115*b1cdbd2cSJim Jagielski new Float(com.sun.star.awt.FontWeight.BOLD)); 116*b1cdbd2cSJim Jagielski xPropertySet.setPropertyValue("CharColor", new Integer( 255 ) ); 117*b1cdbd2cSJim Jagielski 118*b1cdbd2cSJim Jagielski System.out.println( 119*b1cdbd2cSJim Jagielski "Parastyle : " 120*b1cdbd2cSJim Jagielski + xPropertySet.getPropertyValue("ParaStyleName").toString() 121*b1cdbd2cSJim Jagielski + "\nFontname : " 122*b1cdbd2cSJim Jagielski + xPropertySet.getPropertyValue("CharFontName").toString() 123*b1cdbd2cSJim Jagielski + "\nWeight : " 124*b1cdbd2cSJim Jagielski + xPropertySet.getPropertyValue("CharWeight").toString() ); 125*b1cdbd2cSJim Jagielski 126*b1cdbd2cSJim Jagielski // the PropertyState contains information where the attribute is set, 127*b1cdbd2cSJim Jagielski // is a text part hard formated or not. 128*b1cdbd2cSJim Jagielski com.sun.star.beans.XPropertyState xPropertyState = null; 129*b1cdbd2cSJim Jagielski xPropertyState = (com.sun.star.beans.XPropertyState) 130*b1cdbd2cSJim Jagielski UnoRuntime.queryInterface( 131*b1cdbd2cSJim Jagielski com.sun.star.beans.XPropertyState.class, xWordCursor); 132*b1cdbd2cSJim Jagielski 133*b1cdbd2cSJim Jagielski com.sun.star.beans.PropertyState xPropertyStateValue = 134*b1cdbd2cSJim Jagielski xPropertyState.getPropertyState("CharWeight"); 135*b1cdbd2cSJim Jagielski 136*b1cdbd2cSJim Jagielski checkPropertyState( xWordCursor, xPropertyStateValue ); 137*b1cdbd2cSJim Jagielski 138*b1cdbd2cSJim Jagielski xWordCursor.goRight( (short) 3 , true ); 139*b1cdbd2cSJim Jagielski xPropertyStateValue = xPropertyState.getPropertyState("CharWeight"); 140*b1cdbd2cSJim Jagielski 141*b1cdbd2cSJim Jagielski System.out.println("Increase the selection with three characters"); 142*b1cdbd2cSJim Jagielski checkPropertyState(xWordCursor, xPropertyStateValue); 143*b1cdbd2cSJim Jagielski 144*b1cdbd2cSJim Jagielski xPropertyState.setPropertyToDefault("CharWeight"); 145*b1cdbd2cSJim Jagielski 146*b1cdbd2cSJim Jagielski System.out.println("Set the default value on the selection"); 147*b1cdbd2cSJim Jagielski xPropertyStateValue = xPropertyState.getPropertyState("CharWeight"); 148*b1cdbd2cSJim Jagielski checkPropertyState(xWordCursor, xPropertyStateValue); 149*b1cdbd2cSJim Jagielski 150*b1cdbd2cSJim Jagielski // END: 'Hard formating' Section from the Cookbook 151*b1cdbd2cSJim Jagielski } 152*b1cdbd2cSJim Jagielski catch( Exception e) { 153*b1cdbd2cSJim Jagielski e.printStackTrace(System.err); 154*b1cdbd2cSJim Jagielski System.exit(1); 155*b1cdbd2cSJim Jagielski } 156*b1cdbd2cSJim Jagielski 157*b1cdbd2cSJim Jagielski 158*b1cdbd2cSJim Jagielski System.out.println("Done"); 159*b1cdbd2cSJim Jagielski 160*b1cdbd2cSJim Jagielski System.exit(0); 161*b1cdbd2cSJim Jagielski 162*b1cdbd2cSJim Jagielski } 163*b1cdbd2cSJim Jagielski 164*b1cdbd2cSJim Jagielski checkPropertyState( com.sun.star.text.XWordCursor xWordCursor, com.sun.star.beans.PropertyState xPropertyStateValue )165*b1cdbd2cSJim Jagielski public static void checkPropertyState( 166*b1cdbd2cSJim Jagielski com.sun.star.text.XWordCursor xWordCursor, 167*b1cdbd2cSJim Jagielski com.sun.star.beans.PropertyState xPropertyStateValue ) 168*b1cdbd2cSJim Jagielski { 169*b1cdbd2cSJim Jagielski switch( xPropertyStateValue.getValue() ) { 170*b1cdbd2cSJim Jagielski case com.sun.star.beans.PropertyState.DIRECT_VALUE_value: { 171*b1cdbd2cSJim Jagielski System.out.println( "-> The selection '" 172*b1cdbd2cSJim Jagielski + xWordCursor.getString() 173*b1cdbd2cSJim Jagielski + "' completly hard formated" ); 174*b1cdbd2cSJim Jagielski break; 175*b1cdbd2cSJim Jagielski } 176*b1cdbd2cSJim Jagielski 177*b1cdbd2cSJim Jagielski case com.sun.star.beans.PropertyState.DEFAULT_VALUE_value: { 178*b1cdbd2cSJim Jagielski System.out.println( "-> The selection '" 179*b1cdbd2cSJim Jagielski + xWordCursor.getString() 180*b1cdbd2cSJim Jagielski + "' isn't hard formated" ); 181*b1cdbd2cSJim Jagielski break; 182*b1cdbd2cSJim Jagielski } 183*b1cdbd2cSJim Jagielski 184*b1cdbd2cSJim Jagielski case com.sun.star.beans.PropertyState.AMBIGUOUS_VALUE_value: { 185*b1cdbd2cSJim Jagielski System.out.println( "-> The selection '" 186*b1cdbd2cSJim Jagielski + xWordCursor.getString() 187*b1cdbd2cSJim Jagielski + "' isn't completly hard formated" ); 188*b1cdbd2cSJim Jagielski break; 189*b1cdbd2cSJim Jagielski } 190*b1cdbd2cSJim Jagielski 191*b1cdbd2cSJim Jagielski default: 192*b1cdbd2cSJim Jagielski System.out.println( "No PropertyState found" ); 193*b1cdbd2cSJim Jagielski } 194*b1cdbd2cSJim Jagielski } 195*b1cdbd2cSJim Jagielski getDesktop()196*b1cdbd2cSJim Jagielski public static com.sun.star.frame.XDesktop getDesktop() { 197*b1cdbd2cSJim Jagielski com.sun.star.frame.XDesktop xDesktop = null; 198*b1cdbd2cSJim Jagielski com.sun.star.lang.XMultiComponentFactory xMCF = null; 199*b1cdbd2cSJim Jagielski 200*b1cdbd2cSJim Jagielski try { 201*b1cdbd2cSJim Jagielski com.sun.star.uno.XComponentContext xContext = null; 202*b1cdbd2cSJim Jagielski 203*b1cdbd2cSJim Jagielski // get the remote office component context 204*b1cdbd2cSJim Jagielski xContext = com.sun.star.comp.helper.Bootstrap.bootstrap(); 205*b1cdbd2cSJim Jagielski 206*b1cdbd2cSJim Jagielski // get the remote office service manager 207*b1cdbd2cSJim Jagielski xMCF = xContext.getServiceManager(); 208*b1cdbd2cSJim Jagielski if( xMCF != null ) { 209*b1cdbd2cSJim Jagielski System.out.println("Connected to a running office ..."); 210*b1cdbd2cSJim Jagielski 211*b1cdbd2cSJim Jagielski Object oDesktop = xMCF.createInstanceWithContext( 212*b1cdbd2cSJim Jagielski "com.sun.star.frame.Desktop", xContext); 213*b1cdbd2cSJim Jagielski xDesktop = (com.sun.star.frame.XDesktop) UnoRuntime.queryInterface( 214*b1cdbd2cSJim Jagielski com.sun.star.frame.XDesktop.class, oDesktop); 215*b1cdbd2cSJim Jagielski } 216*b1cdbd2cSJim Jagielski else 217*b1cdbd2cSJim Jagielski System.out.println( "Can't create a desktop. No connection, no remote office servicemanager available!" ); 218*b1cdbd2cSJim Jagielski } 219*b1cdbd2cSJim Jagielski catch( Exception e) { 220*b1cdbd2cSJim Jagielski e.printStackTrace(System.err); 221*b1cdbd2cSJim Jagielski System.exit(1); 222*b1cdbd2cSJim Jagielski } 223*b1cdbd2cSJim Jagielski 224*b1cdbd2cSJim Jagielski 225*b1cdbd2cSJim Jagielski return xDesktop; 226*b1cdbd2cSJim Jagielski } 227*b1cdbd2cSJim Jagielski createTextdocument( com.sun.star.frame.XDesktop xDesktop )228*b1cdbd2cSJim Jagielski public static com.sun.star.text.XTextDocument createTextdocument( 229*b1cdbd2cSJim Jagielski com.sun.star.frame.XDesktop xDesktop ) 230*b1cdbd2cSJim Jagielski { 231*b1cdbd2cSJim Jagielski com.sun.star.text.XTextDocument aTextDocument = null; 232*b1cdbd2cSJim Jagielski 233*b1cdbd2cSJim Jagielski try { 234*b1cdbd2cSJim Jagielski com.sun.star.lang.XComponent xComponent = CreateNewDocument(xDesktop, 235*b1cdbd2cSJim Jagielski "swriter"); 236*b1cdbd2cSJim Jagielski aTextDocument = (com.sun.star.text.XTextDocument) 237*b1cdbd2cSJim Jagielski UnoRuntime.queryInterface( 238*b1cdbd2cSJim Jagielski com.sun.star.text.XTextDocument.class, xComponent); 239*b1cdbd2cSJim Jagielski } 240*b1cdbd2cSJim Jagielski catch( Exception e) { 241*b1cdbd2cSJim Jagielski e.printStackTrace(System.err); 242*b1cdbd2cSJim Jagielski } 243*b1cdbd2cSJim Jagielski 244*b1cdbd2cSJim Jagielski return aTextDocument; 245*b1cdbd2cSJim Jagielski } 246*b1cdbd2cSJim Jagielski 247*b1cdbd2cSJim Jagielski CreateNewDocument( com.sun.star.frame.XDesktop xDesktop, String sDocumentType )248*b1cdbd2cSJim Jagielski protected static com.sun.star.lang.XComponent CreateNewDocument( 249*b1cdbd2cSJim Jagielski com.sun.star.frame.XDesktop xDesktop, 250*b1cdbd2cSJim Jagielski String sDocumentType ) 251*b1cdbd2cSJim Jagielski { 252*b1cdbd2cSJim Jagielski String sURL = "private:factory/" + sDocumentType; 253*b1cdbd2cSJim Jagielski 254*b1cdbd2cSJim Jagielski com.sun.star.lang.XComponent xComponent = null; 255*b1cdbd2cSJim Jagielski com.sun.star.frame.XComponentLoader xComponentLoader = null; 256*b1cdbd2cSJim Jagielski com.sun.star.beans.PropertyValue xValues[] = 257*b1cdbd2cSJim Jagielski new com.sun.star.beans.PropertyValue[1]; 258*b1cdbd2cSJim Jagielski com.sun.star.beans.PropertyValue xEmptyArgs[] = 259*b1cdbd2cSJim Jagielski new com.sun.star.beans.PropertyValue[0]; 260*b1cdbd2cSJim Jagielski 261*b1cdbd2cSJim Jagielski try { 262*b1cdbd2cSJim Jagielski xComponentLoader = (com.sun.star.frame.XComponentLoader) 263*b1cdbd2cSJim Jagielski UnoRuntime.queryInterface( 264*b1cdbd2cSJim Jagielski com.sun.star.frame.XComponentLoader.class, xDesktop); 265*b1cdbd2cSJim Jagielski 266*b1cdbd2cSJim Jagielski xComponent = xComponentLoader.loadComponentFromURL( 267*b1cdbd2cSJim Jagielski sURL, "_blank", 0, xEmptyArgs); 268*b1cdbd2cSJim Jagielski } 269*b1cdbd2cSJim Jagielski catch( Exception e) { 270*b1cdbd2cSJim Jagielski e.printStackTrace(System.err); 271*b1cdbd2cSJim Jagielski } 272*b1cdbd2cSJim Jagielski 273*b1cdbd2cSJim Jagielski return xComponent ; 274*b1cdbd2cSJim Jagielski } 275*b1cdbd2cSJim Jagielski } 276