在 Docx4J 中为 .docx 文件创建一个新部分
Creating a new section to .docx file in Docx4J
我正在尝试向 .docx 文件中插入一个新部分。插入部分的功能应与通过文字处理器添加的部分相同。我正在使用 Docx4j 库来完成这项任务。
这是我用来创建新的 .docx 文件的代码,并且:
- 添加包含 运行 和文本
的段落
- 将 "continuous" 部分添加到文档
- 添加另一个段落,包含 运行 和文本
将文档保存到文件
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)插入部分 "normally" 那样工作。
我已经通读了 Docx4J 文档,所以 GitHub 存储库中的 this and in the Docx4J examples 等问题,但我没有找到任何工作示例来添加所描述的功能。
您正在将您的 sectPr 添加为顶级段落的同级;相反,它应该在 w:p/w:pPr.
内
为避免此类错误,您应该使用 docx4j webapp 或 Helper AddIn 从工作的 Word docx 生成 Java 代码。
作为旁注,允许 sectPr 作为正文中的最后一个元素,但该元素是使用 setSectPr
添加的
我正在尝试向 .docx 文件中插入一个新部分。插入部分的功能应与通过文字处理器添加的部分相同。我正在使用 Docx4j 库来完成这项任务。
这是我用来创建新的 .docx 文件的代码,并且:
- 添加包含 运行 和文本 的段落
- 将 "continuous" 部分添加到文档
- 添加另一个段落,包含 运行 和文本
将文档保存到文件
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)插入部分 "normally" 那样工作。
我已经通读了 Docx4J 文档,所以 GitHub 存储库中的 this and in the Docx4J examples 等问题,但我没有找到任何工作示例来添加所描述的功能。
您正在将您的 sectPr 添加为顶级段落的同级;相反,它应该在 w:p/w:pPr.
内为避免此类错误,您应该使用 docx4j webapp 或 Helper AddIn 从工作的 Word docx 生成 Java 代码。
作为旁注,允许 sectPr 作为正文中的最后一个元素,但该元素是使用 setSectPr
添加的