/*** 先临时生成一个合并完成后的docx格式文档,doc会出现乱码。

*@parampathList 所有需要合并的文档的绝对路径

*@paramsavePath 一个路径,但是没有文件的后缀,之后进行拼接。

*@return状态,是否保存成功*/

public static boolean mergeWordToPdf(ListpathList, String savePath){//判断是否为pdf文件后缀的路径//String[] split = savePath.split("\\.");//if (!"pdf".equals(split[split.length-1])) {//System.out.println("请给一个以pdf保存路径结尾的路径");//return false;//}//保存合并完成后临时存放的文件

String file = savePath + ".docx";

File newfile= newFile(file);try{//判断是否存在,存在则删除

if(newfile.exists()) {

newfile.delete();

}

newfile.createNewFile();//创建一个新的doc文件

Document doc = newDocument(file);int count = 0;//进行合并

for(String filePath : pathList) {//获取文档的路径,然后合并

count++;

Document doc2= newDocument();

doc2.loadFromFile(filePath);for (int j = 0; j < doc2.getSections().getCount(); j++) {

doc.getSections().add(doc2.getSections().get(j).deepClone());

}

}//在开头创建一个目录页

ParagraphStyle title1style = newParagraphStyle(doc);

title1style.setName("TL1");

title1style.getParagraphFormat().setOutlineLevel(OutlineLevel.Level_1);

doc.getStyles().add(title1style);

Section sec= doc.getSections().get(0);//设置边距

sec.getPageSetup().getMargins().setTop(71.882f);

sec.getPageSetup().getMargins().setBottom(71.882f);

sec.getPageSetup().getMargins().setLeft(90f);

sec.getPageSetup().getMargins().setRight(90f);

sec.getParagraphs().get(0).applyStyle(title1style.getName());//循环遍历每一页的标题,并添加到目录页中

for (int i = 1; i <= count; i++) {

sec=doc.getSections().get(i);

sec.getParagraphs().get(0).applyStyle(title1style.getName());

}

sec= doc.getSections().get(0);

Paragraph para= newParagraph(doc);

sec.getParagraphs().insert(0, para);

TableOfContent toc= para.appendTOC(1, 3);

toc.setUseHeadingStyles(false);

toc.setUseHyperlinks(true);

toc.setUseTableEntryFields(false);

toc.setRightAlignPageNumbers(true);

toc.setTOCLevelStyle(1, title1style.getName());

doc.isUpdateFields();

doc.updateTableOfContents();//设置目录的字体

TextRange range = para.appendText("目录");

range.getCharacterFormat().setFontName("宋体");

range.getCharacterFormat().setFontSize(16);

para.getFormat().setHorizontalAlignment(HorizontalAlignment.Center);

sec.getParagraphs().insert(0, para);for (int i = 0; i < sec.getParagraphs().getCount(); i++) {

Paragraph p=sec.getParagraphs().get(i);if (p.getStyleName().equals("TOC1")) {for (int j = 0; j < p.getChildObjects().getCount(); j++) {if(p.getChildObjects().get(j).getDocumentObjectType().equals(DocumentObjectType.Text_Range)) {

TextRange range0=(TextRange) p.getChildObjects().get(j);

range0.getCharacterFormat().setFontName("宋体");

range0.getCharacterFormat().setBold(false);

}

}

}

}//删除页眉

for (int i = 1; i <= count; i++) {

ParagraphCollection paragraphsHeader=doc.getSections().get(i).getHeadersFooters().getHeader().getParagraphs();if (paragraphsHeader.getCount() > 0) {

paragraphsHeader.removeAt(0);

}

doc.getSections().get(i).getHeadersFooters().getFirstPageFooter().getChildObjects().clear();

doc.getSections().get(i).getHeadersFooters().getOddFooter().getChildObjects().clear();

}//添加文字、页码域和总页数域到段落

Paragraph paragraph = doc.getSections().get(0).getHeadersFooters().getFirstPageFooter().addParagraph();

paragraph.appendField("page number", FieldType.Field_Page);

paragraph.getFormat().setHorizontalAlignment(HorizontalAlignment.Right);

Paragraph paragraph1= doc.getSections().get(0).getHeadersFooters().getOddFooter().addParagraph();

paragraph1.appendField("page number", FieldType.Field_Page);

paragraph1.getFormat().setHorizontalAlignment(HorizontalAlignment.Right);//在转换为pdf时出现字体便乱的情况,格式化字体后解决。如果不需要转换为pdf,此操作可以删除。

for (int a = 1; a <= count; a++) {

Section s=doc.getSections().get(a);//更新全文的字体(不包括tbale里的)

for (int i = 1; i < s.getParagraphs().getCount(); i++) {

Paragraph p=s.getParagraphs().get(i);for (int j = 0; j < p.getChildObjects().getCount(); j++) {if(p.getChildObjects().get(j).getDocumentObjectType().equals(DocumentObjectType.Text_Range)) {

TextRange range0=(TextRange) p.getChildObjects().get(j);

range0.getCharacterFormat().setFontName("宋体");

range0.getCharacterFormat().setBold(false);

}

}

}

TableCollection tables=s.getTables();//更新table里字体

if (tables.getCount() > 0) {

updateTable(tables);

}

}//保存word文件

doc.saveToFile(file, FileFormat.Docx);//转换为pdf,转换的代码在下一篇文章里,使用的不是同一个jar包,因为这个jar对生成pdf没有限制,准确的说是破*了。

//WordToPdfUtil.wordToPdf(file, savePath + ".pdf");return true;

}catch(Exception e){

e.printStackTrace();

}return false;

}

java word文档生成目录_JAVA合并word文档生成目录相关推荐

  1. java重新组合_Java 合并Word文档

    在日常工作中,难免会遇到需要将多个Word文档合并到一个文档中,对其进行重新整理的情况,为了能帮助大家高效快速的完成这个操作,接下来本文就将介绍两种在Java程序中合并Word文档的方法. 方法一:如 ...

  2. java word 文档合并_Java 合并Word文档

    概述 合并文档可以是将两个包含一定逻辑关系的文档合并成一个完整的文档,也可以是出于方便文档存储.管理的目的合并多个文档为一个文档.下面,就将以上文档操作需求,通过Java程序来实现Word文档合并.合 ...

  3. python 合并word文件_使用python docx合并word文档

    合并包含所有样式的两个文档的另一种方法是使用python库docxcompose(https://pypi.org/project/docxcompose/).我们不需要明确定义样式,也不必逐段阅读文 ...

  4. 怎么向java窗口中插入XSL表_Java向word中插入Excel文件对象

    前言: 在word文件中,虽然也有表格.但是有时我们想要将Excel中表格的大量数据直接插入到word文档中,这就需要用到word的插入对象的功能,也就是直接将Excel文件当做对象插入到word中. ...

  5. java jdk目录_Java开发工具包JDK安装和目录介绍

    1. 找到JDK的exe可执行文件 2. 双击安装,接受windows操作系统的安全警告,点击运行 3. 点击下一步 4. 如果需要更改安装路径,请点击更改,否则直接下一步 5. 等待安装 6. 安装 ...

  6. java file类复制文件路径_java进阶(34)--File类、目录复制

    一.File类的理解 1.File类不能完成文件的读与写. 2.FIle类代表:文件或目录的路径名的抽象表示形式. 二.FIle类常用方法: 1.创建一个FIle对象:File() File f1=n ...

  7. java设置标签艺术字体颜色_Java 在Word文档中添加艺术字

    与普通文字相比,艺术字更加美观有趣也更具有辨识度,常见于一些设计精美的杂志或宣传海报中.我们在日常工作中编辑Word文档时,也可以通过添加艺术字体来凸显文章的重点,美化页面排版.这篇文章将介绍如何使用 ...

  8. java合并excel文件_Java 合并Excel文档

    在日常使用Excel软件办公时,通常会产生很多文档.当我们需对其中的数据进行整理和统计时,对文档进行合并处理将能够大大提高操作效率.一般文档合并可分为两种情况:一是将同一个Excel文档内多张工作表的 ...

  9. java 生成word目录_java代码生成word目录

    一.编辑当前DataBase 选择DataBase-->edit Current DBMS... 弹出如下对话框: 如上图,先解释一下: 根据红颜色框从上往下解释一下. 第一个红框是对应的修改的 ...

最新文章

  1. html从入门到精通前锋,街篮新手攻略 从入门到精通的心得分享二
  2. 在建工程的管理是怎样在总帐中实现
  3. Android环境配置
  4. Javascipt超详细版思维导图+基础语法导航
  5. java私有方法单元测试_如何通过java反射的方式对java私有方法进行单元测试
  6. Asp.net2.0动态加载用户控件的三种方法
  7. 计算机辅助建筑制图规范,房屋建筑制图统一标准 [附条文说明] GB/T50001-2017
  8. OpenCV二值化cvThreshold和自适应二值化cvAdaptiveThreshold及Otsu
  9. html子级透明度不随父级别,我不想从CSS的父级继承子级不透明度
  10. 萤火虫算法(Firefly Algorithm)
  11. Python数据结构与算法(3.3)——队列
  12. 如何设计出令人惊叹的关卡:来自策划、美术与程序的标准
  13. 专升本C语言习题知识点笔记
  14. 基于单片机的便携式瓦斯检测仪系统设计-基于单片机超声波停车位自动检测系统-基于单片机产品数量自动计量系统设计-基于单片机激光电子琴设计-基于单片机锂电池电量显示设计-基于单片机温湿度农田自动灌溉设计
  15. python计算方位角_利用python计算太阳天顶角、方位角、高度角
  16. Catch the moments of your life. Catch them while you're young and quick.
  17. python中pandas.DataFrame如何对行与列求和以及如何添加新行与列的示例
  18. 速度与AI兼得:荣耀Play“GPU Turbo”是什么大杀技?
  19. c语言 星座运势,第十一周 OJ总结-日期妙算星座
  20. Qemu虚拟化PowerPc

热门文章

  1. [蓝桥杯][2013年第四届真题]危险系数(暴力+dfs)
  2. Hyperset(排序+二分)
  3. 反转数字(qduoj)
  4. KDD 2021 | Neural Auction: 电商广告中的端到端机制优化方法
  5. python的scikit-learn算法库实现
  6. mods文件夹怎么创建_TCL电视怎么安装蜜蜂视频通用教程
  7. php模拟登录qq邮箱_PHP 利用QQ邮箱发送邮件的实现
  8. LINUX文件系统介绍
  9. 大小端、位段和内存对齐
  10. 完美下巴标准_平行下颚抓