java中根据模板生成pdf文件

更新时间:2023-07-31 06:50:59 阅读: 评论:0

java中根据模板⽣成pdf⽂件
本⽂使⽤java引⼊apache提供的pdf操作⼯具⽣成pdf⽂件,主要是根据需求开发了⼀个util类,记录⼀下学习和开发过程。求女朋友原谅的话
因为业务需要,对于不同的⽤户要⽣成⼀个不同的pdf⽂件,记录了保险⽤户的疾病信息和结算信息等,根据pdf模板,从数据库中获取⽤户的基本和结算信息,然后⽣成该⽤户的结算⽂件。
根据这个需求,写了⼀个⼯具类,主要功能就是根据模板⽣成pdf⽂件,并保存到服务器指定位置。
pdfBox是apache提供的免费,开源的pdf操作⼯具,这个jar⾥⾯囊括了所有的pdfbox操作⼯具类,导⼊这⼀个就够了,使⽤起来很⽅便。
这⾥使⽤maven引⼊jar包:
<!-- /artifact/org.apache.pdfbox/pdfbox -->
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.13</version>
</dependency>
⼯具类有两个必须的元素:pdf模板⽂件和从数据库中抽出的数据。
pdf模板⽂件放在指定的路径,下图为部分pdf模板⽂件:
模板⽂件可以有多张,这⾥只截取⼀张当做参考。
⼊参和返回值,如下图:
String型的为⽣成的pdf⽂件名(该参数可有可⽆,⽂件名可以在该⽅法内定义,也可以在调⽤该⽅法时调⽤); Map<String,Object> 是从数据库中抽取的⽤户基本和结算信息,取出过程就不过多赘述了;
返回值为⽣成pdf⽂件的保存全路径;
不多说,直接上代码
宋太祖赵匡胤简介
/**
* 根据模板⽣成pdf
*@param pdfName ⽂件名
部首名称表* @param data Map(String,Object)
* @return ⽂件保存全路径⽂件
*/
public String createPDF(String pdfName, Map<String, Object> data) {
PdfReader reader = null;
AcroFields s = null;
PdfStamper ps = null;平行四边形的面积ppt
ByteArrayOutputStream bos = null;
String realPath = Bundle("systemconfig").getString("upLoadFolder") + File.parator + "comfirmationDoc";    String dateFolder = DateFormatUtils.format(new Date(), "yyyyMMdd");
String folderPath = realPath + File.parator + dateFolder;
//创建上传⽂件⽬录
File folder = new File(folderPath);
if (!ists()) {
folder.mkdirs();
}
//设置⽂件名
String fileName = pdfName + "_" + DateFormatUtils.format(new Date(), "yyyyMMddhhmmss") + ".pdf";
String savePath = folderPath + File.parator + fileName;
try {
String file = Class().getClassLoader().getResource("comfirmTemplate.pdf").getPath();
水稻种子品种//设置字体
String font = Class().getClassLoader().getResource("f").getPath();
reader = new PdfReader(file);
bos = new ByteArrayOutputStream();
ps = new PdfStamper(reader, bos);
s = ps.getAcroFields();
//使⽤中⽂字体使⽤ AcroFields填充值的不需要在程序中设置字体,在模板⽂件中设置字体为中⽂字体 Adobe 宋体 std L
BaFont bfChine = ateFont(font, BaFont.IDENTITY_H, BaFont.EMBEDDED);
//设置编码格式
s.addSubstitutionFont(bfChine);在线拼音翻译
// 遍历data 给pdf表单表格赋值
for (String key : data.keySet()) {
if ((key) != null) {
s.tField(key, (key).toString());
}
菠萝蜜籽可以吃吗}
// 如果为fal那么⽣成的PDF⽂件还能编辑,⼀定要设为true
ps.tFormFlattening(true);
ps.clo();
FileOutputStream fos = new FileOutputStream(savePath);
fos.ByteArray());
fos.flush();
fos.clo();
有凭有据return savePath;
} catch (IOException | DocumentException e) {
<("读取⽂件异常");
e.printStackTrace();
return "";
} finally {
try {
bos.clo();
reader.clo();
} catch (IOException e) {
<("关闭流异常");
e.printStackTrace();
}
}
}
经过实际使⽤,代码能够正常⽣成pdf⽂件,在这⾥就不上图了
1.pdf模板⽂件可以看做是key-value的键值对型,key值即为⼊参中的map中的key值,在pdf模板中隐藏,value即是根据key填充的值。
2.pdf模板⽂件中的checkbox默认是勾选上的,设置off,可以取消勾选当前选项,⽐如⽤户性别为⼥:使⽤map.put("xMale","off");的⽅法取消性别中男性的已选择状态。
3.⽂件的保存路径在⽅法内定义的,也可以事前定义好,像⽂件名⼀样以⼊参的形式传参。

本文发布于:2023-07-31 06:50:59,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1102817.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:模板   设置   信息   结算   路径   字体   数据库
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图