【发布时间】:2016-09-02 08:04:35
【问题描述】:
我正在使用 Java 和 LibreOffice API,我想绘制矩形并设置它们的名称,或者在它们上面放置一些文本字段。绘制形状相对容易,但添加文字真的很难。我在文档和论坛中都没有找到任何解决方案。
我这样声明形状和文本:
Object drawShape = xDrawFactory.createInstance("com.sun.star.drawing.RectangleShape");
XShape xDrawShape = UnoRuntime.queryInterface(XShape.class, drawShape);
xDrawShape.setSize(new Size(10000, 20000));
xDrawShape.setPosition(new Point(5000, 5000));
xDrawPage.add(xDrawShape);
XText xShapeText = UnoRuntime.queryInterface(XText.class, drawShape);
XPropertySet xShapeProps = UnoRuntime.queryInterface(XPropertySet.class, drawShape);
然后我尝试设置 XText:
xShapeText.setString("ABC");
这就是问题出现的地方(即使在阅读了文档中的解释后,我也不清楚这个异常):
com.sun.star.lang.DisposedException 在 com.sun.star.lib.uno.environments.remote.JobQueue.removeJob(JobQueue.java:210) 在 com.sun.star.lib.uno.environments.remote.JobQueue.enter(JobQueue.java:330) 在 com.sun.star.lib.uno.environments.remote.JobQueue.enter(JobQueue.java:303) 在 com.sun.star.lib.uno.environments.remote.JavaThreadPool.enter(JavaThreadPool.java:87) 在 com.sun.star.lib.uno.bridges.java_remote.java_remote_bridge.sendRequest(java_remote_bridge.java:636) 在 com.sun.star.lib.uno.bridges.java_remote.ProxyFactory$Handler.request(ProxyFactory.java:146) 在 com.sun.star.lib.uno.bridges.java_remote.ProxyFactory$Handler.invoke(ProxyFactory.java:128) 在 com.sun.proxy.$Proxy6.setString(未知来源) 在 com.ericsson.stpdiagramgenerator.presentation.core.HelloTextTableShape.manipulateText(HelloTextTableShape.java:265) 在 com.ericsson.stpdiagramgenerator.presentation.core.HelloTextTableShape.useWriter(HelloTextTableShape.java:65) 在 com.ericsson.stpdiagramgenerator.presentation.core.HelloTextTableShape.useDocuments(HelloTextTableShape.java:52) 在 com.ericsson.stpdiagramgenerator.presentation.core.HelloTextTableShape.main(HelloTextTableShape.java:42) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 在 com.intellij.rt.execution.application.AppMain.main(AppMain.java:147) 引起:java.io.IOException: com.sun.star.io.IOException: EOF达到 - socket,host=localhost,port=8100,localHost=localhost.localdomain,localPort=34456,peerHost=localhost,peerPort=8100 在 com.sun.star.lib.uno.bridges.java_remote.XConnectionInputStream_Adapter.read(XConnectionInputStream_Adapter.java:55) 在 java.io.DataInputStream.readInt(DataInputStream.java:387) 在 com.sun.star.lib.uno.protocols.urp.urp.readBlock(urp.java:355) 在 com.sun.star.lib.uno.protocols.urp.urp.readMessage(urp.java:92) 在 com.sun.star.lib.uno.bridges.java_remote.java_remote_bridge$MessageDispatcher.run(java_remote_bridge.java:105)
也许您有另一种解决方案,可以使用 LibreOffice API 在形状上插入文本/文本框/文本字段。
【问题讨论】:
-
您好,欢迎来到 StackOverflow!尽量避免像“我有一个大问题”这样的陈述。相反,只需解释问题所在。除此之外,这是一个写得很好的问题。文档链接也可能有所帮助,尽管在这种情况下我能够轻松找到相关的 UNO API 链接。
标签: java libreoffice libreoffice-draw