gpt4 book ai didi

java - XPages - docx4j - 用文本替换书签

转载 作者:行者123 更新时间:2023-12-02 05:35:36 26 4
gpt4 key购买 nike

我在 XPage 应用程序中使用 docx4j 创建包含 XPage 内容的 Word 文档。 Word 文档(.docx 格式)是基于模板(.dotx 格式)创建的。我的 .dotx 模板中的一个书签如下:

<w:p>
<w:bookmarkStart w:name="Fachkompetenz" w:id="0"/>
<w:bookmarkEnd w:id="0"/>
</w:p>

使用函数

private static List<Object> getAllElementFromObject(Object obj, Class<?> toSearch) {

List<Object> result = new ArrayList<Object>();
if (obj instanceof JAXBElement) obj = ((JAXBElement<?>) obj).getValue();

if (obj.getClass().equals(toSearch))
result.add(obj);
else if (obj instanceof ContentAccessor) {
List<?> children = ((ContentAccessor) obj).getContent();
for (Object child : children) {
result.addAll(getAllElementFromObject(child, toSearch));
}
}

return result;
}

我可以通过调用获取p对象

List<Object> texts = getAllElementFromObject(template.getMainDocumentPart(), P.class);

或者调用CTBookmark对象

List<Object> texts = getAllElementFromObject(template.getMainDocumentPart(), P.class);

但是,一旦我有了这些对象,我就不知道如何添加文本(XPage 内容)来替换书签。我已经在互联网上阅读了有关该主题的尽可能多的内容,但找不到任何方法来做到这一点。有人有什么建议吗?

最佳答案

如果可以的话,您可能需要重新考虑您的方法。

由于书签是“点”标签,因此替换其内容并不那么容易。例如,开始标记可以位于顶级段落中,结束标记可以位于表格单元格中!

您可能会发现内容控制数据绑定(bind)效果更好。

也就是说,假设您的书签开始和结束位于单个 p 中(根据您的示例 xml),您可以尝试以下方法:

  1. 查找书签起始元素
  2. 使用 getParent 访问包含它的列表
  3. 迭代列表以查找结束元素
  4. 替换 2 个列表条目之间的内容

在步骤 4 中,您将需要插入包含文本 (w:t) 的新运行 (w:r) 对象。您可以将示例 docx 上传到 docx4j Web 应用程序以生成代码。

BookmarksReplaceWithText.java可能有帮助。

关于java - XPages - docx4j - 用文本替换书签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24998463/

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