我想给一个word插入目录,并且目录的样式要设置


#1

我想给一个文档插入目录,并且给目录设置一定的样式,如附件所示,test.doc是我测试文档,expect.doc是我的期望文档,test.png是测试图片,expect.png是我的期望图片,请参照help.zip (82.8 KB)


#2

@liyong199466

在您的情况下,您需要将光标移动到所需的位置并插入目录。 请使用下面的代码示例来满足您的要求。

Document document = new Document(MyDir + "test.doc");
DocumentBuilder builder = new DocumentBuilder(document);
builder.moveToSection(1);
builder.writeln("目 录");
builder.getParagraphFormat().clearFormatting();
builder.getParagraphFormat().setAlignment(ParagraphAlignment.CENTER);
builder.insertTableOfContents("\\o \"1-3\" \\t \\h \\u");
builder.insertBreak(BreakType.PAGE_BREAK);
builder.getParagraphFormat().clearFormatting();
document.updateFields();
document.save(MyDir + "19.11.docx");

#3

谢谢你的回复,按照你的代码演示,我的确可以生成一个目录,但是生成的目录是有问题的,我页脚的页码的第一页是从目录页开始的,但是我不希望这样,我希望我的页脚的页码是从正文页开始的,如附件所示,problem1.png,problem2.png是我的问题图片,expect1.png和expect2.png都是我的期望图片,请参照。help.zip (123.5 KB)


#4

@liyong199466

我们正在调查您的问题,并将尽快与您联系。


#5

@liyong199466

对于您的情况,我们建议您遵循以下解决方案。

  • 在插入目录后,请插入分节符(新页)而不是分页符。 这将在您的文档中创建新的部分。
  • 克隆页脚的内容并将其插入新部分。
  • 从第二节的页脚中删除所需的内容(页面字段)。

希望这对您有所帮助。


#6

你好,有没有具体的代码体现


#7

@liyong199466

请检查以下代码示例。 希望这对您有所帮助。

Document document = new Document(MyDir + "test.doc");
DocumentBuilder builder = new DocumentBuilder(document);
builder.moveToSection(1);
builder.writeln("目 录");
builder.getCurrentSection().getBody().getFirstParagraph().getParagraphFormat().setStyleName("Normal");

builder.insertTableOfContents("\\o \"1-3\" \\t \\h \\u");
builder.insertBreak(BreakType.SECTION_BREAK_NEW_PAGE);
builder.insertParagraph();

Section section = (Section)builder.getCurrentSection();
section.getHeadersFooters().linkToPrevious(false);

CopyHeaderFooter((Section)section.getPreviousSibling(), section, HeaderFooterType.FOOTER_PRIMARY);
document.updateFields();
document.save(MyDir + "19.11.docx");

public static void CopyHeaderFooter(Section src, Section dst, int headerType) throws Exception
{
        HeaderFooter header = dst.getHeadersFooters().getByHeaderFooterType(headerType);
        if (header == null)
        {
            // There is no header of the specified type in the current section, create it.
            header = new HeaderFooter((Document)dst.getDocument(), headerType);
            dst.getHeadersFooters().add(header);
        }

        for (Node srcNode :  (Iterable<Node>)src.getHeadersFooters().getByHeaderFooterType(headerType).getChildNodes())
        {
            Node dstNode = src.getDocument().importNode(srcNode, true, ImportFormatMode.KEEP_SOURCE_FORMATTING);
            header.appendChild(dstNode);
        }
}