本文简略概括了Java 程序中如何操作Word目录的办法。别离以三个代码示例展现如何增加目录、读取目录、删除目录等。程序环境参考如下:
- Word测试文档,版本.docx2013
- IDEA编译环境,版本2018
- Jdk版本1.8.0
- Word jar包文件,free spire.doc.jar,版本3.9.0
1. Java 增加Word目录
针对文档中是否对段落设置了纲要级别,别离可从不同办法来增加目录。
1.1 文档已设置纲要级别,通过域代码间接生成目录
import com.spire.doc.Document;import com.spire.doc.FileFormat;import com.spire.doc.documents.HorizontalAlignment;import com.spire.doc.documents.Paragraph;import com.spire.doc.fields.TableOfContent;import com.spire.doc.fields.TextRange;import java.awt.*;public class AddTOC2 { public static void main (String[] args){ //加载已设置纲要级别的测试文档 Document doc = new Document("sample.docx"); //在文档最后面插入一个段落,写入文本并格式化 Paragraph parainserted = new Paragraph(doc); TextRange tr= parainserted.appendText("目 录"); tr.getCharacterFormat().setBold(true); tr.getCharacterFormat().setTextColor(Color.gray); doc.getSections().get(0).getParagraphs().insert(0,parainserted); parainserted.getFormat().setHorizontalAlignment(HorizontalAlignment.Center); //通过域代码增加目录表 TableOfContent toc = new TableOfContent(doc, "{\\o \"1-3\" \\h \\z \\u}"); doc.getSections().get(0).getParagraphs().get(0).appendTOC(1,3); doc.updateTableOfContents(); //保存文档 doc.saveToFile("目录2.docx", FileFormat.Docx_2010); }}
1.2 文档未设置纲要级别,需手动设置纲要级别后生成目录
import com.spire.doc.*;import com.spire.doc.documents.*;import com.spire.doc.fields.TextRange;import java.awt.*;public class AddToc { public static void main(String[]args){ //加载测试文档 Document doc = new Document("测试文件.docx"); //在文档最后面插入一个段落,写入文本并格式化 Paragraph parainserted = new Paragraph(doc); TextRange tr= parainserted.appendText("目 录"); tr.getCharacterFormat().setBold(true); tr.getCharacterFormat().setTextColor(Color.gray); doc.getSections().get(0).getParagraphs().insert(0,parainserted); parainserted.getFormat().setHorizontalAlignment(HorizontalAlignment.Center); //手动设置文档中指定段落的纲要级别 doc.getSections().get(0).getParagraphs().get(1).applyStyle(BuiltinStyle.Heading_1); doc.getSections().get(0).getParagraphs().get(2).applyStyle(BuiltinStyle.Heading_2); doc.getSections().get(0).getParagraphs().get(4).applyStyle(BuiltinStyle.Heading_2); doc.getSections().get(0).getParagraphs().get(6).applyStyle(BuiltinStyle.Heading_2); doc.getSections().get(0).getParagraphs().get(12).applyStyle(BuiltinStyle.Heading_2); doc.getSections().get(0).getParagraphs().get(13).applyStyle(BuiltinStyle.Heading_3); doc.getSections().get(0).getParagraphs().get(14).applyStyle(BuiltinStyle.Heading_3); doc.getSections().get(0).getParagraphs().get(15).applyStyle(BuiltinStyle.Heading_3); doc.getSections().get(0).getParagraphs().get(17).applyStyle(BuiltinStyle.Heading_1); doc.getSections().get(0).getParagraphs().get(18).applyStyle(BuiltinStyle.Heading_2); //增加目录 doc.getSections().get(0).getParagraphs().get(0).appendTOC(1,3); ParagraphStyle tocStyle1 = (ParagraphStyle) Style.createBuiltinStyle(BuiltinStyle.Toc_1, doc); tocStyle1.setName("tocStyle1"); tocStyle1.getCharacterFormat().setFontName("宋体"); tocStyle1.getCharacterFormat().setBold(true); tocStyle1.getCharacterFormat().setTextColor(Color.GRAY); tocStyle1.getCharacterFormat().setFontSize(15) ; doc.getStyles().add(tocStyle1); //更新目录表 doc.updateTableOfContents(); //保存文档 doc.saveToFile("目录.docx",FileFormat.Docx_2010); }}
2. 读取目录
读取目录可采纳读取题目(heading)的办法。
import com.spire.doc.*;import com.spire.doc.documents.Paragraph;import java.io.BufferedWriter;import java.io.File;import java.io.FileWriter;import java.io.IOException;public class GetTitle { public static void main(String[] args)throws IOException { //加载Word测试文档 Document doc = new Document(); doc.loadFromFile("sample.docx"); //保留题目内容到.txt文档 File file = new File("GetTitle.txt"); if (file.exists()) { file.delete(); } file.createNewFile(); FileWriter fw = new FileWriter(file, true); BufferedWriter bw = new BufferedWriter(fw); //遍历section for (int i = 0; i < doc.getSections().getCount(); i++) { Section section = doc.getSections().get(i); //遍历Paragraph for (int j = 0; j < section.getParagraphs().getCount(); j++) { Paragraph paragraph = section.getParagraphs().get(j); //获取题目 if ( paragraph.getStyleName().matches("1"))//段落为“题目1”的内容 { //获取段落题目内容 String text = paragraph.getText(); //写入文本到txt文档 bw.write("题目1: "+ text + "\r"); } //获取题目 if ( paragraph.getStyleName().matches("2"))//段落为“题目2”的内容 { //获取段落题目内容 String text = paragraph.getText(); //写入文本到txt文档 bw.write("题目2: " + text + "\r"); } //获取题目 if ( paragraph.getStyleName().matches("3"))//段落为“题目3”的内容 { //获取段落题目内容 String text = paragraph.getText(); //写入文本到txt文档 bw.write("题目3: " + text+"\r"); } //获取题目 if ( paragraph.getStyleName().matches("4"))//段落为“题目4”的内容 { //获取段落题目内容 String text = paragraph.getText(); //写入文本到txt文档 bw.write("题目4: " + text+"\r"); } bw.write("\n"); } } bw.flush(); bw.close(); fw.close(); }}
注:在增加目录时,可将“无效款式”设置为“目录级别”显示(如下图),
方可采纳以上代码形式作为读取目录的办法,如在Word中没有进行对应设置,通过此办法获取目录的内容可能不残缺。
测试文档:
目录读取后果:
3. 删除目录
import com.spire.doc.*;import com.spire.doc.documents.Paragraph;public class RemoveTOC { public static void main(String[]args){ //加载蕴含目录的Word文档 Document doc = new Document(); doc.loadFromFile("sample.docx"); //获取section Section section = doc.getSections().get(0); //遍历段落 for (int i = 0; i < section.getParagraphs().getCount(); i++) { Paragraph paragraph = section.getParagraphs().get(i); if (paragraph.getStyleName().matches("TOC\\w+")) { section.getParagraphs().removeAt(i);//删除目录 i--; } } //保存文档 doc.saveToFile("RemoveTOC.docx", FileFormat.Docx_2013); doc.dispose(); }}
原创内容,转载请务必注明出处!!