【问题标题】:How to copy page from one docx to another in java如何在java中将页面从一个docx复制到另一个
【发布时间】:2018-04-16 19:04:37
【问题描述】:

我正在尝试自动化 docx 报告生成过程。为此,我使用 java 和 docx4j。我有一个仅包含单个页面的模板文档。我想复制该页面修改它并将其保存在另一个 docx 文档中。输出报告是多个相似页面的模板修改。我该怎么做。

PS : java 和 docx4j 是我的首选,但我对除 java 和 docx4j 之外的解决方案持开放态度。

【问题讨论】:

    标签: java ms-word automation document docx4j


    【解决方案1】:

    您可以自行修改模板,下面介绍如何将一个文档添加到另一个文档的末尾。假设base.docx 包含“这是基本文档”。而template.docx包含“时间是:”,那么在执行这段代码之后:

    WordprocessingMLPackage doc = Docx4J.load(new File("base.docx"));
    WordprocessingMLPackage template = Docx4J.load(new File("template.docx"));
    MainDocumentPart main = doc.getMainDocumentPart();
    
    Br pageBreak = Context.getWmlObjectFactory().createBr();
    pageBreak.setType(STBrType.PAGE);
    main.addObject(pageBreak);
    
    for (Object obj : template.getMainDocumentPart().getContent()) {
        main.addObject(obj);
    }
    main.addParagraphOfText(LocalDateTime.now().toString());
    
    doc.save(new File("result.docx"));
    

    然后result.docx 将包含类似:

    This is the base document.
    
    ^L
    
    The time is:
    2018-04-16T17:37:13.541984200
    

    (其中 ^L 表示分页符。)

    【讨论】:

    • 感谢您的回复。我试过上面的代码。但是我的新文件是空白的。更准确地说,我的原始模板仅包含标题和一些样式组件。我使用WordprocessingMLPackage report = WordprocessingMLPackage.createPackage(); 创建了一个新的基础文档
    • 我还尝试在模板中添加一些内容(即一些段落),并且可以将这些内容复制到基础文档中。但是,我还想将标题和样式(如页面边框)从模板复制到基本文档,目前使用上面的代码我无法做到。
    • 要获取该内容,您可以克隆原始 docx 作为起点。或者对于复制复杂的内容,您可以考虑 Plutext 的商业 Docx4j Enterprise。
    【解决方案2】:

    更准确地说,我的原始模板仅包含标题和一些样式组件。

    此类信息可以存储在 Word 样式表(.dotx 文件)中。

    PS : java 和 docx4j 是我的首选,但我对除 java 和 docx4j 之外的解决方案持开放态度。

    pxDoc 是一个不错的工具:您可以在文档生成器中指定专用样式表,或者使用“可变样式”并仅在启动文档生成时指定样式表

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-26
      • 1970-01-01
      • 2019-11-30
      • 1970-01-01
      • 1970-01-01
      • 2011-12-05
      相关资源
      最近更新 更多