当前位置: 首页 > 知识库问答 >
问题:

如何将包含字符样式的段落复制到apache POI中的新文档中?

淳于昊然
2023-03-14

我试图用Apache POI将一定数量的段落从ms word文件复制到一个新文件中。虽然我复制段落样式没有问题,但我不能将内联字符样式转移到新文件中,如何获得字符样式并将其应用到新的新文档中?

        FileInputStream in = new FileInputStream("oldDoc.docx");
        XWPFDocument doc = new XWPFDocument(in);
        XWPFDocument newDoc = new XWPFDocument();

        // Copy styles from old to new doc
        XWPFStyles newStyles = newDoc.createStyles();
        newStyles.setStyles(doc.getStyle());

        List<XWPFParagraph> paragraphs = doc.getParagraphs();

        for (int p = 0; p < paragraphs.size(); p++) {
            XWPFParagraph oldPar = paragraphs.get(p);
            XWPFParagraph newPar = newDoc.createParagraph();
            // Apply paragraph style
            newPar.setStyle(oldPar.getStyle());

            XWPFRun run = newPar.createRun();
            run.setText(oldPar.getText());
        }

        FileOutputStream outNewDoc = new FileOutputStream("newDoc.docx");
        newDoc.write(outNewDoc);
        in.close();
        outNewDoc.close();

共有1个答案

郎俊雅
2023-03-14
try {
    FileInputStream in = new FileInputStream("in.docx");
    XWPFDocument oldDoc = new XWPFDocument(in);
    XWPFDocument newDoc = new XWPFDocument();
    
    // Copy styles from template to new doc
    XWPFStyles newXStyles = newDoc.createStyles();
    newXStyles.setStyles(oldDoc.getStyle());

    List<XWPFParagraph> oldDocParagraphs = oldDoc.getParagraphs();
    for (XWPFParagraph oldPar : oldDocParagraphs) {
        // Create new paragraph and set it style of old paragraph
        XWPFParagraph newPar = newDoc.createParagraph();
        newPar.setStyle(oldPar.getStyle());
        // Loop in runs of old paragraphs.
        for (XWPFRun oldRun : oldPar.getRuns()) { // Paragrafın sitillere göre parçalanmış stringleri
            // Create a run for the new paragraph
            XWPFRun newParRun = newPar.createRun();
            // Set old run's text of old paragraph to the run of new paragraph
            String runText = oldRun.text();
            newParRun.setText(runText);
            // Set old run's style of old paragraph to the run of new paragraph
            CTRPr oldCTRPr = oldRun.getCTR().getRPr();
            if (oldCTRPr != null) {
                if (oldCTRPr.sizeOfRStyleArray() != 0){
                    String carStyle = oldRun.getStyle();
                    newParRun.setStyle(carStyle);
                }
            }
            // Add the new run to the new paragraph
            newPar.addRun(newParRun);
        }
        // Write to file and close.
        FileOutputStream out = new FileOutputStream("out.docx");
        newDoc.write(out);
        out.close();
    }
} catch (IOException | XmlException e) {
    e.printStackTrace();
}
 类似资料:
  • 关于字符和段落样式 字符样式是许多字符格式属性的集合,可应用于所选的文本范围。段落样式包括字符和段落格式属性,并可应用于所选段落,也可应用于段落范围。使用字符和段落样式可节省时间,还可确保格式的一致性。 可以使用“字符样式”和“段落样式”面板来创建、应用和管理字符和段落样式。要应用样式,只需选择文本并在其中的一个面板中单击样式名称即可。如果未选择任何文本,则会将样式应用于所创建的新文本。“段落样式

  • 假设我的docx文档中有一个特定的段落,具有特定的文本格式,例如: Foo bar 我想制作一个类似于此段落的模板,以便多次将其复制到同一文档中。 复制文本,如 在示例中意味着文本格式丢失。 有没有任何通用的方法可以使用python docx库来实现这一点 我们还特别感谢python和django的其他解决方案<提前谢谢。

  • 关于字符和段落样式 字符样式是许多字符格式属性的集合,可应用于所选的文本范围。段落样式包括字符和段落格式属性,并可应用于所选段落,也可应用于段落范围。使用字符和段落样式可节省时间,还可确保格式的一致性。可以使用 “字符样式 ”和 “段落样式 ”面板来创建、应用和管理字符和段落样式。要应用样式,只需选择文本并在其中的一个面板中单击样式名称即可。如果未选择任何文本,则会将样式应用于所创建的新文本。 C

  • 我想计算两个字段的总和,然后在文档中创建新的字段,比如:“total sum”。但我不知道怎么做。都在MongoDB中。这里有一个例子:

  • 假设我有两份文件。 一个是有大约2-3页的主模板。第二个只有一段文字与各种风格(粗体,斜体,下划线,字体大小等)。 我想用第二个文档中的段落替换模板中的一个参数。 null

  • 在使用ApachePOI写入word文档时,对于必须根据某个“计数”动态复制段落的位置,这些段落的标题必须按照章节顺序编号。假设它是word文档中的第7节,那么其中每个段落的标题应按顺序编号为7.1、7.2等。 尽管我看到了一些解决方案,其中考虑了word文档的xml,并使用了XWPFN编号。 还有其他更简单的方法吗? 或 如果我的word模板已经有了一个带有编号标题的段落,并且我必须多次复制相同