gpt4 book ai didi

java - 使用 OpenOffice API 抓取整个文档树

转载 作者:太空狗 更新时间:2023-10-29 23:20:18 25 4
gpt4 key购买 nike

我想为 Writer 抓取整棵树文档在 OpenOffice 3.1.我需要收集树中所有元素的数据,而不仅仅是 Text 元素。

通过加载 XTextDocument 并执行 getText() 将提供 XText 元素。更具体地说,使用 XText 中的 XEnumerationAccess 只会迭代 TextRange

来自 OpenOffice 文档 /DevGuide/Text/Iterating_over_Text :

The second interface of com.sun.star.text.Text is XEnumerationAccess. A Text service enumerates all paragraphs in a text and returns objects which support com.sun.star.text.Paragraph. This includes tables, because writer sees tables as specialized paragraphs that support the com.sun.star.text.TextTable service.

这里有一些额外的文档:

The text portion enumeration of a paragraph does not supply contents which do belong to the paragraph, but do not fuse together with the text flow. These could be text frames, graphic objects, embedded objects or drawing shapes anchored at the paragraph, characters or as character. The TextPortionType "TextContent" indicate if there is a content anchored at a character or as a character. If you have a TextContent portion type, you know that there are shape objects anchored at a character or as a character.

我的测试文档表明我确实得到了一个 XTextContentXTextRange可以通过 getAnchor() 收集。但是我如何确定我正在收集的内容类型呢?唯一的方法是 getString()。如果对象是嵌入图像,我该如何收集它的数据?

我正在使用 C++,但我相信 Java 中的解决方案是可移植的。


从答案迁移

由于格式不正确,此评论作为答案发布。

感谢您的回复。

我打算使用 API。

我正在尝试从文档中收集 GrahicObjects 的例子。通过使用 XGraphicObjectsSupplier,我可以通过 getGraphicObjects() 获取一个集合。集合中的对象是 Any,通过 getValueTypeName() 打印类型会得到 XTextContent

API 描述该集合拥有一个TextGraphicObject“服务”。我如何获取它的实例?

最佳答案

你的问题的答案会很复杂,但我会尽量让自己易于理解。

  • 将文档导出为 XML 会使用 SAX 更容易处理。如果使用 XML 方式,你必须实现XDocumentHandler 并阅读文档(可选地过滤什么你不需要)。其余工作将是 XSLT 转换或大型文档的 SAX。

  • 如果您更喜欢只使用 API,你必须玩很多XServiceInfoUnoRuntime.queryInterface

关于java - 使用 OpenOffice API 抓取整个文档树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1162424/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com