blob: 0cd92d91fa06f21d2939dfd168547da304478ec9 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
//***************************************************************************
// comment: Step 1: get the Desktop object from the office
// Step 2: open an empty text document
// Step 3: create a new Paragraph style
// Step 4: apply the Paragraph style
//
// Chapter 4.1.3 Defining Your Own Style
//***************************************************************************
import com.sun.star.uno.UnoRuntime;
public class StyleCreation {
public static void main(String args[]) {
// You need the desktop to create a document
// The getDesktop method does the UNO bootstrapping, gets the
// remote servie manager and the desktop object.
com.sun.star.frame.XDesktop xDesktop = null;
xDesktop = getDesktop();
try {
// create text document
com.sun.star.text.XTextDocument xTextDocument = null;
xTextDocument = createTextdocument(xDesktop);
// the service '..ParagraphStyle' is context dependend, you need
// the multi service factory from the document to use the service
com.sun.star.lang.XMultiServiceFactory xDocMSF =
(com.sun.star.lang.XMultiServiceFactory)UnoRuntime.queryInterface(
com.sun.star.lang.XMultiServiceFactory.class, xTextDocument);
// use the service 'com.sun.star.style.ParagraphStyle'
com.sun.star.uno.XInterface xInterface = (com.sun.star.uno.XInterface)
xDocMSF.createInstance("com.sun.star.style.ParagraphStyle");
// create a supplier to get the Style family collection
com.sun.star.style.XStyleFamiliesSupplier xSupplier =
(com.sun.star.style.XStyleFamiliesSupplier)UnoRuntime.queryInterface(
com.sun.star.style.XStyleFamiliesSupplier.class, xTextDocument );
// get the NameAccess interface from the Style family collection
com.sun.star.container.XNameAccess xNameAccess =
xSupplier.getStyleFamilies();
// select the Paragraph styles, you get the Paragraph style collection
com.sun.star.container.XNameContainer xParaStyleCollection =
(com.sun.star.container.XNameContainer) UnoRuntime.queryInterface(
com.sun.star.container.XNameContainer.class,
xNameAccess.getByName("ParagraphStyles"));
// create a PropertySet to set the properties for the new Paragraphstyle
com.sun.star.beans.XPropertySet xPropertySet =
(com.sun.star.beans.XPropertySet) UnoRuntime.queryInterface(
com.sun.star.beans.XPropertySet.class, xInterface );
System.out.println( "create a PropertySet to set the properties for the new Paragraphstyle" );
// set some properties from the Paragraph style
xPropertySet.setPropertyValue("CharFontName", new String( "Helvetica" ) );
System.out.println( "set name of the font to 'Helvetica'" );
xPropertySet.setPropertyValue("CharHeight", new Float( 36 ) );
System.out.println( "Change the height of th font to 36" );
xPropertySet.setPropertyValue("CharWeight",
new Float( com.sun.star.awt.FontWeight.BOLD ) );
System.out.println( "set the font attribute 'Bold'" );
xPropertySet.setPropertyValue("CharAutoKerning", new Boolean( true ) );
System.out.println( "set the paragraph attribute 'AutoKerning'" );
xPropertySet.setPropertyValue("ParaAdjust",
new Integer( com.sun.star.style.ParagraphAdjust.CENTER_value ) );
System.out.println( "set the paragraph adjust to LEFT" );
xPropertySet.setPropertyValue("ParaFirstLineIndent", new Integer( 0 ) );
System.out.println( "set the first line indent to 0 cm" );
xPropertySet.setPropertyValue("BreakType",
com.sun.star.style.BreakType.PAGE_AFTER );
System.out.println( "set the paragraph attribute Breaktype to PageAfter" );
// insert the new Paragraph style in the Paragraph style collection
xParaStyleCollection.insertByName( "myheading", xPropertySet );
System.out.println( "create new paragraph style, with the values from the Propertyset");
// get the Textrange from the document
com.sun.star.text.XTextRange xTextRange =
xTextDocument.getText().getStart();
// get the PropertySet from the current paragraph
com.sun.star.beans.XPropertySet xParagraphPropertySet =
(com.sun.star.beans.XPropertySet)UnoRuntime.queryInterface(
com.sun.star.beans.XPropertySet.class, xTextRange );
// change the value from the property 'ParaStyle' to apply the
// Paragraph style
// To run the sample with StarOffice 5.2 you'll have to change
// 'ParaStyleName' to 'ParaStyle' in the next line
xParagraphPropertySet.setPropertyValue("ParaStyleName",
new String( "myheading" ) );
System.out.println( "apply the new paragraph style");
}
catch( Exception e) {
e.printStackTrace(System.err);
System.exit(1);
}
System.out.println("done");
System.exit(0);
}
public static com.sun.star.frame.XDesktop getDesktop() {
com.sun.star.frame.XDesktop xDesktop = null;
com.sun.star.lang.XMultiComponentFactory xMCF = null;
try {
com.sun.star.uno.XComponentContext xContext = null;
// get the remote office component context
xContext = com.sun.star.comp.helper.Bootstrap.bootstrap();
// get the remote office service manager
xMCF = xContext.getServiceManager();
if( xMCF != null ) {
System.out.println("Connected to a running office ...");
Object oDesktop = xMCF.createInstanceWithContext(
"com.sun.star.frame.Desktop", xContext);
xDesktop = (com.sun.star.frame.XDesktop) UnoRuntime.queryInterface(
com.sun.star.frame.XDesktop.class, oDesktop);
}
else
System.out.println( "Can't create a desktop. No connection, no remote office servicemanager available!" );
}
catch( Exception e) {
e.printStackTrace(System.err);
System.exit(1);
}
return xDesktop;
}
public static com.sun.star.text.XTextDocument createTextdocument(
com.sun.star.frame.XDesktop xDesktop )
{
com.sun.star.text.XTextDocument aTextDocument = null;
try {
com.sun.star.lang.XComponent xComponent = CreateNewDocument(xDesktop,
"swriter");
aTextDocument = (com.sun.star.text.XTextDocument)
UnoRuntime.queryInterface(
com.sun.star.text.XTextDocument.class, xComponent);
}
catch( Exception e) {
e.printStackTrace(System.err);
}
return aTextDocument;
}
protected static com.sun.star.lang.XComponent CreateNewDocument(
com.sun.star.frame.XDesktop xDesktop,
String sDocumentType )
{
String sURL = "private:factory/" + sDocumentType;
com.sun.star.lang.XComponent xComponent = null;
com.sun.star.frame.XComponentLoader xComponentLoader = null;
com.sun.star.beans.PropertyValue xValues[] =
new com.sun.star.beans.PropertyValue[1];
com.sun.star.beans.PropertyValue xEmptyArgs[] =
new com.sun.star.beans.PropertyValue[0];
try {
xComponentLoader = (com.sun.star.frame.XComponentLoader)
UnoRuntime.queryInterface(
com.sun.star.frame.XComponentLoader.class, xDesktop);
xComponent = xComponentLoader.loadComponentFromURL(
sURL, "_blank", 0, xEmptyArgs);
}
catch( Exception e) {
e.printStackTrace(System.err);
}
return xComponent ;
}
}