word转换为PDF时要引入maven依赖

<dependency><groupId>com.documents4j</groupId><artifactId>documents4j-transformer-msoffice-word</artifactId><version>1.1.1</version>
</dependency><dependency><groupId>com.documents4j</groupId><artifactId>documents4j-local</artifactId><version>1.1.1</version>
</dependency>
import java.io.*;
import java.util.UUID;import com.documents4j.api.DocumentType;
import com.documents4j.api.IConverter;
import com.documents4j.job.LocalConverter;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.model.PicturesTable;
import org.apache.poi.hwpf.usermodel.*;
import org.apache.poi.hwpf.usermodel.Picture;/*** 实现java用poi对word读取和修改保存操作** @author qi*/
public class ReadAndWriteDoc {/*** 使用HWPFDocument解析word文档* wps按doc处理即可** @param path   文件路径* @param params 参数* @param flag   1:生成pdf*/public static void parseDocByHWPFDocument(String path, String params, String flag) {boolean execute = false;File tempFile = null;IConverter converter = null;try {// docx文件转换为docif (path.endsWith("docx")) {FileInputStream inputStream = new FileInputStream(new File(path));// 临时输出路径tempFile = new File("C:\\***\\" + UUID.randomUUID().toString() + ".doc");FileOutputStream outputStream = new FileOutputStream(tempFile);converter = LocalConverter.builder().build();// docx 转 doc. 成功返回trueexecute = converter.convert(inputStream).as(DocumentType.DOCX).to(outputStream).as(DocumentType.DOC).execute();}if (execute) {FileInputStream is = null;if (execute) {is = new FileInputStream(tempFile);} else {is = new FileInputStream(new File(path));}HWPFDocument document = new HWPFDocument(is);ByteArrayOutputStream baos = new ByteArrayOutputStream();// 字节流,用来存储图片// When POI 3.18 is out, replace this with PictureRunMapper// PictureRunMapper pictures = new PictureRunMapper(document);PicturesSource pictures = new PicturesSource(document);PicturesTable pictureTable = document.getPicturesTable();Range r = document.getRange();// 区间for (int i = 0; i < r.numParagraphs(); i++) {Paragraph p = r.getParagraph(i);// 段落int fontSize = p.getCharacterRun(0).getFontSize();// 字号,字号和是否加粗可用来当做标题或者某一关键标识的判断boolean isBold = p.getCharacterRun(0).isBold();// 是否加粗String paragraphText = p.text();// 段落文本// 替换 / 删除if (paragraphText.contains(params)) {p.replaceText(paragraphText, "");}// 以下代码解析图片,这样获取的图片是在文档流中的,是和文本按顺序解析的,可以很好的解决图片定位问题for (int j = 0; j < p.numCharacterRuns(); j++) {CharacterRun cr = p.getCharacterRun(j);// 字符if (pictureTable.hasPicture(cr)) {Picture picture = pictures.getFor(cr);// 如果是在页面显示图片,可转换为base64编码的图片picture.writeImageContent(baos);// 将图片写入字节流}}}// 写到另一个word文件中FileOutputStream out = null;File wordFile = new File("C:\\***\\555.doc");out = new FileOutputStream(wordFile, false);// 把doc输出到输出流中document.write(out);// 删除转换后的临时文件地址tempFile.delete();out.close();File pdfFile = null;// 如果是 1 将生成的word转换为pdfif ("1".equals(flag)) {// 读取的word输入流FileInputStream inputStreamWord = new FileInputStream(wordFile);pdfFile = new File("C:\\***\\666.pdf");FileOutputStream outputStreamPdf = new FileOutputStream(pdfFile);execute = converter.convert(inputStreamWord).as(DocumentType.DOC).to(outputStreamPdf).as(DocumentType.PDF).execute();if (execute) {converter.shutDown();}}}} catch (Exception e) {e.printStackTrace();}}
}

poi对word读取(文本和图片)、修改、保存操作及word转换为PDF相关推荐

  1. dos bat批处理的魅力 批处理读取文本中的每一行 操作文件

    dos bat批处理的魅力 批处理读取文本中的每一行 操作文件 http://blog.sina.com.cn/s/blog_872457fd0100tasi.html 批处理读取文本中的每一 行 ( ...

  2. Freemarker下载Word文档(文字+图片+表格)Idea示例 (附word展示图片异常解决方案)(附JPEG格式图片通过imageio.read方法读取为null解决方案)

    流程:拿到word模板 转为ftl格式并填充占位符参数,调用java代码填充参数即可 (文末附word打开图片显示异常,wps打开却显示正常的解决方案) (文末附Jpeg格式图片获取为null解决方案 ...

  3. 数据增强——对文件夹中的图片进行读取、数据增强,保存操作

    图片读取.数据增强.图片保存代码 """ # 数据增强实现 """ import cv2 import numpy as np import ...

  4. qt中关于xml的读取、写入、修改等操作

    通过项目的开发,我发现xml的读写主要是分为以下几种类型: 一种类型是: <?xml version="1.0" encoding="UTF-8"?> ...

  5. С++ opencv读取视频提取图片并保存

    读取本地视频,获取前50帧的图像并保存图片 #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hp ...

  6. python3使用opencv读取raw格式图片并保存为bmp格式图片

    import numpy as np import cv2rawImg = np.fromfile('./test.raw', dtype=np.uint8)rawImg = rawImg.resha ...

  7. Java 获取Word批注所标记的文本和图片

    [环境配置] 本文将通过Java程序代码来展示如何来获取Word批注所标注的文本和图片.这里使用的Word Jar包工具是Free Spire.Doc for Java,在pom.xml中按如下步骤配 ...

  8. 写论文时,Word文档修改保存后,文件越来越大的解决方法

    写论文时,Word文档经过反复修改保存后,文件会越来越大,十分烦人,网上找了很多解决办法,按个尝试,现在总结分享出来,让大家少走弯路. 缩小word文件大小第一招: Word在保存DOC文件时只是把一 ...

  9. 【教程】Spire.PDF教程:C# 如何提取 PDF 文档中的文本和图片

    Spire.PDF是一个专业的PDF组件,能够独立地创建.编写.编辑.操作和阅读PDF文件,支持 .NET.Java.WPF和Silverlight. [下载Spire.PDF最新试用版] 文本和图片 ...

最新文章

  1. win10下 mysql5.7.19 winx64解压缩版安装配置教程
  2. C语言位域(位段)详解
  3. 跟风写博---也谈值类型和引用类型
  4. 1过程流程图 3 apqp_干货 | APQP过程流程图及最新版全套表格汇总,收藏备用!
  5. Java实现浏览器下载文件
  6. 【全开源功放】意法微电子的经典芯片,TDA7294!
  7. system(“mode con cols=40 lines=15“)参数活起来
  8. python可以自动运行m文件吗_如何运行m文件而不启动matlab
  9. 安卓Android基于百度云平台人脸识别学生考勤签到系统设计
  10. jmap 和jstack使用
  11. Calendar类常用方法 日期间的转换 set方法有巨坑
  12. 发那科sub_FANUC PMC常用功能指令
  13. htc hd2刷android,真正的刷机之王! HTC HD2成功刷入安卓7.0
  14. 英语学习案例分析APP 201421123108 王坤彬
  15. 如何分析个股基本面_个股的基本面分析_如何看个股的基本面
  16. linux操作系统之终端命令echo命令详解 通俗易懂
  17. filter()过滤
  18. ERROR 1406 (22001): Data Too Long, field len 30, data len 48
  19. 【渝粤教育】电大中专办公设备使用与维护_1作业 题库
  20. javascript 获取括号中内容 正则表达式

热门文章

  1. STM32时钟系统了解
  2. 非常有用的生活小常识
  3. 案例3-数据驱动测试-从excel导入数据
  4. 交换机配置--进入web页面
  5. 96.(leaflet之家)leaflet态势标绘-进攻方向修改(燕尾)
  6. (十一)openstack------块存储服务cinder,磁盘(卷)扩容,使用 NFS---后端存储
  7. 最小公共子串——力扣
  8. 计数问题:1~n中x出现了多少次?
  9. 用byte数组表示RGB颜色
  10. Matlab 在图片上画虚线矩形框