精华内容
下载资源
问答
  • word文档目录生成不全
    千次阅读
    2021-02-26 13:56:59

    Word文档如何生成目录?

    • 1、新建空白页

      该空白页用来放将要生成的目录。

      步骤:点击“插入”→点击“空白页

      Alt

    • 2、设置标题

      文档中的标题都要统一设置为标题1或标题2或标题3,方便后面生成正确的目录。

      步骤:点击“开始”→选择正文中的标题→点击“标题1或标题2或标题3
      Alt

    • 3、生成目录

      步骤:在空白页处→点击“引用”→点击“目录”→点击“自动目录1
      Alt

    • 4、查看目录

      到这一步的时候,目录已经成功生成啦~(* ^ ▽ ^ *)

      我们可以在两个地方查看目录,一个地方是在刚才新建的空白页处,另一个地方是在“导航”里。

      步骤:点击“视图”→勾选“导航窗格”→即可在左侧看到生成的目录
      Alt

    更多相关内容
  • 根据word文档目录结构生成对应的序号,代码是一个demo,可以根据导入系统的word文档解析后根据导入文档的目录结构生成对应的序号
  • word怎么自动生成目录word文档在内容一多的情况下如果没有生成一个目录就会显得杂乱无章,越看越头晕,内容多的情况下要生成一个目录归纳一下哦!啥?你还不会生成word目录?点击来,看完你就知道了!

    word文档能够做到的非常之多,其中包括一些工作内容、考试题目等等。正常情况下我们想在word生成目录就是为了提高阅读的方便性,然而word目录怎么自动生成?其实很多基础的东西我们都不知道哦!学无止境,千万不要停止学习的步伐,下面一起学起来!

    一、自动生成目录

    word目录怎么自动生成?你对自动生成的方便性了解多少,先来看看如何自动生成word目录!

    步骤1.打开word文档,在其空白处输入想要输入的目录内容。

    步骤2.点击上方的【引用】后找到【目录】选项,这时会弹出一个小界面,这个时候就可以选择你心仪的目录样式了,我们本文的主题是怎么自动生成目录,所以这里选择自动目录的选项。生成word文档目录也可选择【自定义目录】自己亲自出马制作理想中的目录。选择删除目录则会删除插入的目录。

    步骤3.点击之后我们可以看到目录自动现形于文档之中啦!只需点击目录的其中一个部分,就会跳转到对应的内容处!

    二、手动生成目录(题外话)

    这是题外话,但也是用得到的,所以小编就顺便也给大家介绍一下手动生成目录的步骤。

    步骤1.我们来看看手动生成,前面和自动生成目录是一样的步骤,手动生成目录的不同之处在于无需我们像自动目录那般先输入内容,因为即使输入了内容也无济于事。点击【引用】→【目录】点击手动目录。

    2.目录生成出来了,但是对应字面意思,需亲自手动输入其目录内容,可在刚刚生成的目录中自主更改其内容。

    本期“Word目录怎么自动生成”?,大家看完学会了吗?小编还顺便提了一下题外话的手动生成哦!这个虽然只是小技能,但如果学会了还是不会亏的呢!很多基础技能其实有时候用到的更多,word文档的目录能够将所有你编辑的内容归纳起来,形成一种赏心悦目的视觉效果,虽不及书本,但同样让人看得舒服,不会显得杂乱。喜欢小编的文章来个赞、来个关注,记得分享哦!

    展开全文
  • jacob生成word目录

    2020-03-22 04:11:43
    任务目的 1自动生成word文档目录。 用例测试操作步骤 在一个word文档的第二页填写占位符: {目录}保存。调用程序读取目标文档,自动根据标题生成目录到{目录}位置。
  • asp.net中根据word模板生成word文档,内包含.cs文件和Microsoft.Office.Interop.Word.dll文件
  • 完整项目,直接可以导入到myeclipse中运行,代码有详细注释,在readme.txt文件里面有注意事项。
  • Word文档目录怎么自动生成.docx
  • 主要介绍了使用PHPWord生成word文档的方法,结合实例形式详细分析了PHPWord生成word文档的具体操作步骤与相关使用技巧,需要的朋友可以参考下
  • Apache POI自动生成Word文档(带目录

    千次阅读 2021-02-12 20:49:28
    1 什么是Apache POI2 Apache POI的组件3 安装Apache POI4 使用POI操作Word文档1 什么是Apache POI全称Apache POI,使用Java编写的免费开源的跨平台的Java API。 是创建和维护操作各种符合 Office Open XML(OOXML)...

    1 什么是Apache POI

    2 Apache POI的组件

    3 安装Apache POI

    4 使用POI操作Word文档

    1 什么是Apache POI

    全称Apache POI,使用Java编写的免费开源的跨平台的Java API。 是创建和维护操作各种符合 Office Open XML(OOXML)标准和微软的 OLE 2 复合文档格式(OLE2)的 Java API。用它可以使用 Java 读取和创建, 修改 MS Excel 文件. 而且, 还可以使用 Java 读取和创建 MS Word 和 MSPowerPoint 文件。Apache POI 提供 Java 操作 Excel 解决方案(适用于 Excel97-2008)。

    2 Apache POI的组件

    Apache POI包含用于MS-Office的所有OLE2复合文档的类和方法。 此API的组件列表如下:

    POIFS:此组件是所有其他POI元素的基本因素。 它用于显式读取不同的文件。

    HSSF:用于读取和写入.xls格式的MS-Excel文件。

    XSSF(XML SpreadSheet格式):用于MS-Excel的.xlsx文件格式。

    HPSF:用于提取MS-Office文件的属性集。

    HWPF:用于读取和写入MS-Word的.doc扩展文件。

    XWPF(XML字处理器格式):用于读取和写入MS-Word的扩展文件 .docx 。

    HSLF:用于阅读,创建和编辑PowerPoint演示文稿。

    HDGF(Horrible DiaGram格式):它包含MS-Visio二进制文件的类和方法。

    HPBF(Horrible PuBlisher格式):用于读取和写入MS-Publisher文件。

    3 安装Apache POI

    使用Maven依赖的方式,主要是下面三个依赖。

    操作docx文档需要的jar包有6个:dom4j.jar,poi-ooxml-3.10-FINA.jar,poi-ooxml-schemas-3.10-FINA.jar,xmlbean-2.3.0.jar,commons-lang.jar以及ooxml-schemas-1.1.jar

    操作doc文档需要的jar包有poi-3.10-FINAL.jar,poi-scratchpad-3.10-FINA.jar其中操作doc文档对模板的依赖很大,功能相对操作docx的接口很弱。

    org.apache.poi

    poi

    3.17

    org.apache.poi

    poi-ooxml

    3.17

    org.apache.poi

    ooxml-schemas

    1.1

    4 使用POI操作Word文档

    主要是使用POI操作Word文档,主要是写入文档操作的讲解:将网页中的数据导出,自动生成指定格式的Word文档。

    4.1 效果展示

    (1)在网站中选择需要导出的新闻,生成Word

    0a32d8bd6878

    image.png

    (2)生成的Word展示

    0a32d8bd6878

    目录页

    0a32d8bd6878

    内容详情页

    从上面可以看出,导出的文档含有:

    有指定格式的标题、时间、编著者等信息;

    会自动生成目录;

    有内容详情页;

    4.2 功能实现介绍

    4.2.1 前提知识:

    官方文档中主要包括Java操作Office文档的常用类,里面封装了常用的:读、写、设置格式等方法。

    例如:操作Word07之后的版本主要是使用XWPFDocument这个对象。

    0a32d8bd6878

    image.png

    (2)另外,当现有的功能不能满足要求,你需要对现有功能进行重写时。有一个很重要的东西就是ooxml。简单的说,这个就是微软公布的一套使用XML操作Word的开放的标准。详情见下面网址:

    http://www.datypic.com/sc/ooxml/s-wml.xsd.html

    4.2.2 功能实现说明

    (1)功能的整体UML图如下:

    0a32d8bd6878

    image.png

    (2)生成单文档

    基本的格式设置、写入数据等生成单文档的功能都不难,耐心的对照这官方API去看,基本就可以实现。

    下面贴一个生成单文档的例子:

    效果:

    0a32d8bd6878

    image.png

    代码如下:基本的注释都有,自己跑一下就懂了

    public void write2Docx()throws Exception{

    XWPFDocument document= new XWPFDocument();

    //Write the Document in file system

    FileOutputStream out = new FileOutputStream(new File("G:\\Offer\\create_table.docx"));

    //添加标题

    XWPFParagraph titleParagraph = document.createParagraph();

    //设置段落居中

    titleParagraph.setAlignment(ParagraphAlignment.CENTER);

    XWPFRun titleParagraphRun = titleParagraph.createRun();

    titleParagraphRun.setText("Java PoI");

    titleParagraphRun.setColor("000000");

    titleParagraphRun.setFontSize(20);

    //段落

    XWPFParagraph firstParagraph = document.createParagraph();

    XWPFRun run = firstParagraph.createRun();

    run.setText("Java POI 生成word文件。");

    run.setColor("696969");

    run.setFontSize(16);

    //设置段落背景颜色

    CTShd cTShd = run.getCTR().addNewRPr().addNewShd();

    cTShd.setVal(STShd.CLEAR);

    cTShd.setFill("97FFFF");

    //换行

    XWPFParagraph paragraph1 = document.createParagraph();

    XWPFRun paragraphRun1 = paragraph1.createRun();

    paragraphRun1.setText("\r");

    //基本信息表格

    XWPFTable infoTable = document.createTable();

    //去表格边框

    infoTable.getCTTbl().getTblPr().unsetTblBorders();

    //列宽自动分割

    CTTblWidth infoTableWidth = infoTable.getCTTbl().addNewTblPr().addNewTblW();

    infoTableWidth.setType(STTblWidth.DXA);

    infoTableWidth.setW(BigInteger.valueOf(9072));

    //表格第一行

    XWPFTableRow infoTableRowOne = infoTable.getRow(0);

    infoTableRowOne.getCell(0).setText("职位");

    infoTableRowOne.addNewTableCell().setText(": Java 开发工程师");

    //表格第二行

    XWPFTableRow infoTableRowTwo = infoTable.createRow();

    infoTableRowTwo.getCell(0).setText("姓名");

    infoTableRowTwo.getCell(1).setText(": seawater");

    //表格第三行

    XWPFTableRow infoTableRowThree = infoTable.createRow();

    infoTableRowThree.getCell(0).setText("生日");

    infoTableRowThree.getCell(1).setText(": xxx-xx-xx");

    //表格第四行

    XWPFTableRow infoTableRowFour = infoTable.createRow();

    infoTableRowFour.getCell(0).setText("性别");

    infoTableRowFour.getCell(1).setText(": 男");

    //表格第五行

    XWPFTableRow infoTableRowFive = infoTable.createRow();

    infoTableRowFive.getCell(0).setText("现居地");

    infoTableRowFive.getCell(1).setText(": xx");

    CTSectPr sectPr = document.getDocument().getBody().addNewSectPr();

    XWPFHeaderFooterPolicy policy = new XWPFHeaderFooterPolicy(document, sectPr);

    //添加页眉

    CTP ctpHeader = CTP.Factory.newInstance();

    CTR ctrHeader = ctpHeader.addNewR();

    CTText ctHeader = ctrHeader.addNewT();

    String headerText = "ctpHeader";

    ctHeader.setStringValue(headerText);

    XWPFParagraph headerParagraph = new XWPFParagraph(ctpHeader, document);

    //设置为右对齐

    headerParagraph.setAlignment(ParagraphAlignment.RIGHT);

    XWPFParagraph[] parsHeader = new XWPFParagraph[1];

    parsHeader[0] = headerParagraph;

    policy.createHeader(XWPFHeaderFooterPolicy.DEFAULT, parsHeader);

    //添加页脚

    CTP ctpFooter = CTP.Factory.newInstance();

    CTR ctrFooter = ctpFooter.addNewR();

    CTText ctFooter = ctrFooter.addNewT();

    String footerText = "ctpFooter";

    ctFooter.setStringValue(footerText);

    XWPFParagraph footerParagraph = new XWPFParagraph(ctpFooter, document);

    headerParagraph.setAlignment(ParagraphAlignment.CENTER);

    XWPFParagraph[] parsFooter = new XWPFParagraph[1];

    parsFooter[0] = footerParagraph;

    policy.createFooter(XWPFHeaderFooterPolicy.DEFAULT, parsFooter);

    document.write(out);

    out.close();

    }

    (3) 重点说一说,目录的生成

    在API中是提供自动生成目录方法的。

    0a32d8bd6878

    image.png

    但这个方法很难在实际应用,举例说明:

    0a32d8bd6878

    image.png

    生成代码如下:

    public void writeTOC() throws IOException {

    XWPFDocument document= new XWPFDocument();

    //Write the Document in file system

    FileOutputStream out = new FileOutputStream(new File("G:\\Offer\\create_toc.docx"));

    //添加标题

    XWPFParagraph titleParagraph = document.createParagraph();

    //设置段落居中

    titleParagraph.setAlignment(ParagraphAlignment.CENTER);

    XWPFRun titleParagraphRun = titleParagraph.createRun();

    titleParagraphRun.setText("Java PoI");

    titleParagraphRun.setColor("000000");

    titleParagraphRun.setFontSize(20);

    //段落

    XWPFParagraph firstParagraph = document.createParagraph();

    firstParagraph.setStyle("Heading1");

    XWPFRun run = firstParagraph.createRun();

    run.setText("段落1。");

    run.setColor("696969");

    run.setFontSize(18);

    //段落

    XWPFParagraph firstParagraph1 = document.createParagraph();

    firstParagraph.setStyle("Heading1");

    XWPFRun run1 = firstParagraph1.createRun();

    run1.setText("段落2");

    run1.setColor("696969");

    run1.setFontSize(16);

    document.createTOC();

    document.write(out);

    out.close();

    }

    可以看出,目录存在如下问题:

    没有中文的目录两个字,是英文的Table of Contents。

    目录生成的位置不合适,因为createTOC源码方法实际上是读取文档中被Heading1修饰的部分,所以若该语句放在前面,则无法生成目录。

    导致问题的源码如下:

    没有中文目录二字。

    0a32d8bd6878

    image.png

    读取文档中被Heading1修饰的部分,作为目录。

    0a32d8bd6878

    image.png

    所以,需要自定义目录类。下面是我自定义的生成目录的类,下面代码的效果仅仅是生成了目录两个字:

    public CustomTOC(CTSdtBlock block) {

    this.block = block;

    CTSdtPr sdtPr = block.addNewSdtPr();

    CTDecimalNumber id = sdtPr.addNewId();

    id.setVal(new BigInteger("4844945"));

    sdtPr.addNewDocPartObj().addNewDocPartGallery().setVal("Table of contents");

    CTSdtEndPr sdtEndPr = block.addNewSdtEndPr();

    CTRPr rPr = sdtEndPr.addNewRPr();

    CTFonts fonts = rPr.addNewRFonts();

    fonts.setAsciiTheme(STTheme.MINOR_H_ANSI);

    fonts.setEastAsiaTheme(STTheme.MINOR_H_ANSI);

    fonts.setHAnsiTheme(STTheme.MINOR_H_ANSI);

    fonts.setCstheme(STTheme.MINOR_BIDI);

    rPr.addNewB().setVal(STOnOff.OFF);

    rPr.addNewBCs().setVal(STOnOff.OFF);

    rPr.addNewColor().setVal("auto");

    rPr.addNewSz().setVal(new BigInteger("24"));

    rPr.addNewSzCs().setVal(new BigInteger("24"));

    CTSdtContentBlock content = block.addNewSdtContent();

    CTP p = content.addNewP();

    p.setRsidR("00EF7E24".getBytes(LocaleUtil.CHARSET_1252));

    p.setRsidRDefault("00EF7E24".getBytes(LocaleUtil.CHARSET_1252));

    p.addNewPPr().addNewPStyle().setVal("TOCHeading");

    p.addNewR().addNewT().setStringValue("目 录");//源码中为"Table of contents"

    //设置段落对齐方式,即将“目录”二字居中

    CTPPr pr = p.getPPr();

    CTJc jc = pr.isSetJc() ? pr.getJc() : pr.addNewJc();

    STJc.Enum en = STJc.Enum.forInt(ParagraphAlignment.CENTER.getValue());

    jc.setVal(en);

    //"目录"二字的字体

    CTRPr pRpr = p.getRArray(0).addNewRPr();

    fonts = pRpr.isSetRFonts() ? pRpr.getRFonts() : pRpr.addNewRFonts();

    fonts.setAscii("Times New Roman");

    fonts.setEastAsia("华文中宋");

    fonts.setHAnsi("华文中宋");

    //"目录"二字加粗

    CTOnOff bold = pRpr.isSetB() ? pRpr.getB() : pRpr.addNewB();

    bold.setVal(STOnOff.TRUE);

    // 设置“目录”二字字体大小为24号

    CTHpsMeasure sz = pRpr.isSetSz() ? pRpr.getSz() : pRpr.addNewSz();

    sz.setVal(new BigInteger("36"));

    }

    0a32d8bd6878

    image.png

    如此,第一个问题解决,中文的目录二字已经有了。而这段代码就已经涉及到我上面说的第二个重点:ooxml,即使用xml语言来操作文档。如果不去了解这个,上面的代码有很多是看不懂的。这个就需要自己去阅读那个网站上xml的说明了。

    上面语句对应的xml如下:

    0a32d8bd6878

    image.png

    第二个问题(目录的位置和样式都不合适)的解决就需要更需要涉及ooxml了

    首先直接上效果和代码

    0a32d8bd6878

    image.png

    添加不带页数的大字栏目

    public void addRowOnlyTitle(int level, String title) {

    CTSdtContentBlock contentBlock = this.block.getSdtContent();

    CTP p = contentBlock.addNewP();

    p.setRsidR("00EF7E24".getBytes(LocaleUtil.CHARSET_1252));

    p.setRsidRDefault("00EF7E24".getBytes(LocaleUtil.CHARSET_1252));

    CTPPr pPr = p.addNewPPr();

    pPr.addNewPStyle().setVal("TOC" + level);

    CTTabs tabs = pPr.addNewTabs();//Set of Custom Tab Stops自定义制表符集合

    CTTabStop tab = tabs.addNewTab();//Custom Tab Stop自定义制表符

    tab.setVal(STTabJc.RIGHT);

    tab.setLeader(STTabTlc.DOT);

    tab.setPos(new BigInteger("9190"));//默认为8290,因为调整过页边距,所有需要调整,手动设置找出最佳值

    pPr.addNewRPr().addNewNoProof();//不检查语法

    CTR run = p.addNewR();

    run.addNewRPr().addNewNoProof();

    run.addNewT().setStringValue(title);

    //设置行间距

    CTSpacing pSpacing = pPr.getSpacing() != null ? pPr.getSpacing(): pPr.addNewSpacing();

    pSpacing.setLineRule(STLineSpacingRule.AUTO);//行间距类型:多倍

    pSpacing.setLine(new BigInteger("360"));//此处1.5倍行间距

    pSpacing.setBeforeLines(new BigInteger("20"));//段前0.2

    pSpacing.setAfterLines(new BigInteger("10"));//段后0.1

    //设置字体

    CTRPr pRpr = run.getRPr();

    CTFonts fonts = pRpr.isSetRFonts() ? pRpr.getRFonts() : pRpr.addNewRFonts();

    fonts.setAscii("Times New Roman");

    fonts.setEastAsia("黑体");

    fonts.setHAnsi("黑体");

    // 设置字体大小

    CTHpsMeasure sz = pRpr.isSetSz() ? pRpr.getSz() : pRpr.addNewSz();

    sz.setVal(new BigInteger("24"));

    CTHpsMeasure szCs = pRpr.isSetSzCs() ? pRpr.getSzCs() : pRpr.addNewSzCs();

    szCs.setVal(new BigInteger("24"));

    }

    带页数的详细小字栏目

    public void addRow(int level, String title, int page, String bookmarkRef) {

    CTSdtContentBlock contentBlock = this.block.getSdtContent();

    CTP p = contentBlock.addNewP();

    p.setRsidR("00EF7E24".getBytes(LocaleUtil.CHARSET_1252));

    p.setRsidRDefault("00EF7E24".getBytes(LocaleUtil.CHARSET_1252));

    CTPPr pPr = p.addNewPPr();

    pPr.addNewPStyle().setVal("TOC" + level);

    CTTabs tabs = pPr.addNewTabs();//Set of Custom Tab Stops自定义制表符集合

    CTTabStop tab = tabs.addNewTab();//Custom Tab Stop自定义制表符

    tab.setVal(STTabJc.RIGHT);

    tab.setLeader(STTabTlc.DOT);

    tab.setPos(new BigInteger("9100"));//默认为8290,因为调整过页边距,所有需要调整,手动设置找出最佳值

    pPr.addNewRPr().addNewNoProof();//不检查语法

    CTR run = p.addNewR();

    run.addNewRPr().addNewNoProof();

    run.addNewT().setStringValue(title);//添加标题文字

    //设置标题字体

    CTRPr pRpr = run.getRPr();

    CTFonts fonts = pRpr.isSetRFonts() ? pRpr.getRFonts() : pRpr.addNewRFonts();

    fonts.setAscii("Times New Roman");

    fonts.setEastAsia("楷体");

    fonts.setHAnsi("楷体");

    // 设置标题字体大小

    CTHpsMeasure sz = pRpr.isSetSz() ? pRpr.getSz() : pRpr.addNewSz();

    sz.setVal(new BigInteger("21"));

    CTHpsMeasure szCs = pRpr.isSetSzCs() ? pRpr.getSzCs() : pRpr.addNewSzCs();

    szCs.setVal(new BigInteger("21"));

    //添加制表符

    run = p.addNewR();

    run.addNewRPr().addNewNoProof();

    run.addNewTab();

    //添加页码左括号

    p.addNewR().addNewT().setStringValue("(");

    //STFldCharType.BEGIN标识与结尾处STFldCharType.END相对应

    run = p.addNewR();

    run.addNewRPr().addNewNoProof();

    run.addNewFldChar().setFldCharType(STFldCharType.BEGIN);//Field Character Type

    // pageref run

    run = p.addNewR();

    run.addNewRPr().addNewNoProof();

    CTText text = run.addNewInstrText();//Field Code 添加域代码文本控件

    text.setSpace(SpaceAttribute.Space.PRESERVE);

    // bookmark reference

    //源码的域名为" PAGEREF _Toc","\h"含义为在目录内建立目录项与页码的超链接

    text.setStringValue(" PAGEREF "+bookmarkRef + " \\h ");

    p.addNewR().addNewRPr().addNewNoProof();

    run = p.addNewR();

    run.addNewRPr().addNewNoProof();

    run.addNewFldChar().setFldCharType(STFldCharType.SEPARATE);

    // page number run

    run = p.addNewR();

    run.addNewRPr().addNewNoProof();

    run.addNewT().setStringValue(Integer.toString(page));

    run = p.addNewR();

    run.addNewRPr().addNewNoProof();

    //STFldCharType.END标识与上面STFldCharType.BEGIN相对应

    run.addNewFldChar().setFldCharType(STFldCharType.END);

    //添加页码右括号

    p.addNewR().addNewT().setStringValue(")");

    //设置行间距

    CTSpacing pSpacing = pPr.getSpacing() != null ? pPr.getSpacing(): pPr.addNewSpacing();

    pSpacing.setLineRule(STLineSpacingRule.AUTO);//行间距类型:多倍

    pSpacing.setLine(new BigInteger("360"));//此处1.5倍行间距

    }

    下面代码就能解决目录位置的问题

    /**

    * 写多个文档

    */

    public void writeWordBanch() throws Exception {

    XWPFDocument doc = new XWPFDocument();

    FileOutputStream out = new FileOutputStream(new File("G:\\Offer\\create_OilWord_TOC.docx"));

    FileRedWordDynamic wordFile = new FileRedWordDynamic(doc);

    wordFile.writeFileHead();

    wordFile.createCustomTOC();

    List newsData = DataSource.getInstance().getDataByJDBC();

    wordFile.writeAllNews(newsData);

    wordFile.addItem2TOC();

    doc.write(out);

    out.close();

    }

    可以看出源码在创建完目录索引后,立即判断根据Heading1插入目录

    0a32d8bd6878

    image.png

    在我重写的方法中将其分为createCustomTOC()和addItem2TOC()分开,先在顶部占位,然后等文档的标题和内容等信息全部写完之后,在写目录剩下的部分,如下:

    public void createCustomTOC() {

    CTSdtBlock block = doc.getDocument().getBody().addNewSdt();

    doc.createTOC();

    this.toc = new CustomTOC(block);

    wordSetting.setCustomHeadingStyle(doc, "Heading1", 1);

    wordSetting.setCustomHeadingStyle(doc, "Heading2", 2);

    }

    public void addItem2TOC() {

    List paragraphs = doc.getParagraphs();

    for (XWPFParagraph par : paragraphs) {

    String parStyle = par.getStyle();

    if (parStyle != null && parStyle.startsWith("Heading")) {

    List bookmarkList=par.getCTP().getBookmarkStartList();

    try {

    int level = Integer.parseInt(parStyle.substring("Heading".length()));

    if(level==1){

    //添加栏目

    toc.addRowOnlyTitle(level, par.getText());

    }else{

    //添加标题

    toc.addRow(level, par.getText(), 1, bookmarkList.get(0).getName());

    }

    } catch (NumberFormatException e) {

    e.printStackTrace();

    }

    }

    }

    }

    如此,第二个问题也就解决了。

    (4)这里面也有个难点

    就是如何将内容部分和目录部分建立联系呢?

    就是通过下面代码

    text.setStringValue(" PAGEREF "+bookmarkRef + " \\h ");

    为什么是这样的格式,这个在Word中有说明的

    0a32d8bd6878

    image.png

    OK,这一步如果走通了,就好多了。最后就是将需要添加为目录的部分传入对应的设置即可

    public void addItem2TOC() {

    List paragraphs = doc.getParagraphs();

    for (XWPFParagraph par : paragraphs) {

    String parStyle = par.getStyle();

    if (parStyle != null && parStyle.startsWith("Heading")) {

    List bookmarkList=par.getCTP().getBookmarkStartList();

    try {

    int level = Integer.parseInt(parStyle.substring("Heading".length()));

    if(level==1){

    //添加栏目

    toc.addRowOnlyTitle(level, par.getText());

    }else{

    //添加标题

    toc.addRow(level, par.getText(), 1, bookmarkList.get(0).getName());

    }

    } catch (NumberFormatException e) {

    e.printStackTrace();

    }

    }

    }

    }

    通过上面的代码,就可以生成目录了。

    (5)最后还有个问题

    但是现在,还是存在一个问题。如下图:现在生成的文档,页数全部是1,必须要手动更新域才可以生成新的正确的页码,所以算不得是完全自动更新。

    0a32d8bd6878

    image.png

    需要在上面的addRow方法的第二个参数中传入当前页码,但是现在就是不知道应该如何准确的获取Word的当前页数,这个问题可卡了我很久都没解决,我也找一一些方法,但存在以下问题:

    插入的页码不准,有误;

    通过Word转PDF生成页码较准,但这样Word目录不好操作,代码的完整性会被破坏;

    朋友们如果有好方法请分享一下,谢谢。

    END

    一些参考的链接

    展开全文
  • html页面导出word文档、批量生成word文档、并且在线生成压缩包并下载
  • 用js生成word,可以根据需要自定义格式等
  • word自动生成目录教程

    2013-03-12 15:12:16
    word自动生成目录教程;主要是根据自己的标题自动生成目录
  • word文档生成目录方法

    2011-04-17 13:34:01
    word文档生成目录方法,word文档生成目录方法,word文档生成目录方法
  • word文档里面怎样自动生成目录

    万次阅读 2021-10-13 15:48:29
    我们在编写论文或者使用手册时,需要插入目录来引导阅读,这样可以方便快捷地查到自己要阅读的模块,如何生成目录呢,下面用我平时常用的speedoffice为例介绍一下。 1,选中文中一级标题,在“主页”选项卡中点击...

    我们在编写论文或者使用手册时,需要插入目录来引导阅读,这样可以方便快捷地查到自己要阅读的模块,如何生成目录呢,下面用我平时常用的speedoffice为例介绍一下。

    1,选中文中一级标题,在“主页”选项卡中点击“标题1”,依次将所有的一级标题进行设置。

     

    2,选中文中二级标题,在“主页”选项卡中点击“标题2”,依次完成二级标题设置。

     

    3,选中文中三级标题,在“主页”选项卡中点击“标题3”,依次完成三级标题设置,以此类推。

     

    4,将光标定位到要添加目录的地方,依次点击“参考”—“目录”—“确定”。

     

    5,这样,就自动生成目录了。

     

    展开全文
  • 将SQL SERVER数据库表结构自动生成word文档,速度快,效率高
  • mysql数据库,生成Word文档,表结构,含注释,简单,易用
  • 分析报告生成器,Word文档自动生成器-附件资源
  • word生成目录步骤,word怎样做目录

    千次阅读 2021-07-25 06:08:47
    word怎么生成目录?我们在制作一个策划或者是写一本书的时候往往需要章节目录,不然阅读起来就会非常的方便。但是很多新手基本上都不会设置目录,下面小编就详细的为大家介绍零基础学会word生产目录的方法。下面以...
  • PowerDesigner生成word文档的模板,终于成功的把pdm格式的转换成word文档.让小编从繁重的ctrl+c与ctrl+v中解放了出来. 其实pd导出word表跟一般软件的导出功能类似,通过模版定义格式和样式,然后导出自定义格式的word...
  • java生成word文档完美解决方案.
  • Java POI 生成Word文档

    2017-10-28 13:54:46
    Java POI 生成Word文档,支持图片插入,关键是修改XML部分,本人已测试通过。
  • 废话,直接放代码吧。public class AddTOC {public static void main(String[] args) throws IOException, InvalidFormatException {FileInputStream fileInputStream = new FileInputStream("xxxx");XWPFDocument...
  • 主要介绍了python实现的生成word文档功能,涉及Python数据查询、遍历及word文档生成相关操作技巧,需要的朋友可以参考下
  • Java后端使用freemarker基于.ftl配置文件模板化模式生成文档,内容可以包括文本、图片、表文本格、目录、附件(excel等文件),适用于已经规范化的各种报告等文件;将后端生成的xml格式文档转换为word格式以及pdf...
  • 基于Python实现Excel数据处理自动化生成Word文档(含索引目录 分页).zip
  • 图片形式生动形象地为你讲解如何在word2003中自动生成目录,并且实现其链接功能
  • SourceCodeDocxGenerator是一个自动生成软着申请所需的项目源代码Word文档的工具,使用它可以很方便地生成60页的源代码文档,而不用手动撸。 SourceCodeDocxGenerator基于Apache POI实现,详情请参考代码。 更新 ...
  • 写论文word生成目录

    千次阅读 2021-12-09 17:12:52
    第一步打开word文档,同一标题设置为同样的格式 2第二步不同标题的等级要与格式对应,正文部分选择正文格式 3第三步设置好之后,鼠标点击在需要插入标题的位置,选择引用,再点击目录,选择自定义...
  • 用Java生成word文档

    千次阅读 2022-04-19 17:37:31
    用Java生成生成word生成word思路编辑好需要使用的word文档Java代码层编写生成后的文档如下图 生成word思路 用WPS或者office编辑好word的样式,然后另存为word xml文档,将xml翻译为FreeMarker模板,最后用java来解析...
  • Android 使用模板生成Word文档,支持手机直接查看word,很强大、直接拿来用

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 131,366
精华内容 52,546
热门标签
关键字:

word文档目录生成不全