| /************************************************************** | |
| * | |
| * 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. | |
| * | |
| *************************************************************/ | |
| package testlib.uno; | |
| import static org.junit.Assert.*; | |
| import static testlib.uno.GraphicUtil.getSizePixelOfGraphicFile; | |
| import org.junit.After; | |
| import org.junit.AfterClass; | |
| import org.junit.Before; | |
| import org.junit.BeforeClass; | |
| import org.junit.Test; | |
| import org.openoffice.test.uno.UnoApp; | |
| import org.openoffice.test.common.FileUtil; | |
| import org.openoffice.test.common.Testspace; | |
| import com.sun.star.beans.Property; | |
| import com.sun.star.beans.PropertyValue; | |
| import com.sun.star.beans.UnknownPropertyException; | |
| import com.sun.star.beans.XPropertySet; | |
| import com.sun.star.beans.XPropertySetInfo; | |
| import com.sun.star.drawing.XDrawPage; | |
| import com.sun.star.drawing.XShape; | |
| import com.sun.star.drawing.XShapes; | |
| import com.sun.star.graphic.XGraphic; | |
| import com.sun.star.graphic.XGraphicObject; | |
| import com.sun.star.graphic.XGraphicProvider; | |
| import com.sun.star.lang.WrappedTargetException; | |
| import com.sun.star.lang.XComponent; | |
| import com.sun.star.lang.XMultiServiceFactory; | |
| import com.sun.star.lang.XServiceName; | |
| import com.sun.star.uno.Exception; | |
| import com.sun.star.uno.UnoRuntime; | |
| import com.sun.star.awt.Point; | |
| import com.sun.star.awt.Size; | |
| //import com.sun.star.uno.AnyConverter; | |
| public class GraphicUtil { | |
| public static String getUniqueIDbyXGraphic(UnoApp unoApp, XGraphic xgraphic) throws Exception{ | |
| Object graphicObj = unoApp.getServiceFactory().createInstance("com.sun.star.graphic.GraphicObject"); | |
| XGraphicObject xgraphicObj = (XGraphicObject)UnoRuntime.queryInterface(XGraphicObject.class, graphicObj); | |
| xgraphicObj.setGraphic(xgraphic); | |
| return xgraphicObj.getUniqueID(); | |
| } | |
| // String sUrl = "file:///F:/work/36.gif"; | |
| public static String getUniqueIDOfGraphicFile(UnoApp unoApp, String sUrl) throws Exception{ | |
| XGraphic xgraphic = getXGraphicOfGraphicFile(unoApp,sUrl); | |
| String uniqueID = getUniqueIDbyXGraphic(unoApp, xgraphic); | |
| return uniqueID; | |
| } | |
| public static XGraphic getXGraphicOfGraphicFile(UnoApp unoApp, String sUrl) throws Exception | |
| { | |
| Object graphicObj = unoApp.getServiceFactory().createInstance("com.sun.star.graphic.GraphicProvider"); | |
| XGraphicProvider xgraphicProvider = (XGraphicProvider)UnoRuntime.queryInterface(XGraphicProvider.class, graphicObj); | |
| PropertyValue[] sourceProps = new PropertyValue[1]; | |
| sourceProps[0] = new PropertyValue(); | |
| sourceProps[0].Name = "URL"; | |
| sourceProps[0].Value = sUrl; | |
| return xgraphicProvider.queryGraphic(sourceProps); | |
| } | |
| public static Size getSize100thMMOfGraphicFile(UnoApp unoApp, String sUrl) throws Exception | |
| { | |
| Object graphicObj = unoApp.getServiceFactory().createInstance("com.sun.star.graphic.GraphicProvider"); | |
| XGraphicProvider xgraphicProvider = (XGraphicProvider)UnoRuntime.queryInterface(XGraphicProvider.class, graphicObj); | |
| PropertyValue[] sourceProps = new PropertyValue[1]; | |
| sourceProps[0] = new PropertyValue(); | |
| sourceProps[0].Name = "URL"; | |
| sourceProps[0].Value = sUrl; | |
| XPropertySet xGraphicPro = xgraphicProvider.queryGraphicDescriptor(sourceProps); | |
| Size size = (Size)xGraphicPro.getPropertyValue("Size100thMM"); | |
| return size; | |
| } | |
| public static Size getSizePixelOfGraphicFile(UnoApp unoApp, String sUrl) throws Exception | |
| { | |
| Object graphicObj = unoApp.getServiceFactory().createInstance("com.sun.star.graphic.GraphicProvider"); | |
| XGraphicProvider xgraphicProvider = (XGraphicProvider)UnoRuntime.queryInterface(XGraphicProvider.class, graphicObj); | |
| PropertyValue[] sourceProps = new PropertyValue[1]; | |
| sourceProps[0] = new PropertyValue(); | |
| sourceProps[0].Name = "URL"; | |
| sourceProps[0].Value = sUrl; | |
| XPropertySet xGraphicPro = xgraphicProvider.queryGraphicDescriptor(sourceProps); | |
| Size size = (Size)xGraphicPro.getPropertyValue("SizePixel"); | |
| return size; | |
| } | |
| //GraphicObjectShape | |
| public static Object[] getGraphicsOfPage(XDrawPage xDrawPage) throws Exception { | |
| XShapes m_xdrawShapes = (XShapes) UnoRuntime.queryInterface(XShapes.class, xDrawPage); | |
| int count = m_xdrawShapes.getCount(); | |
| Object[] temp = new Object[count]; | |
| int graphicNum=0; | |
| for(int i=0;i<count; i++) | |
| { | |
| Object shape = m_xdrawShapes.getByIndex(i); | |
| XShape xshape = (XShape)UnoRuntime.queryInterface(XShape.class, shape); | |
| String type = xshape.getShapeType(); | |
| if(type.equals("com.sun.star.drawing.GraphicObjectShape")) | |
| { | |
| temp[graphicNum] = shape; | |
| graphicNum++; | |
| } | |
| } | |
| Object[] graphics = new Object[graphicNum]; | |
| System.arraycopy(temp, 0, graphics, 0, graphicNum); | |
| return graphics; | |
| } | |
| /*Insert a graphic into a Impress | |
| * component: the Impress document | |
| * toPage: the page that the graphic will be inserted to | |
| * graphicURL: the file path of the graphic, e.g. file:///c:/test.png | |
| * size: size of the graphic to be inserted | |
| * position: position of the graphic to be inserted | |
| * */ | |
| public static void insertGraphic(XComponent component, XDrawPage toPage, String graphicURL, Size size, Point position) throws Exception | |
| { | |
| XMultiServiceFactory xDrawFactory = | |
| (XMultiServiceFactory)UnoRuntime.queryInterface( | |
| XMultiServiceFactory.class, component); | |
| Object oGraphic = xDrawFactory.createInstance("com.sun.star.drawing.GraphicObjectShape"); | |
| XPropertySet xGraphicPro = (XPropertySet)UnoRuntime.queryInterface(XPropertySet.class, oGraphic); | |
| xGraphicPro.setPropertyValue("GraphicURL", graphicURL); | |
| XShape xDrawShape = (XShape)UnoRuntime.queryInterface(XShape.class, oGraphic); | |
| xDrawShape.setSize(size); | |
| xDrawShape.setPosition(position); | |
| toPage.add(xDrawShape); | |
| } | |
| } |