将docx转为pdf文档
0.首先生成docx文档,可以看我得上一篇文章
导出word文档生成docx格式,包含freemarker遍历多张图片
1.用到依赖前两个生成docx会用到,后两个生成pdf
<!-- freemarker依赖 --><dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.23</version></dependency><!-- https://mvnrepository.com/artifact/dom4j/dom4j --><dependency><groupId>dom4j</groupId><artifactId>dom4j</artifactId><version>1.6.1</version></dependency><dependency><groupId>fr.opensagres.xdocreport</groupId><artifactId>org.apache.poi.xwpf.converter.pdf</artifactId><version>1.0.6</version></dependency><!-- https://mvnrepository.com/artifact/commons-io/commons-io --><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.4</version></dependency>
2.前端请求关键代码
//导出PDFfunction download_reportPDF() {
// json为拼接的json对象 //json对象$.ajax({
//第一次请求生成pdf临时文件url: '${base}/report/reportView/reportExportPDF.do',method: 'POST',contentType: 'application/json;charset=utf-8',data: JSON.stringify(json),success: function (data) {if (data.status == 0) {
//第二次请求读取文件写入response输出流,实现下载。window.location.href = '${base}/report/reportView/reportExportLast.do'+ "?filepath=" + data.retinfo ;} else {alert("下载pdf失败!");}},error: function (data) {alert('文件下载失败' + data);}})}
3.第一次请求生成pdf临时文件:后台controller类
/*** @param* @Description 报表导出PDF* @Date 2019/11/20 11:53* @Param map 填入模板的数据* @Author */@PostMapping("/reportExportPDF")public void reportExportPDF(HttpServletRequest request, HttpServletResponse response, @RequestBody Map<String,Object> map) throws IOException {WebResult res = new WebResult();try {
//生成docx文档 详细看上一篇文章String lastFilePath = reportViewService.createWordDocx(map);String lastFilePDFPath = lastFilePath.replace("docx", "pdf");
//docx转换成pdf的工具类WordToPfd.wordConverterToPdf(lastFilePath,lastFilePDFPath);String lastPDFPath = lastFilePDFPath.replace(SEPARATOR,"~");String text=lastPDFPath ;
//生成的文件名放到response中返回(此处根据自己需要可直接返回text) ---------startPrintWriter out = null;try {response.setContentType("application/json;charset=UTF-8");out = response.getWriter();out.write(text);} catch (IOException var9) {LOGGER.error(var9.getMessage(), var9);} finally {if (out != null) {out.print("");out.close();}}
//生成的文件名放到response中返回(此处根据自己需要可直接返回text) ---------end} catch (Exception e) {e.printStackTrace();}}
4.要将字体文件拷贝出来
STZHONGS.TTF文件在自己的电脑中就有的字体文件:华文中宋
一般在C:/Windows/Fonts/STZHONGS.TTF目录下,拷贝到resources目录下就可以了
一定是 resources目录,不然读不到
也可下载https://download.csdn.net/download/haier0717/9505560
5.wordToPdf类
import com.lowagie.text.Font;
import com.lowagie.text.pdf.BaseFont;
import fr.opensagres.xdocreport.itext.extension.font.IFontProvider;
import org.apache.commons.io.IOUtils;
import org.apache.poi.xwpf.converter.pdf.PdfConverter;
import org.apache.poi.xwpf.converter.pdf.PdfOptions;
import org.apache.poi.xwpf.usermodel.XWPFDocument;import java.awt.*;
import java.io.*;/*** @Author:* @Description:* @Date: 2019/11/22 14:33* @Version: 1.0*/
public class WordToPfd {/*** 将word文档, 转换成pdf* 宋体:STSong-Light* STZHONGS.TTF文件从自己的电脑中就有的字体文件:华文中宋* 一般在C:/Windows/Fonts/STZHONGS.TTF目录下,拷贝到resources目录下就可以了 * 一定是 resources目录,不然读不到* @param tmp 源为word文档, 必须为docx文档* @param target 目标输出* @throws Exception*/public static void wordConverterToPdf(String tmp, String target) {InputStream sourceStream = null;OutputStream targetStream = null;XWPFDocument doc = null;String classPath= WordToPfd.class.getResource("/").getPath().toString();tmp = classPath + tmp;target = classPath + target;String fontPath =classPath+"STZHONGS.TTF";try {sourceStream = new FileInputStream(tmp);targetStream = new FileOutputStream(target);doc = new XWPFDocument(sourceStream);PdfOptions options = PdfOptions.create();//中文字体处理options.fontProvider(new IFontProvider() {@Overridepublic Font getFont(String familyName, String encoding, float size, int style, Color color) {try {//中文字体BaseFont bfChinese = BaseFont.createFont(fontPath, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);Font fontChinese = new Font(bfChinese, size, style, color);if (familyName != null){fontChinese.setFamily(familyName);}return fontChinese;} catch (Exception e) {e.printStackTrace();return null;}}});PdfConverter.getInstance().convert(doc, targetStream, options);} catch (IOException e) {e.printStackTrace();} finally {IOUtils.closeQuietly(targetStream);IOUtils.closeQuietly(sourceStream);}}}
6.第二次请求读取文件写入response输出流,实现下载。将文件输出到response中,浏览器实现下载
/*** @param* @Description 报表导出* @Date 2019/11/13 11:53* @Author zhangchao*/@RequestMapping("/reportExportLast")public void reportExportLast(HttpServletRequest request, HttpServletResponse response) throws IOException {String templateName = request.getParameter("filepath");if (templateName.isEmpty()) {templateName = "report" + System.currentTimeMillis();}String classPath=ReportViewAction.class.getResource("/").getPath().toString();String fileName = templateName.replace("~",SEPARATOR);String filePath = classPath+fileName;String name = "";//文件后缀名String fileExt = fileName.substring(fileName.lastIndexOf(".")+1);File file = new File(filePath);try (InputStream inputStream = new FileInputStream(file);ServletOutputStream out = response.getOutputStream()) {if (SUFFIX_DOCX.equals(fileExt)){name = new String("大数据报告.docx".getBytes("UTF-8"),"UTF-8");response.setContentType("application/msword;charset=UTF-8");}else if (SUFFIX_PDF.equals(fileExt)){name = new String("大数据报告.pdf".getBytes("UTF-8"),"UTF-8");response.setContentType("application/pdf;charset=UTF-8");}name = URLEncoder.encode(name,"UTF-8");response.setHeader("Content-Disposition", "attachment;filename=" + name);byte[] buffer = new byte[1024];int bytesToRead;while ((bytesToRead = inputStream.read(buffer)) != -1) {out.write(buffer, 0, bytesToRead);}} catch (IOException e) {e.printStackTrace();} finally {//删除临时文件String outputPath = filePath.substring(0,filePath.lastIndexOf(SEPARATOR)+1);WordUtils.delFiles(outputPath);}}
代码
JavaUtilsProject: java工具类,生成word文档,doc,docx,表格等
主要类
src/main/java/com/sl/utils/office/pdf/WordToPfd.java · 张超/JavaUtilsProject - Gitee.com
将docx转为pdf文档相关推荐
- 各种PDF转换问题(三).将AutoCAD图纸转为PDF文档
目前国内企业生产的自动化程度并不是很高,大多数都无法使用三维图直接进行加工生产,所以二维图对于大多数企业来说,仍然是最根本的生产依据.那么,在企业中,二维图转PDF就是一个很重要的小步骤,因为后续的打 ...
- python利用win32com实现doc文档转为pdf文档的功能
1.首先,必须去安装相关的库,使用命令:pip install pypiwin32,接下来是主要代码: import win32com.client import pythoncomclass Wor ...
- Java使用freemarker生成word文档并转pdf文档
Java使用freemarker生成word文档后转pdf 先来看看效果图 进入正题 项目需求: 为订单后生成对应的pdf文档,文档内包含图片. 方案一:使用freemarker和itext把html ...
- 如何把图片转换为PDF文档
今天无意中看到有一个同事的空间,有一篇<如何把图片转为PDF文档>的日志,按照教程所写,于是下载了一个迅捷JPG转换成PDF转换器,笔者使用成功,特与大家分享. 应用背景: 把书本纸上有用 ...
- 批量将 PDF 转为 Word 文档,支持 Docx、Doc 格式
概要:PDF 和 Word 这两种格式是非常常见的,并且相互之间也经常需要进行格式转化.Word 转 PDF是非常容易就能做到的,但是 PDF 转 Word 就经常会碰到各种各样的问题,比如格式错乱. ...
- 如何同时将多个 PDF 文档批量转为 Word、PPT、Epub 等其它格式
概要:「我的ABC软件工具箱」提供了丰富的格式转换功能,其中就包括了 PPT 转为其它格式.可以批量的将 PDF 文件快速转换为 Html.Pptx.Docx.Doc.Epub.Xps 等众多常见的其 ...
- python docx 合并文档 图片_Python+pymupdf处理PDF文档案例6则
推荐图书:<Python程序设计(第3版)>,(ISBN:978-7-302-55083-9),清华大学出版社,2020年6月第1次印刷,7月第2次印刷 京东购买链接:https://it ...
- 如何用matlaab把csv转为mat文件_如何编辑pdf文档?看大神们是如何操作的
伙伴们,你们在日常工作中是不是经常使用pdf文档?我这几天需要给部门主管整理一些企划方案,但发送给他之后才发现里面有几个错别字,天呐,当时可吓呆我了,便立马撤回,可怎么快速修改文档中的错别字呢?总不能 ...
- 如何将多个 Docx 格式 Word 文档批量转为 Doc 格式
概要:前面我们介绍过常见的 Word 文档有多种格式,比如 Doc.Docx,并且详细介绍了如何批量将多个 Doc 格式的 Word 文档批量转为 Docx 格式文档,相信对大家都有一些的帮助.那 D ...
- pdf 转为 MSWord 文档格式的几种方法
<全面接触PDF:最好用的PDF软件汇总>中主要介绍了pdf生成工具,但经常有网友寻找PDF2doc(pdf转换word)类软件.本文推荐Gmail.pdftoword.com.e-PDF ...
最新文章
- c++采集声卡输出_耳上明珠 | 魅族双 C 耳机 — EP2C
- react控制组件的显示或隐藏, 根据state判断元素显示隐藏 , setState不实时生效解决方法
- C#+Mapxtreme 实现一些GIS系统基本的功能
- Bytomd 助记词恢复密钥体验指南
- batchnorm2d参数 torch_pytorch方法测试详解——归一化(BatchNorm2d)
- 收集一些深度学习视频
- OpenCV3.0中的图像金字塔与图片尺寸缩放
- php数组地址,怎么实现javascript数组与php数组的地址传递
- 20220129--CTF刷题--disabled_button
- 在mac上安装gitlab
- 适合初学者的安卓开源项目_开源系列的初学者将从下周开始
- (1)散列表(哈希表)的定义
- IDEA中注释代码,注释符如何不显示在行首
- js调用后台,后台调用前台等方法总结
- 【MIKE21】批处理依次打开模型文件运行模型
- js 直接打开选择文件窗口_打开CAD文件时,怎么快速选择“gbcbig.shx”字体?
- 简单记录 03.21
- Python编写远程控制工具
- hashmap经典面试问题以及答案
- 饭店点餐系统的设计与实现
热门文章
- Mysql - 开发技巧(二)
- [转]飞鸟集 Stray Bird
- Destoon 自定义模块
- Edge浏览器运行卡顿怎么办 怎样让Edge浏览器速度更快
- 学习笔记(05):mySQL数据库开发教程-域完整性-默认值约束
- Microsoft SQL Server 生成随机数字、字符串、日期、验证码以及 UUID
- eclipse导入系统签名
- Linux安装配置Tomcat 8.5.34 快捷启动,关闭(二)
- Andriod studio 学习 之 Recyclerview
- EOJ 2527 Fj haozi【dfs】