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文档相关推荐

  1. 各种PDF转换问题(三).将AutoCAD图纸转为PDF文档

    目前国内企业生产的自动化程度并不是很高,大多数都无法使用三维图直接进行加工生产,所以二维图对于大多数企业来说,仍然是最根本的生产依据.那么,在企业中,二维图转PDF就是一个很重要的小步骤,因为后续的打 ...

  2. python利用win32com实现doc文档转为pdf文档的功能

    1.首先,必须去安装相关的库,使用命令:pip install pypiwin32,接下来是主要代码: import win32com.client import pythoncomclass Wor ...

  3. Java使用freemarker生成word文档并转pdf文档

    Java使用freemarker生成word文档后转pdf 先来看看效果图 进入正题 项目需求: 为订单后生成对应的pdf文档,文档内包含图片. 方案一:使用freemarker和itext把html ...

  4. 如何把图片转换为PDF文档

    今天无意中看到有一个同事的空间,有一篇<如何把图片转为PDF文档>的日志,按照教程所写,于是下载了一个迅捷JPG转换成PDF转换器,笔者使用成功,特与大家分享. 应用背景: 把书本纸上有用 ...

  5. 批量将 PDF 转为 Word 文档,支持 Docx、Doc 格式

    概要:PDF 和 Word 这两种格式是非常常见的,并且相互之间也经常需要进行格式转化.Word 转 PDF是非常容易就能做到的,但是 PDF 转 Word 就经常会碰到各种各样的问题,比如格式错乱. ...

  6. 如何同时将多个 PDF 文档批量转为 Word、PPT、Epub 等其它格式

    概要:「我的ABC软件工具箱」提供了丰富的格式转换功能,其中就包括了 PPT 转为其它格式.可以批量的将 PDF 文件快速转换为 Html.Pptx.Docx.Doc.Epub.Xps 等众多常见的其 ...

  7. python docx 合并文档 图片_Python+pymupdf处理PDF文档案例6则

    推荐图书:<Python程序设计(第3版)>,(ISBN:978-7-302-55083-9),清华大学出版社,2020年6月第1次印刷,7月第2次印刷 京东购买链接:https://it ...

  8. 如何用matlaab把csv转为mat文件_如何编辑pdf文档?看大神们是如何操作的

    伙伴们,你们在日常工作中是不是经常使用pdf文档?我这几天需要给部门主管整理一些企划方案,但发送给他之后才发现里面有几个错别字,天呐,当时可吓呆我了,便立马撤回,可怎么快速修改文档中的错别字呢?总不能 ...

  9. 如何将多个 Docx 格式 Word 文档批量转为 Doc 格式

    概要:前面我们介绍过常见的 Word 文档有多种格式,比如 Doc.Docx,并且详细介绍了如何批量将多个 Doc 格式的 Word 文档批量转为 Docx 格式文档,相信对大家都有一些的帮助.那 D ...

  10. pdf 转为 MSWord 文档格式的几种方法

    <全面接触PDF:最好用的PDF软件汇总>中主要介绍了pdf生成工具,但经常有网友寻找PDF2doc(pdf转换word)类软件.本文推荐Gmail.pdftoword.com.e-PDF ...

最新文章

  1. c++采集声卡输出_耳上明珠 | 魅族双 C 耳机 — EP2C
  2. react控制组件的显示或隐藏, 根据state判断元素显示隐藏 , setState不实时生效解决方法
  3. C#+Mapxtreme 实现一些GIS系统基本的功能
  4. Bytomd 助记词恢复密钥体验指南
  5. batchnorm2d参数 torch_pytorch方法测试详解——归一化(BatchNorm2d)
  6. 收集一些深度学习视频
  7. OpenCV3.0中的图像金字塔与图片尺寸缩放
  8. php数组地址,怎么实现javascript数组与php数组的地址传递
  9. 20220129--CTF刷题--disabled_button
  10. 在mac上安装gitlab
  11. 适合初学者的安卓开源项目_开源系列的初学者将从下周开始
  12. (1)散列表(哈希表)的定义
  13. IDEA中注释代码,注释符如何不显示在行首
  14. js调用后台,后台调用前台等方法总结
  15. 【MIKE21】批处理依次打开模型文件运行模型
  16. js 直接打开选择文件窗口_打开CAD文件时,怎么快速选择“gbcbig.shx”字体?
  17. 简单记录 03.21
  18. Python编写远程控制工具
  19. hashmap经典面试问题以及答案
  20. 饭店点餐系统的设计与实现

热门文章

  1. Mysql - 开发技巧(二)
  2. [转]飞鸟集 Stray Bird
  3. Destoon 自定义模块
  4. Edge浏览器运行卡顿怎么办 怎样让Edge浏览器速度更快
  5. 学习笔记(05):mySQL数据库开发教程-域完整性-默认值约束
  6. Microsoft SQL Server 生成随机数字、字符串、日期、验证码以及 UUID
  7. eclipse导入系统签名
  8. Linux安装配置Tomcat 8.5.34 快捷启动,关闭(二)
  9. Andriod studio 学习 之 Recyclerview
  10. EOJ 2527 Fj haozi【dfs】