Aspose word 如何给每一页都设置不同的水印

您好,当前我使用的Aspose版本是23.6

<dependency>
    <groupId>com.aspose</groupId>
    <artifactId>aspose-words</artifactId>
    <version>23.6</version>
</dependency>

我现在的需求是想给docx文档的每一页都设置不同的水印,当前我的代码的实现如下

for (Section sect : doc.getSections()) {
    Paragraph randomParagraph = getRandomParagraph(doc, watermarkText);
    HeaderFooter header = sect.getHeadersFooters().getByHeaderFooterType(HeaderFooterType.HEADER_PRIMARY);
    if (header == null) {
        header = new HeaderFooter(sect.getDocument(), HeaderFooterType.HEADER_PRIMARY);
        sect.getHeadersFooters().add(header);
    }
    header.appendChild(randomParagraph.deepClone(true));
}

但是目前的效果是每一页的水印都是相同的,并没有实现我预期的效果,请问该如何实现呢?

@songyassen MS Word 文档中的水印被添加到文档标题中。 标题是按节定义的。 因此,为了获得预期的输出,需要将每个页面表示为单独的部分。 您可以使用 Document.extractPages 方法来实现此目的。 例如看下面的代码:

Document doc = new Document("C:\\Temp\\in.docx");

Document result = (Document)doc.deepClone(false);
for (int i = 0; i < doc.getPageCount(); i++)
{
    // get page from the document.
    Document page = doc.extractPages(i, 1);
    // Add watermark
    page.getWatermark().setText("Page - " + (i + 1));
    // append page to the result document
    page.getFirstSection().getHeadersFooters().linkToPrevious(false);
    result.appendDocument(page, ImportFormatMode.USE_DESTINATION_STYLES);
}

result.save("C:\\Temp\\out.docx");

in.docx (14.5 KB)
out.docx (31.7 KB)

功能已经实现,非常感谢!