【问题标题】:Merging two documents with different footers docx4j合并两个具有不同页脚的文档 docx4j
【发布时间】:2020-03-13 23:33:54
【问题描述】:

场景:

  • 文档 1 有页脚 1
  • 文档 2 有页脚 2

预期结果应该是:

文档 3 合并了文档 1 和 2,并为文档 1 和文档 2 保留了页脚。

我们如何使用 docx4j 实现这一点?

我尝试使用以下代码合并两个文档:

WordprocessingMLPackage f = WordprocessingMLPackage.load(first);
WordprocessingMLPackage s= WordprocessingMLPackage.load(second);
    List body1 = s.getMainDocumentPart().getJAXBNodesViaXPath("//w:body", false);
            for (Object b : body1) {
                List filhos = ((org.docx4j.wml.Body) b).getContent();
                for (Object k : filhos)
                    {f.getMainDocumentPart().addObject(k);
                    }
            }

但是结果合并将第一个文档的页脚应用到整个文档,因此第二个文档的页脚丢失了。

【问题讨论】:

    标签: java docx4j


    【解决方案1】:

    您需要将相关页脚添加到文档 (addTargetPart),然后从 sectPr 元素内部引用它。页脚引用通过其 rel id 引用页脚部分。

    或者,您可以使用我们的商业 Docx4j Enterprise,其中包括 MergeDocx,用于处理当您尝试将 2 个 Word 文档连接在一起时出现的所有问题。

    【讨论】:

    • 但是 addTargetPart 不会在整个文档中添加一个页脚吗?合并 2 个不同的文档时,我想要 2 个不同的页脚。合并后生成的文档应包含两个文档的 2 页脚。
    • 您需要了解页眉/页脚是在 sectPr 元素中指定的(并且 sectPr 元素可以指定单个页眉/页脚,或者更复杂的东西,例如奇数/偶数),并且文档可以包含多个部分(即多个 sectPr 元素)。当您 addTargetPart 时,您会返回一个 relId,您在 sectPr 的页眉/页脚引用中使用该 relId。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-28
    • 2018-03-18
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多