我正在尝试创建一个新的 docx 文件并使用 Java 中的
docx4j
库向其添加脚注。
我只想使用 docx4j
库。我在任何地方都找不到 docx4j
库提供的任何示例实现。我自己尝试了一些代码,但它没有正确生成脚注。
下面是我在
ChatGPT
的帮助下编写的示例代码:
private static void createFootNotesPDF() {
try {
// Create a Word document
WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage();
// Add content to the document
ObjectFactory factory = new ObjectFactory();
MainDocumentPart mainDocPart = wordMLPackage.getMainDocumentPart();
// Manually create and add the FootnotesPart to the MainDocumentPart
FootnotesPart footnotesPart = new FootnotesPart();
wordMLPackage.getParts().put(footnotesPart);
// Create a paragraph for the main document
P p = factory.createP();
Text text = factory.createText();
text.setValue("This is some text with a footnote.");
R run = factory.createR();
run.getContent().add(text);
// Create Footnote Reference and add it to the run
R.FootnoteRef footnoteRef = factory.createRFootnoteRef();
run.getContent().add(footnoteRef);
p.getContent().add(run);
mainDocPart.getContent().add(p);
// Create footnote content using CTFtnEdn
CTFootnotes footnotes = factory.createCTFootnotes();
CTFtnEdn footnote = createFootnote(factory);
// Add the footnote to the CTFootnotes
footnotes.getFootnote().add(footnote);
// Add footnotes to the FootnotesPart
footnotesPart.setJaxbElement(footnotes);
// Save the document
wordMLPackage.save(new File("document_with_footnotes.docx"));
System.out.println("Document created successfully!");
} catch (Exception e) {
e.printStackTrace();
}
}
private static CTFtnEdn createFootnote(ObjectFactory factory) {
CTFtnEdn footnote = new CTFtnEdn();
// Create the paragraph for the footnote content
P footnoteParagraph = factory.createP();
Text footnoteText = factory.createText();
footnoteText.setValue("This is the footnote text.");
R footnoteRun = factory.createR();
footnoteRun.getContent().add(footnoteText);
footnoteParagraph.getContent().add(footnoteRun);
// Add paragraph to footnote
footnote.getContent().add(footnoteParagraph);
// Set the footnote ID (this is managed by docx4j)
footnote.setId(BigInteger.valueOf(1)); // Footnote ID
return footnote;
}
输出生成带有以下文本的 Docx 文件:
This is some text with a footnote.1
任何人都可以建议我错过了什么吗?或者任何人都可以提供脚注的示例实现?
你不应该这样做
wordMLPackage.getParts().put(footnotesPart)
这不会正确设置关系部分。
请使用 addTargetPart。