Java 使用OpenOffice API获取整个文档树
我想在3.1中获取一个文档的整个树。我需要收集树中所有元素的数据,而不仅仅是Java 使用OpenOffice API获取整个文档树,java,c++,openoffice.org,Java,C++,Openoffice.org,我想在3.1中获取一个文档的整个树。我需要收集树中所有元素的数据,而不仅仅是Text元素 通过加载XTextDocument并执行getText()将给出XText元素。更具体地说,从XText使用XEnumerationAccess只会在TextRange上迭代 从OpenOffice文档中: com.sun.star.text.text的第二个接口是XEnumerationAccess。文本服务枚举文本中的所有段落,并返回支持com.sun.star.Text.paragration的对象。
Text
元素
通过加载XTextDocument
并执行getText()
将给出XText
元素。更具体地说,从XText
使用XEnumerationAccess
只会在TextRange
上迭代
从OpenOffice文档中:
com.sun.star.text.text的第二个接口是XEnumerationAccess。文本服务枚举文本中的所有段落,并返回支持com.sun.star.Text.paragration的对象。这包括表,因为writer将表视为支持com.sun.star.text.TextTable服务的专用段落
以下是一些附加文档:
段落的文本部分枚举不提供确实属于该段落的内容,但不会与文本流融合在一起。这些可以是文本框、图形对象、嵌入对象或锚定在段落上的图形、字符或字符。TextPortionType“TextContent”表示是否存在锚定在字符上或作为字符的内容。如果您有TextContent部分类型,则知道存在定位在角色或作为角色的形状对象
我的测试文档表明我确实获得了a,可以通过getAnchor()
收集。但是我如何确定我收集的内容类型呢?唯一的方法是getString()
。如果对象是嵌入式图像,如何收集其数据
<>我使用C++,但是我相信java中的一个解决方案是可移植的。
从应答迁移而来 由于格式不好,此评论作为答案发布 谢谢你的回复 我打算使用API 我正在尝试从文档中收集
GrahicObjects
的示例。通过使用xGraphicObjectsApplication
我可以通过getGraphicObjects()
获得一个集合。集合中的对象是Any
,通过getValueTypeName()
打印类型将提供XTextContent
API描述集合包含一个
TextGraphicObject
“服务”。我如何抓住它的一个例子?你的问题的答案会很复杂,但我会尽量让自己理解
- 将文档导出为XML将 使用SAX更容易处理。如果 使用XML方式,您必须 实现XDocumentHandler并读取 文档(可选)过滤什么 你不需要。其余的工作将是XSLT转换或用于大型文档的SAX
- 如果您喜欢只使用API, 你得和我一起玩很多 XServiceInfo和UnoRuntime.queryInterface
- 在java中:
XComponentContext xContext = Bootstrap.bootstrap();
XMultiComponentFactory xMCF = xContext.getServiceManager();
Object oDesktop = xMCF.createInstanceWithContext("com.sun.star.frame.Desktop", xContext);
XDesktop xDesktop = UnoRuntime.queryInterface(XDesktop.class, oDesktop);
XComponentLoader xCompLoader = UnoRuntime.queryInterface(XComponentLoader.class, xDesktop);
XComponent xComp = xCompLoader.loadComponentFromURL("file:///C:/test.odt", "_blank", 0, new Boolean(true));
XTextDocument xDoc = UnoRuntime.queryInterface(XTextDocument.class, xComp);
XModel xModel =UnoRuntime.queryInterface( XModel.class, xDoc );
XDrawPageSupplier xDPS = UnoRuntime.queryInterface(XDrawPageSupplier.class, xModel);
XDrawPage xDrawPage = xDPS.getDrawPage();
XShapes xShapes = UnoRuntime.queryInterface( XShapes.class, xDrawPage );
for (int s=0;s<xDrawPage.getCount();s++) {
XShape xShape = UnoRuntime.queryInterface( XShape.class, xShapes.getByIndex(s) );
System.out.println(" -- sh.getShapeType: " + xShape.getShapeType());
System.out.println(" -- sh.getPosition: " + xShape.getPosition().X + "x" + xShape.getPosition().Y);
System.out.println(" -- sh.getSize: " + xShape.getSize().Width + "x" + xShape.getSize().Height);
}
XComponentContext xContext=Bootstrap.Bootstrap();
XMMultiComponentFactory xMCF=xContext.getServiceManager();
对象oDesktop=xMCF.createInstanceWithContext(“com.sun.star.frame.Desktop”,xContext);
XDesktop XDesktop=UnoRuntime.queryInterface(XDesktop.class,oDesktop);
XComponentLoader XComponentLoader=UnoRuntime.queryInterface(XComponentLoader.class,xDesktop);
XComponent XComponent=XComponentLoader.loadComponentFromURL(“file:///C:/test.odt“,”_blank“,0,新布尔值(真));
XTextDocument xDoc=UnoRuntime.queryInterface(XTextDocument.class,xComp);
XModel XModel=UnoRuntime.queryInterface(XModel.class,xDoc);
XDrawPageSupplier xDPS=UnoRuntime.queryInterface(XDrawPageSupplier.class,xModel);
XDrawPage XDrawPage=xDPS.getDrawPage();
XShapes XShapes=unorauntime.queryInterface(XShapes.class,xDrawPage);
对于(int s=0;s