java编程导出pdf_java中根据模板生成pdf文件
简介
本文使用java引入apache提供的pdf操作工具生成pdf文件,主要是根据需求开发了一个util类,记录一下学习和开发过程。
业务需求
因为业务需要,对于不同的用户要生成一个不同的pdf文件,记录了保险用户的疾病信息和结算信息等,根据pdf模板,从数据库中获取用户的基本和结算信息,然后生成该用户的结算文件。
根据这个需求,写了一个工具类,主要功能就是根据模板生成pdf文件,并保存到服务器指定位置。
引入jar包
pdfBox是apache提供的免费,开源的pdf操作工具,这个jar里面囊括了所有的pdfbox操作工具类,导入这一个就够了 ,使用起来很方便。
这里使用maven引入jar包:
org.apache.pdfbox
pdfbox
2.0.13
pdf模板文件与方法参数
工具类有两个必须的元素:pdf模板文件和从数据库中抽出的数据。
pdf模板文件放在指定的路径,下图为部分pdf模板文件:
模板文件可以有多张,这里只截取一张当做参考。
入参和返回值,如下图:
String型的为生成的pdf文件名(该参数可有可无,文件名可以在该方法内定义,也可以在调用该方法时调用);
Map 是从数据库中抽取的用户基本和结算信息,取出过程就不过多赘述了;
返回值为生成pdf文件的保存全路径;
代码部分
不多说,直接上代码
/**
* 根据模板生成pdf
*@param pdfName 文件名
* @param data Map(String,Object)
* @return 文件保存全路径文件
*/
public String createPDF(String pdfName, Map data) {
PdfReader reader = null;
AcroFields s = null;
PdfStamper ps = null;
ByteArrayOutputStream bos = null;
String realPath = ResourceBundle.getBundle("systemconfig").getString("upLoadFolder") + File.separator + "comfirmationDoc";
String dateFolder = DateFormatUtils.format(new Date(), "yyyyMMdd");
String folderPath = realPath + File.separator + dateFolder;
//创建上传文件目录
File folder = new File(folderPath);
if (!folder.exists()) {
folder.mkdirs();
}
//设置文件名
String fileName = pdfName + "_" + DateFormatUtils.format(new Date(), "yyyyMMddhhmmss") + ".pdf";
String savePath = folderPath + File.separator + fileName;
try {
String file = this.getClass().getClassLoader().getResource("comfirmTemplate.pdf").getPath();
//设置字体
String font = this.getClass().getClassLoader().getResource("YaHei.ttf").getPath();
reader = new PdfReader(file);
bos = new ByteArrayOutputStream();
ps = new PdfStamper(reader, bos);
s = ps.getAcroFields();
//使用中文字体 使用 AcroFields填充值的不需要在程序中设置字体,在模板文件中设置字体为中文字体 Adobe 宋体 std L
BaseFont bfChinese = BaseFont.createFont(font, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
//设置编码格式
s.addSubstitutionFont(bfChinese);
// 遍历data 给pdf表单表格赋值
for (String key : data.keySet()) {
if (data.get(key) != null) {
s.setField(key, data.get(key).toString());
}
}
// 如果为false那么生成的PDF文件还能编辑,一定要设为true
ps.setFormFlattening(true);
ps.close();
FileOutputStream fos = new FileOutputStream(savePath);
fos.write(bos.toByteArray());
fos.flush();
fos.close();
return savePath;
} catch (IOException | DocumentException e) {
logger.error("读取文件异常");
e.printStackTrace();
return "";
} finally {
try {
bos.close();
reader.close();
} catch (IOException e) {
logger.error("关闭流异常");
e.printStackTrace();
}
}
}
经过实际使用,代码能够正常生成pdf文件,在这里就不上图了
总结归纳
1.pdf模板文件可以看做是key-value的键值对型,key值即为入参中的map中的key值,在pdf模板中隐藏,value即是根据key填充的值。
2.pdf模板文件中的checkbox默认是勾选上的,设置off,可以取消勾选当前选项,比如用户性别为女:使用map.put("sexMale","off");的方法取消性别中男性的已选择状态。
3.文件的保存路径在方法内定义的,也可以事前定义好,像文件名一样以入参的形式传参。
java编程导出pdf_java中根据模板生成pdf文件相关推荐
- java按模板生成pdf_java中根据模板生成pdf文件
简介 本文使用java引入apache提供的pdf操作工具生成pdf文件,主要是根据需求开发了一个util类,记录一下学习和开发过程. 业务需求 因为业务需要,对于不同的用户要生成一个不同的pdf文件 ...
- java 字符串转pdf文件_java中根据模板生成pdf文件
原标题:java中根据模板生成pdf文件 阅读目录 简介 业务需求 引入jar包 pdf模板文件与方法参数 代码部分 总结归纳 回到顶部 简介 本文使用java引入apach提供的pdf操作工具生成p ...
- Java根据模板生成pdf文件并导出
原文地址:http://blog.csdn.net/TOP__ONE/article/details/65442390 首先你的制作一个pdf模板: 1.先用word做出模板界面 2.文件另存为pdf ...
- java根据模板生成pdf文件并导出(iText)
java根据模板生成pdf文件并导出 首先你的制作一个pdf模板: 1.先用word做出模板界面 2.文件另存为pdf格式文件 3.通过Adobe Acrobat pro软件打开刚刚用word转换成的 ...
- java 制作pdf模板,Java-pdf模板制作流程-使用pdf 模板生成pdf文件
Java 使用pdf 模板生成pdf文件 --制作流程 1. 使用工具 adobe acrobat dc.word 2015 2. 使用 word 繪制一個 3*5 的表格並保存, ...
- java 模板生成PDF文件 复选框勾选
java 模板生成PDF文件 复选框勾选 // pdf填充时要有第三个参数s.setField("A", On, true);
- freemarker 模板生成pdf文件并下载
利用freemarker 模板生成pdf文件,通过浏览器直接下载或生成文件到指定目录 1.pom.xml文件 <!--引入Freemarker的依赖--> <dependency&g ...
- itextpdf通过pdf模板生成pdf文件
itextpdf通过pdf模板生成pdf文件,设置粗体字体 1.创建pdf模板 2.使用模板生成pdf 3.itext自带的字体列表 4.遇到的坑 1.创建pdf模板 可以使用PDFFescape网站 ...
- java excel转pdf linux,从JAVA直接读取EXCEL、WORD并生成PDF文件
从JAVA直接读取EXCEL.WORD并生成PDF文件 1.操作EXCEL和WORD文件 使用JAVA从EXCEL.WORD文件中读写数据,可以使用http://jexcelapi.sourcefor ...
- java导出pdf文件并下载_java根据模板生成pdf文件并导出
1.首先需要依赖包:itext的jar包,我是maven项目,所以附上maven依赖 [html] view plain copy com.itextpdf itextpdf 5.5.10 [html ...
最新文章
- 微生物绝对定量or相对定量,你选对了吗
- KUKA通信 CREAD问题
- find之exec和args
- confluence创建页面加载缓慢_树莓派4B使用docker安装confluence
- linux x64下安装oracle 11g
- 墨者mysql注入_墨者靶场:SQL注入漏洞测试(参数加密) 使用sqlmap进行注入
- 2016word多级列表 一级标题居中后偏左
- php 对账单系统,微信支付PHP开发教程八下载对账单
- 超简单的scrapy实现ip动态代理与更换ip
- 补天漏洞响应平台基本介绍
- Linux中的lo回环接口详细介绍
- 浅谈综述论文:文献综述
- IDEA警告: Redundant character escape xxx in RegExp
- 安卓笔记侠周报|开源届捷报,React 凯旋而归
- 成都奔驰加装360度全景记录仪 蔚一车改
- Robosense速腾激光雷达驱动文件参数介绍
- python time 模块函数
- 23个Python爬虫开源项目代码,包含微信、淘宝、豆瓣、知乎、微博等
- 对于英语小白,运行Pycharm后要做的第一件事,下载一个官方插件,汉化Pycharm
- 20221902 2022-2023-2 《网络攻防实践》第三次作业
热门文章
- Blender建模(二)
- 耐得寂寞,拥得繁华 (转)
- 诗经名句(供大家看代码疲劳的时候消遣下)
- 管道—过滤器简介 软件体系结构
- java 国际象棋_java – 自我项目:使用GUI创建国际象棋游戏
- 盗QQ号的现在越来越牛B了,我差点被骗!大家要小心了
- mysql中dint,请教一下Dint和Real型变量在使用过程中出现的问题
- JRuby: Wiki: RailsWithH2InJNDIOnJetty — Project Kenai
- linux centos 动态域名 自动更新
- 企业信息系统集成发展阶段及ESB对企业的价值体现