使用aspose word for java 复制页眉的时候出现问题

你好,我们在使用aspose word复制页眉的时候出现了个问题,不导入License的时候可以复制成功,导入了License时复制不成功,示例代码:WordHeaderInsertionDemo.java(见压缩文件),麻烦帮忙看看
worddemo.zip (793.2 KB)

@Gavin_Zhang 这是因为:

for (int i = headersFooters.getCount()-1; i >=0; i--) {
     HeaderFooter sourceHeader=headersFooters.get(i);
....

}
if (success){
    break;
}

你得到页脚是因为你有i=1,但是你需要i=0才能得到页眉。在第一次执行后,您将从所有循环中中断,并且无法获得所需的标头。

当你不使用许可证时,“Aspose.Words”会创建一些存储在标题中的水印,这样列表中就会有另一个标题计数,你的代码就会得到正确的标题。

以下是插入所有现有页眉/页脚的更新代码:

public static void joinHeader() throws Exception {

    // 加载页眉的Word文档
    Document sourceDoc = new Document(getMyDir() + "yemei.docx");

    // 加载内容的Word文档
    Document targetDoc = new Document(getMyDir() + "wordtemplate.docx");

    // 获取源文档的页眉
    SectionCollection sections = sourceDoc.getSections();
    boolean success = false;
    for (Section section : sections) {
        System.out.println("load source section:");
        if (null == section) {
            System.out.println("跳過 source section");
            continue;
        }
        HeaderFooterCollection headersFooters = section.getHeadersFooters();
        for (int i = headersFooters.getCount()-1; i >=0; i--) {
            HeaderFooter sourceHeader=headersFooters.get(i);
            System.out.println("\tload sourceHeader:");
            if (null == sourceHeader) {
                System.out.println("跳過sourceHeader");
                continue;
            }
            // 获取目标文档的第一页(或其他位置)作为插入点
            SectionCollection targetDocSections = targetDoc.getSections();
            if (null == targetDocSections) {
                System.out.println("跳過target section");
                continue;
            }
            System.out.println("targetSections : "+targetDocSections.getCount());
            for (Section targetSection : targetDocSections) {
                System.out.println("\t\tload targetSection:");
                // 将源文档的页眉内容插入到目标文档中

                success = copyHeaderFooter(sourceHeader, targetSection, targetDoc, sourceDoc,sourceHeader.getHeaderFooterType());
                if (success){
                    break;
                }
            }
        }

        break;
    }

    // 保存拼接后的文档
    targetDoc.save(getArtifactsDir() + "output_" + System.currentTimeMillis() + ".docx");
}

private static boolean copyHeaderFooter(HeaderFooter sourceHeader, Section targetSection, Document targetDoc, Document sourceDoc,int headerPrimary) {
    HeaderFooter targetHeader = targetSection.getHeadersFooters().get(headerPrimary);

    // 如果目标文档没有页眉,创建一个新的页眉
    if (targetHeader == null) {
        System.out.println("創建一個頁眉");
        targetHeader = new HeaderFooter(targetDoc, headerPrimary);
        try {
            targetSection.getHeadersFooters().add(targetHeader);
        }catch (Exception e){
            System.out.println("異常。。。");
            return false;
        }

    }

    // 清空目标页眉的内容(如果需要)
    targetHeader.getParagraphs().clear();

    // 插入源页眉的内容到目标页眉
    NodeImporter importer = new NodeImporter(sourceDoc, targetDoc, ImportFormatMode.USE_DESTINATION_STYLES);
    int i = 0;

    for (Object child : sourceHeader.getChildNodes(NodeType.ANY, true)) {
        Node importedNode = importer.importNode((Node) child, true);
        try {
            targetHeader.appendChild(importedNode);
            System.out.println("\t\t\t 開始賦值:"+i++);
            break;
        } catch (Exception ignored) {
        }
    }
    return i > 0;
}