SpringBoot使用模板动态导出PDF使用itextpdf

  • SpringBoot使用模板动态导出PDF使用itextpdf
    • 1.引包
    • 2.controller层代码段
    • 3.service层代码段
    • 4.前端处理
    • 5.模板绘制
      • 5.1.模板绘制工具
      • 5.2.绘制模板 ![Alt](https://img-blog.csdnimg.cn/0e9d3def1018404897fd16e60674dc53.png)
      • 5.3.将模板引入项目,放在项目resource路径下

SpringBoot使用模板动态导出PDF使用itextpdf

1.引包

----- dependencies部分-------------------------------------------------------------------------------

<dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.13</version>
</dependency>
<!--字体集-->
<dependency><groupId>com.itextpdf</groupId><artifactId>itext-asian</artifactId><version>5.2.0</version>
</dependency>

----- build部分-------------------------------------------------------------------------------
配置所需字体包,将包放在resources路径下,我使用的是宋体,可以在本地C:\Windows\Fonts中拷贝需要使用的字体包

<resources><resource><directory>src/main/resources</directory><filtering>true</filtering><excludes><exclude>fonts/*</exclude></excludes></resource><resource><directory>src/main/resources</directory><filtering>false</filtering><includes><include>fonts/*</include></includes></resource>
</resources>

2.controller层代码段

@GetMapping(value = "/export", produces = "application/json")
@ResponseBodypublic void export(HttpServletResponse response, SinCardTempFeeQueryVO sinCardTempFeeQueryVO) {log.info("收据打印开始startPrint()");response.setHeader("content-disposition","attachment;fileName="+"ReceiptPrinter.pdf");try {reportPrint.generateTempPDF(response,sinCardTempFeeQueryVO);log.info("收据打印结束Print()");} catch (Exception e) {e.printStackTrace();}}

3.service层代码段

package com.lotso.web.module.KDFinfeeSure.service.impl;import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.itextpdf.text.pdf.AcroFields;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;
import com.lotso.web.common.utils.ConvertUpMoneyUtil;
import com.lotso.web.common.utils.HttpClientHelper;
import com.lotso.web.module.KDFinfeeSure.service.ReportPrintService;
import com.lotso.web.module.KDFinfeeSure.vo.JGSinCardQueryVO;
import com.lotso.web.module.KDFinfeeSure.vo.SinCardTempFeeQueryVO;
import com.lotso.web.module.system.entity.Dict;
import com.lotso.web.module.system.mapper.IDictMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;@Service
@Slf4j
public class ReportPrintImpl implements ReportPrintService {@AutowiredIDictMapper dictMapper;@Autowiredprivate HttpClientHelper httpClient;@Overridepublic  void generateTempPDF(HttpServletResponse response, SinCardTempFeeQueryVO sinCardTempFeeQueryVO) throws Exception {PdfReader reader = null;PdfStamper ps = null;OutputStream fos = null;ByteArrayOutputStream bos = null;InputStream fin = null;ServletOutputStream out = null;try {
//            String fileName = "E:\\Work\\unifiedpaymentpayplatformxyd\\src\\main\\resources\\templates\\pdf\\KDDLR_Receipt_Template.pdf";//模板绝对路径--服务器String fileName = "/app/file/pdf/KDDLR_Receipt_Template.pdf";reader = new PdfReader(fileName);bos = new ByteArrayOutputStream();ps = new PdfStamper(reader, bos);// 使用中文字体BaseFont bf = BaseFont.createFont("/fonts/STSONG.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);ArrayList<BaseFont> fontList = new ArrayList<BaseFont>();fontList.add(bf);AcroFields fields = ps.getAcroFields();fields.setSubstitutionFonts(fontList);fillData(fields, data(sinCardTempFeeQueryVO));//渲染//必须要调用这个,否则文档不会生成的ps.setFormFlattening(true);if(ps != null){ps.close();}//生成pdf路径存放的路径fos = response.getOutputStream();fos.write(bos.toByteArray());}catch (Exception e){e.printStackTrace();log.error("异常:{",e.getMessage()+e.getCause()+"}");}finally {if(fos!=null){fos.flush();fos.close();}if (bos != null){bos.close();}if(reader != null){reader.close();}}}/*** 填充模板中的数据*/public void fillData(AcroFields fields, Map<String, String> data) {try {for (String key : data.keySet()) {String value = data.get(key);// 为字段赋值,注意字段名称是区分大小写的fields.setField(key, value);}} catch (Exception e) {e.printStackTrace();log.error("异常:{",e.getMessage()+e.getCause()+"}");}}/*** 填充数据源* 其中data存放的key值与pdf模板中的文本域值相对应*/public Map<String, String> data( SinCardTempFeeQueryVO asinCardTempFeeQueryVO){// 构造数据 , key要与模板中的别名一一对应Map<String, String> paramters = new HashMap<String, String>();paramters.put("prtseq",sinCardTempFeeQueryVO.getPrtseq());paramters.put("agentcode",sinCardTempFeeQueryVO.getAgentcode());paramters.put("agentname",sinCardTempFeeQueryVO.getAgentname());paramters.put("oldprtseq",sinCardTempFeeQueryVO.getOldprtseq());paramters.put("reqcom",sinCardTempFeeQueryVO.getReqcom());return paramters;}
}

4.前端处理

 var confirmPay = function (obj) {var link = document.createElement('a');link.href = 'sincardtempfee/query/export?prtseq='+obj.prtseq+'&agentcode='+obj.agentcode+'&code='+obj.code;link.click();};

5.模板绘制

5.1.模板绘制工具

Adobe Acrobat DC

5.2.绘制模板

5.3.将模板引入项目,放在项目resource路径下

SpringBoot使用模板动态导出PDF使用itextpdf相关推荐

  1. Java使用Freemarker通过模板文件导出PDF文件、横向显示

    前言: 尝试了不少通过模板文件导出pdf文件的方法,要么实现起来复杂,要么实现效果不理想,经过反复查找资料和尝试发现此方法是最理想的. 本博客又经大量网友实践及建议,经过几次完善修改,又日趋完善,在此 ...

  2. java导出PDF(itextpdf+Adobe Acrobat 9 Pro)

    java导出PDF 背景 摸索 maven依赖 代码实现 模板及结果展示 模板 结果 彩蛋 彩蛋一:本地临时文件删除不了 彩蛋二:导出横向A4PDF 彩蛋三:多个PDF合并(待完成) 背景 最近接到一 ...

  3. java 通过模板生成导出PDF方案对比

    需求背景 目前项目中有通过 上传word模板,结合用户填写数据,导出渲染后的PDF数据,提升数据安全性.现记录一下使用过程及遇到的问题 项目方案 Adobe Acrobat Pro 打开刚刚制作的pd ...

  4. java pdf文件保存_java根据模板文件导出pdf

    原文:https://www.cnblogs.com/wangpeng00700/p/8418594.html 在网上看了一些Java生成pdf文件的,写的有点乱,有的不支持写入中文字体,有的不支持模 ...

  5. java使用world模板动态生成PDF文件

    根据项目需求,需要用到一个功能,根据页面参数需要动态的生成一个world,并将world生成两份PDF文件,一份正式文件,一份临时的电子文件(带有二维码,扫描可以下载正式文件的电子版本).同时上传到文 ...

  6. Excel模板导出之动态导出

    说明 目前Magicodes.IE已支持Excel模板导出时使用JObject.Dictionary和ExpandoObject来进行动态导出,具体使用请看本篇教程. 本功能的想法.部分实现初步源于a ...

  7. java根据模板导出pdf,并将多个pdf合成一个

    前言 项目中,遇到这么一个需求:根据单个模板批量导出pdf,批量导出的pdf要合并成一个pdf进行打印.两个问题点:1.根据模板生成pdf.2.pdf合并 一.前期准备工作(准备pdf模板) 这个问题 ...

  8. itext文本域自动换行_Java导出Pdf格式表单

    前言 作为开发人员,工作中难免会遇到复杂表单的导出,接下来介绍一种通过Java利用模板便捷导出Pdf表单的方式 模拟需求 需求:按照下面格式导出pdf格式的学生成绩单 准备工作 Excel软件 Ado ...

  9. Java和iText导出pdf文档

    一:工程截图: 二:项目运行截图: 三:源代码: Book.java package com.iText.bean;public class Book {private int bookId;// 图 ...

  10. phpspreadsheet 导出pdf文件

    PhpOffice\PhpSpreadsheet不但可以操作Excel和导出Excel,也可以用来导出pdf文件.不过需要安装扩展,Tcpdf/Dompdf等三方类库,否则提示类库不存在. 目录 安装 ...

最新文章

  1. oracle 内存分配和调优 总结
  2. C语言训练题-铺草坪简易版
  3. 黑客攻防技术宝典Web实战篇第2版—第9章 攻击数据存储区
  4. python软件下载3版本-Python3.9下载
  5. linux变量接收命令返回值,linux shell自定义函数(定义、返回值、变量作用域)介绍...
  6. [blender]图片模糊不清楚怎么变清晰
  7. opencv读取颜色通道
  8. PC端浏览器如何访问微信小程序
  9. 从键盘输入三角形的直角边,利用hypot()函数输出三角形的斜边
  10. 2018 上半年总结
  11. 微念入局螺蛳粉餐饮供应链,或成下一个颐海、蜀海
  12. 三大步骤轻松搞定RTK:求转换参数、测量及放样、数据传输
  13. QQ搜集用户数据是空穴来风吗?(二)
  14. FinalSub手拍唱词字幕软件
  15. css lt;igt;,Tailwind CSS v2.0重磅更新~
  16. 修改Menu类增加普通员工,经理,管理员对应的功能菜单的方法
  17. 为promise部署complete方法
  18. C语言遥控器程序,学习型遥控器C语言.doc
  19. 【智能车】从零写一份自己的完全模型智能车寻路算法(有手就行) --- 01
  20. 服务器03系统在win10的电脑花屏,Win10系统的电脑开机出现花屏怎么办 - 驱动管家...

热门文章

  1. MSM8937的sbl1和CDT
  2. 品质qc工程图_QC工程图 (品管)
  3. 计算机ps基础知识教案范文,计算机制图软件ps教案内页.doc
  4. java的链表(LinkedList类)
  5. 数字化施工管理太玄乎?“要点+案例”让你一看就懂
  6. 此计算机不支持动态磁盘,磁盘无法分区提示此操作系统不支持动态磁盘故障原因分析与解决...
  7. java poi 设置时间空间_POI对Excel自定义日期格式的读取(实例代码)
  8. 2021年PMP考试模拟题6(含答案解析)
  9. 当代中国社会划分为十大阶层
  10. 485通讯协议_终于有人把RS485通讯协议应用及缺点分析清楚了,看完收获多多