如何使用docx4j库向docx文件添加脚注?

问题描述 投票:0回答:1

我正在尝试创建一个新的 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

任何人都可以建议我错过了什么吗?或者任何人都可以提供脚注的示例实现?

java docx docx4j footnotes
1个回答
0
投票

你不应该这样做

 wordMLPackage.getParts().put(footnotesPart)

这不会正确设置关系部分。

请使用 addTargetPart。

请参阅示例代码https://github.com/plutext/docx4j/blob/VERSION_11_5_2/docx4j-samples-docx4j/src/main/java/org/docx4j/samples/FootnoteAdd.java

© www.soinside.com 2019 - 2024. All rights reserved.