我正在尝试将新部分插入.docx文件。插入部分的功能与通过文字处理器添加的部分相同。我正在使用Docx4j库来执行此任务。
以下是我用来创建新的.docx文件的代码:
将文档保存到文件
WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage();
// create new paragraph with a run containing text and add it to the document.
P paragraph1 = objectFactory.createP(); // create new paragraph
R run1 = objectFactory.createR(); // create new run
Text text1 = objectFactory.createText(); // create text
text1.setValue("This is text in paragraph 1 that should be located in section 1.");
run1.getContent().add(text1); // add text ton the run
paragraph1.getContent().add(run1); // add run to paragraph
wordMLPackage.getMainDocumentPart().addObject(paragraph1); // add to main document part
// create new section and add it to the document
SectPr sectPr = objectFactory.createSectPr(); // create new section
SectPr.Type sectPrType = objectFactory.createSectPrType();
sectPrType.setVal("continuous"); // "continuous" means no page break before section
sectPr.setType(sectPrType);
wordMLPackage.getMainDocumentPart().addObject(sectPr); // add section to document part
// proceed to create another paragraph with a run containing text.
P paragraph2= objectFactory.createP(); // create new paragraph
R run2 = objectFactory.createR(); // create new run
Text text2 = objectFactory.createText(); // create text
text2.setValue("This is text in paragraph 2 that should be located in section 2.");
run2.getContent().add(text2); // add text ton the run
paragraph2.getContent().add(run2); // add run to paragraph
wordMLPackage.getMainDocumentPart().addObject(paragraph2); // add to main document part
wordMLPackage.save(new java.io.File("should contain_two_sections.docx")); // save
创建的文件包含代码中定义的段落。该部分要么丢失,要么只是通过文字处理器(即LibreOffice Writer或Microsoft Word)“正常”插入部分。
我已经阅读了Docx4J文档,例如this 以及GitHub仓库中的Docx4J examples等问题,但我没有找到任何有用的示例来添加所描述的功能。
答案 0 :(得分:1)
您正在将sectPr作为兄弟添加到顶级段落中;相反它应该在w:p / w:pPr。
之内为了避免这样的错误,您应该使用docx4j webapp或Helper AddIn从工作的Word docx生成Java代码。
作为旁注,sectPr被允许作为正文中的最后一个元素,但是使用setSectPr添加了一个