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: create a new Paragraph style 28*b1cdbd2cSJim Jagielski // Step 4: apply the Paragraph style 29*b1cdbd2cSJim Jagielski // 30*b1cdbd2cSJim Jagielski // Chapter 4.1.3 Defining Your Own Style 31*b1cdbd2cSJim Jagielski //*************************************************************************** 32*b1cdbd2cSJim Jagielski 33*b1cdbd2cSJim Jagielski import com.sun.star.uno.UnoRuntime; 34*b1cdbd2cSJim Jagielski 35*b1cdbd2cSJim Jagielski 36*b1cdbd2cSJim Jagielski public class StyleCreation { main(String args[])37*b1cdbd2cSJim Jagielski public static void main(String args[]) { 38*b1cdbd2cSJim Jagielski // You need the desktop to create a document 39*b1cdbd2cSJim Jagielski // The getDesktop method does the UNO bootstrapping, gets the 40*b1cdbd2cSJim Jagielski // remote servie manager and the desktop object. 41*b1cdbd2cSJim Jagielski com.sun.star.frame.XDesktop xDesktop = null; 42*b1cdbd2cSJim Jagielski xDesktop = getDesktop(); 43*b1cdbd2cSJim Jagielski 44*b1cdbd2cSJim Jagielski try { 45*b1cdbd2cSJim Jagielski // create text document 46*b1cdbd2cSJim Jagielski com.sun.star.text.XTextDocument xTextDocument = null; 47*b1cdbd2cSJim Jagielski xTextDocument = createTextdocument(xDesktop); 48*b1cdbd2cSJim Jagielski 49*b1cdbd2cSJim Jagielski // the service '..ParagraphStyle' is context dependend, you need 50*b1cdbd2cSJim Jagielski // the multi service factory from the document to use the service 51*b1cdbd2cSJim Jagielski com.sun.star.lang.XMultiServiceFactory xDocMSF = 52*b1cdbd2cSJim Jagielski (com.sun.star.lang.XMultiServiceFactory)UnoRuntime.queryInterface( 53*b1cdbd2cSJim Jagielski com.sun.star.lang.XMultiServiceFactory.class, xTextDocument); 54*b1cdbd2cSJim Jagielski 55*b1cdbd2cSJim Jagielski // use the service 'com.sun.star.style.ParagraphStyle' 56*b1cdbd2cSJim Jagielski com.sun.star.uno.XInterface xInterface = (com.sun.star.uno.XInterface) 57*b1cdbd2cSJim Jagielski xDocMSF.createInstance("com.sun.star.style.ParagraphStyle"); 58*b1cdbd2cSJim Jagielski 59*b1cdbd2cSJim Jagielski // create a supplier to get the Style family collection 60*b1cdbd2cSJim Jagielski com.sun.star.style.XStyleFamiliesSupplier xSupplier = 61*b1cdbd2cSJim Jagielski (com.sun.star.style.XStyleFamiliesSupplier)UnoRuntime.queryInterface( 62*b1cdbd2cSJim Jagielski com.sun.star.style.XStyleFamiliesSupplier.class, xTextDocument ); 63*b1cdbd2cSJim Jagielski 64*b1cdbd2cSJim Jagielski // get the NameAccess interface from the Style family collection 65*b1cdbd2cSJim Jagielski com.sun.star.container.XNameAccess xNameAccess = 66*b1cdbd2cSJim Jagielski xSupplier.getStyleFamilies(); 67*b1cdbd2cSJim Jagielski 68*b1cdbd2cSJim Jagielski // select the Paragraph styles, you get the Paragraph style collection 69*b1cdbd2cSJim Jagielski com.sun.star.container.XNameContainer xParaStyleCollection = 70*b1cdbd2cSJim Jagielski (com.sun.star.container.XNameContainer) UnoRuntime.queryInterface( 71*b1cdbd2cSJim Jagielski com.sun.star.container.XNameContainer.class, 72*b1cdbd2cSJim Jagielski xNameAccess.getByName("ParagraphStyles")); 73*b1cdbd2cSJim Jagielski 74*b1cdbd2cSJim Jagielski // create a PropertySet to set the properties for the new Paragraphstyle 75*b1cdbd2cSJim Jagielski com.sun.star.beans.XPropertySet xPropertySet = 76*b1cdbd2cSJim Jagielski (com.sun.star.beans.XPropertySet) UnoRuntime.queryInterface( 77*b1cdbd2cSJim Jagielski com.sun.star.beans.XPropertySet.class, xInterface ); 78*b1cdbd2cSJim Jagielski System.out.println( "create a PropertySet to set the properties for the new Paragraphstyle" ); 79*b1cdbd2cSJim Jagielski 80*b1cdbd2cSJim Jagielski // set some properties from the Paragraph style 81*b1cdbd2cSJim Jagielski xPropertySet.setPropertyValue("CharFontName", new String( "Helvetica" ) ); 82*b1cdbd2cSJim Jagielski System.out.println( "set name of the font to 'Helvetica'" ); 83*b1cdbd2cSJim Jagielski 84*b1cdbd2cSJim Jagielski xPropertySet.setPropertyValue("CharHeight", new Float( 36 ) ); 85*b1cdbd2cSJim Jagielski System.out.println( "Change the height of th font to 36" ); 86*b1cdbd2cSJim Jagielski 87*b1cdbd2cSJim Jagielski xPropertySet.setPropertyValue("CharWeight", 88*b1cdbd2cSJim Jagielski new Float( com.sun.star.awt.FontWeight.BOLD ) ); 89*b1cdbd2cSJim Jagielski System.out.println( "set the font attribute 'Bold'" ); 90*b1cdbd2cSJim Jagielski 91*b1cdbd2cSJim Jagielski xPropertySet.setPropertyValue("CharAutoKerning", new Boolean( true ) ); 92*b1cdbd2cSJim Jagielski System.out.println( "set the paragraph attribute 'AutoKerning'" ); 93*b1cdbd2cSJim Jagielski xPropertySet.setPropertyValue("ParaAdjust", 94*b1cdbd2cSJim Jagielski new Integer( com.sun.star.style.ParagraphAdjust.CENTER_value ) ); 95*b1cdbd2cSJim Jagielski System.out.println( "set the paragraph adjust to LEFT" ); 96*b1cdbd2cSJim Jagielski 97*b1cdbd2cSJim Jagielski xPropertySet.setPropertyValue("ParaFirstLineIndent", new Integer( 0 ) ); 98*b1cdbd2cSJim Jagielski System.out.println( "set the first line indent to 0 cm" ); 99*b1cdbd2cSJim Jagielski 100*b1cdbd2cSJim Jagielski xPropertySet.setPropertyValue("BreakType", 101*b1cdbd2cSJim Jagielski com.sun.star.style.BreakType.PAGE_AFTER ); 102*b1cdbd2cSJim Jagielski System.out.println( "set the paragraph attribute Breaktype to PageAfter" ); 103*b1cdbd2cSJim Jagielski 104*b1cdbd2cSJim Jagielski // insert the new Paragraph style in the Paragraph style collection 105*b1cdbd2cSJim Jagielski xParaStyleCollection.insertByName( "myheading", xPropertySet ); 106*b1cdbd2cSJim Jagielski System.out.println( "create new paragraph style, with the values from the Propertyset"); 107*b1cdbd2cSJim Jagielski 108*b1cdbd2cSJim Jagielski // get the Textrange from the document 109*b1cdbd2cSJim Jagielski com.sun.star.text.XTextRange xTextRange = 110*b1cdbd2cSJim Jagielski xTextDocument.getText().getStart(); 111*b1cdbd2cSJim Jagielski 112*b1cdbd2cSJim Jagielski // get the PropertySet from the current paragraph 113*b1cdbd2cSJim Jagielski com.sun.star.beans.XPropertySet xParagraphPropertySet = 114*b1cdbd2cSJim Jagielski (com.sun.star.beans.XPropertySet)UnoRuntime.queryInterface( 115*b1cdbd2cSJim Jagielski com.sun.star.beans.XPropertySet.class, xTextRange ); 116*b1cdbd2cSJim Jagielski // change the value from the property 'ParaStyle' to apply the 117*b1cdbd2cSJim Jagielski // Paragraph style 118*b1cdbd2cSJim Jagielski // To run the sample with StarOffice 5.2 you'll have to change 119*b1cdbd2cSJim Jagielski // 'ParaStyleName' to 'ParaStyle' in the next line 120*b1cdbd2cSJim Jagielski xParagraphPropertySet.setPropertyValue("ParaStyleName", 121*b1cdbd2cSJim Jagielski new String( "myheading" ) ); 122*b1cdbd2cSJim Jagielski System.out.println( "apply the new paragraph style"); 123*b1cdbd2cSJim Jagielski } 124*b1cdbd2cSJim Jagielski catch( Exception e) { 125*b1cdbd2cSJim Jagielski e.printStackTrace(System.err); 126*b1cdbd2cSJim Jagielski System.exit(1); 127*b1cdbd2cSJim Jagielski } 128*b1cdbd2cSJim Jagielski 129*b1cdbd2cSJim Jagielski System.out.println("done"); 130*b1cdbd2cSJim Jagielski 131*b1cdbd2cSJim Jagielski System.exit(0); 132*b1cdbd2cSJim Jagielski } 133*b1cdbd2cSJim Jagielski 134*b1cdbd2cSJim Jagielski getDesktop()135*b1cdbd2cSJim Jagielski public static com.sun.star.frame.XDesktop getDesktop() { 136*b1cdbd2cSJim Jagielski com.sun.star.frame.XDesktop xDesktop = null; 137*b1cdbd2cSJim Jagielski com.sun.star.lang.XMultiComponentFactory xMCF = null; 138*b1cdbd2cSJim Jagielski 139*b1cdbd2cSJim Jagielski try { 140*b1cdbd2cSJim Jagielski com.sun.star.uno.XComponentContext xContext = null; 141*b1cdbd2cSJim Jagielski 142*b1cdbd2cSJim Jagielski // get the remote office component context 143*b1cdbd2cSJim Jagielski xContext = com.sun.star.comp.helper.Bootstrap.bootstrap(); 144*b1cdbd2cSJim Jagielski 145*b1cdbd2cSJim Jagielski // get the remote office service manager 146*b1cdbd2cSJim Jagielski xMCF = xContext.getServiceManager(); 147*b1cdbd2cSJim Jagielski if( xMCF != null ) { 148*b1cdbd2cSJim Jagielski System.out.println("Connected to a running office ..."); 149*b1cdbd2cSJim Jagielski 150*b1cdbd2cSJim Jagielski Object oDesktop = xMCF.createInstanceWithContext( 151*b1cdbd2cSJim Jagielski "com.sun.star.frame.Desktop", xContext); 152*b1cdbd2cSJim Jagielski xDesktop = (com.sun.star.frame.XDesktop) UnoRuntime.queryInterface( 153*b1cdbd2cSJim Jagielski com.sun.star.frame.XDesktop.class, oDesktop); 154*b1cdbd2cSJim Jagielski } 155*b1cdbd2cSJim Jagielski else 156*b1cdbd2cSJim Jagielski System.out.println( "Can't create a desktop. No connection, no remote office servicemanager available!" ); 157*b1cdbd2cSJim Jagielski } 158*b1cdbd2cSJim Jagielski catch( Exception e) { 159*b1cdbd2cSJim Jagielski e.printStackTrace(System.err); 160*b1cdbd2cSJim Jagielski System.exit(1); 161*b1cdbd2cSJim Jagielski } 162*b1cdbd2cSJim Jagielski 163*b1cdbd2cSJim Jagielski 164*b1cdbd2cSJim Jagielski return xDesktop; 165*b1cdbd2cSJim Jagielski } 166*b1cdbd2cSJim Jagielski createTextdocument( com.sun.star.frame.XDesktop xDesktop )167*b1cdbd2cSJim Jagielski public static com.sun.star.text.XTextDocument createTextdocument( 168*b1cdbd2cSJim Jagielski com.sun.star.frame.XDesktop xDesktop ) 169*b1cdbd2cSJim Jagielski { 170*b1cdbd2cSJim Jagielski com.sun.star.text.XTextDocument aTextDocument = null; 171*b1cdbd2cSJim Jagielski 172*b1cdbd2cSJim Jagielski try { 173*b1cdbd2cSJim Jagielski com.sun.star.lang.XComponent xComponent = CreateNewDocument(xDesktop, 174*b1cdbd2cSJim Jagielski "swriter"); 175*b1cdbd2cSJim Jagielski aTextDocument = (com.sun.star.text.XTextDocument) 176*b1cdbd2cSJim Jagielski UnoRuntime.queryInterface( 177*b1cdbd2cSJim Jagielski com.sun.star.text.XTextDocument.class, xComponent); 178*b1cdbd2cSJim Jagielski } 179*b1cdbd2cSJim Jagielski catch( Exception e) { 180*b1cdbd2cSJim Jagielski e.printStackTrace(System.err); 181*b1cdbd2cSJim Jagielski } 182*b1cdbd2cSJim Jagielski 183*b1cdbd2cSJim Jagielski return aTextDocument; 184*b1cdbd2cSJim Jagielski } 185*b1cdbd2cSJim Jagielski 186*b1cdbd2cSJim Jagielski CreateNewDocument( com.sun.star.frame.XDesktop xDesktop, String sDocumentType )187*b1cdbd2cSJim Jagielski protected static com.sun.star.lang.XComponent CreateNewDocument( 188*b1cdbd2cSJim Jagielski com.sun.star.frame.XDesktop xDesktop, 189*b1cdbd2cSJim Jagielski String sDocumentType ) 190*b1cdbd2cSJim Jagielski { 191*b1cdbd2cSJim Jagielski String sURL = "private:factory/" + sDocumentType; 192*b1cdbd2cSJim Jagielski 193*b1cdbd2cSJim Jagielski com.sun.star.lang.XComponent xComponent = null; 194*b1cdbd2cSJim Jagielski com.sun.star.frame.XComponentLoader xComponentLoader = null; 195*b1cdbd2cSJim Jagielski com.sun.star.beans.PropertyValue xValues[] = 196*b1cdbd2cSJim Jagielski new com.sun.star.beans.PropertyValue[1]; 197*b1cdbd2cSJim Jagielski com.sun.star.beans.PropertyValue xEmptyArgs[] = 198*b1cdbd2cSJim Jagielski new com.sun.star.beans.PropertyValue[0]; 199*b1cdbd2cSJim Jagielski 200*b1cdbd2cSJim Jagielski try { 201*b1cdbd2cSJim Jagielski xComponentLoader = (com.sun.star.frame.XComponentLoader) 202*b1cdbd2cSJim Jagielski UnoRuntime.queryInterface( 203*b1cdbd2cSJim Jagielski com.sun.star.frame.XComponentLoader.class, xDesktop); 204*b1cdbd2cSJim Jagielski 205*b1cdbd2cSJim Jagielski xComponent = xComponentLoader.loadComponentFromURL( 206*b1cdbd2cSJim Jagielski sURL, "_blank", 0, xEmptyArgs); 207*b1cdbd2cSJim Jagielski } 208*b1cdbd2cSJim Jagielski catch( Exception e) { 209*b1cdbd2cSJim Jagielski e.printStackTrace(System.err); 210*b1cdbd2cSJim Jagielski } 211*b1cdbd2cSJim Jagielski 212*b1cdbd2cSJim Jagielski return xComponent ; 213*b1cdbd2cSJim Jagielski } 214*b1cdbd2cSJim Jagielski } 215*b1cdbd2cSJim Jagielski 216