1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 import com.sun.star.uno.UnoRuntime;
25 
26 import java.io.PrintWriter;
27 import java.io.BufferedWriter;
28 import java.io.FileWriter;
29 
30 
31 public class GraphicsInserter {
main(String args[])32     public static void main(String args[]) {
33         if ( args.length < 1 )
34         {
35             System.out.println(
36                 "usage: java -jar GraphicsInserter.jar \"<Graphic URL|path>\"" );
37             System.out.println( "\ne.g.:" );
38             System.out.println(
39                 "java -jar GraphicsInserter.jar \"file:///f:/TestGraphics.gif\"" );
40             System.exit( 1 );
41         }
42 
43         com.sun.star.uno.XComponentContext xContext = null;
44 
45         try {
46 
47             // bootstrap UNO and get the remote component context. The context can
48             // be used to get the service manager
49             xContext = com.sun.star.comp.helper.Bootstrap.bootstrap();
50             System.out.println("Connected to a running office ...");
51 
52             // get the remote office service manager
53             com.sun.star.lang.XMultiComponentFactory xMCF =
54                 xContext.getServiceManager();
55 
56             /* A desktop environment contains tasks with one or more
57                frames in which components can be loaded. Desktop is the
58                environment for components which can instanciate within
59                frames. */
60             com.sun.star.frame.XDesktop xDesktop = (com.sun.star.frame.XDesktop)
61                 UnoRuntime.queryInterface(com.sun.star.frame.XDesktop.class,
62                     xMCF.createInstanceWithContext("com.sun.star.frame.Desktop",
63                                                    xContext ) );
64 
65             com.sun.star.frame.XComponentLoader xCompLoader =
66                 (com.sun.star.frame.XComponentLoader)UnoRuntime.queryInterface(
67                     com.sun.star.frame.XComponentLoader.class, xDesktop);
68 
69             // Load a Writer document, which will be automatically displayed
70             com.sun.star.lang.XComponent xComp = xCompLoader.loadComponentFromURL(
71                 "private:factory/swriter", "_blank", 0,
72                 new com.sun.star.beans.PropertyValue[0]);
73 
74             // Querying for the interface XTextDocument on the xcomponent
75             com.sun.star.text.XTextDocument xTextDoc =
76                 (com.sun.star.text.XTextDocument)UnoRuntime.queryInterface(
77                     com.sun.star.text.XTextDocument.class, xComp);
78 
79             // Querying for the interface XMultiServiceFactory on the xtextdocument
80             com.sun.star.lang.XMultiServiceFactory xMSFDoc =
81                 (com.sun.star.lang.XMultiServiceFactory)UnoRuntime.queryInterface(
82                     com.sun.star.lang.XMultiServiceFactory.class, xTextDoc);
83 
84             // Providing a log file for output
85             PrintWriter printwriterLog = new PrintWriter(
86                 new BufferedWriter( new FileWriter("log.txt") ) );
87 
88             Object oGraphic = null;
89             try {
90                 // Creating the service GraphicObject
91                 oGraphic =
92                     xMSFDoc.createInstance("com.sun.star.text.TextGraphicObject");
93             }
94             catch ( Exception exception ) {
95                 System.out.println( "Could not create instance" );
96                 exception.printStackTrace( printwriterLog );
97             }
98 
99             // Getting the text
100             com.sun.star.text.XText xText = xTextDoc.getText();
101 
102             // Getting the cursor on the document
103             com.sun.star.text.XTextCursor xTextCursor = xText.createTextCursor();
104 
105             // Querying for the interface XTextContent on the GraphicObject
106             com.sun.star.text.XTextContent xTextContent =
107                 (com.sun.star.text.XTextContent)UnoRuntime.queryInterface(
108                     com.sun.star.text.XTextContent.class, oGraphic );
109 
110             // Printing information to the log file
111             printwriterLog.println( "inserting graphic" );
112             try {
113                 // Inserting the content
114                 xText.insertTextContent(xTextCursor, xTextContent, true);
115             } catch ( Exception exception ) {
116                 System.out.println( "Could not insert Content" );
117                 exception.printStackTrace(System.err);
118             }
119 
120             // Printing information to the log file
121             printwriterLog.println( "adding graphic" );
122 
123             // Querying for the interface XPropertySet on GraphicObject
124             com.sun.star.beans.XPropertySet xPropSet =
125                 (com.sun.star.beans.XPropertySet)UnoRuntime.queryInterface(
126                     com.sun.star.beans.XPropertySet.class, oGraphic);
127             try {
128                 // Creating a string for the graphic url
129                 java.io.File sourceFile = new java.io.File(args[0]);
130                 StringBuffer sUrl = new StringBuffer("file:///");
131                 sUrl.append(sourceFile.getCanonicalPath().replace('\\', '/'));
132                 System.out.println( "insert graphic \"" + sUrl + "\"");
133 
134                 // Setting the anchor type
135                 xPropSet.setPropertyValue("AnchorType",
136                            com.sun.star.text.TextContentAnchorType.AT_PARAGRAPH );
137 
138                 // Setting the graphic url
139                 xPropSet.setPropertyValue( "GraphicURL", sUrl.toString() );
140 
141                 // Setting the horizontal position
142                 xPropSet.setPropertyValue( "HoriOrientPosition",
143                                            new Integer( 5500 ) );
144 
145                 // Setting the vertical position
146                 xPropSet.setPropertyValue( "VertOrientPosition",
147                                            new Integer( 4200 ) );
148 
149                 // Setting the width
150                 xPropSet.setPropertyValue( "Width", new Integer( 4400 ) );
151 
152                 // Setting the height
153                 xPropSet.setPropertyValue( "Height", new Integer( 4000 ) );
154             } catch ( Exception exception ) {
155                 System.out.println( "Couldn't set property 'GraphicURL'" );
156                 exception.printStackTrace( printwriterLog );
157             }
158 
159             xContext = null;
160 
161             System.exit(0);
162         }
163         catch( Exception e ) {
164             e.printStackTrace(System.err);
165             System.exit(1);
166         }
167     }
168 }
169