简介

本文使用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文件相关推荐

  1. java按模板生成pdf_java中根据模板生成pdf文件

    简介 本文使用java引入apache提供的pdf操作工具生成pdf文件,主要是根据需求开发了一个util类,记录一下学习和开发过程. 业务需求 因为业务需要,对于不同的用户要生成一个不同的pdf文件 ...

  2. java 字符串转pdf文件_java中根据模板生成pdf文件

    原标题:java中根据模板生成pdf文件 阅读目录 简介 业务需求 引入jar包 pdf模板文件与方法参数 代码部分 总结归纳 回到顶部 简介 本文使用java引入apach提供的pdf操作工具生成p ...

  3. Java根据模板生成pdf文件并导出

    原文地址:http://blog.csdn.net/TOP__ONE/article/details/65442390 首先你的制作一个pdf模板: 1.先用word做出模板界面 2.文件另存为pdf ...

  4. java根据模板生成pdf文件并导出(iText)

    java根据模板生成pdf文件并导出 首先你的制作一个pdf模板: 1.先用word做出模板界面 2.文件另存为pdf格式文件 3.通过Adobe Acrobat pro软件打开刚刚用word转换成的 ...

  5. java 制作pdf模板,Java-pdf模板制作流程-使用pdf 模板生成pdf文件

    Java 使用pdf 模板生成pdf文件 --制作流程 1.      使用工具 adobe acrobat dc.word 2015 2.      使用 word 繪制一個 3*5 的表格並保存, ...

  6. java 模板生成PDF文件 复选框勾选

    java 模板生成PDF文件 复选框勾选 // pdf填充时要有第三个参数s.setField("A", On, true);

  7. freemarker 模板生成pdf文件并下载

    利用freemarker 模板生成pdf文件,通过浏览器直接下载或生成文件到指定目录 1.pom.xml文件 <!--引入Freemarker的依赖--> <dependency&g ...

  8. itextpdf通过pdf模板生成pdf文件

    itextpdf通过pdf模板生成pdf文件,设置粗体字体 1.创建pdf模板 2.使用模板生成pdf 3.itext自带的字体列表 4.遇到的坑 1.创建pdf模板 可以使用PDFFescape网站 ...

  9. java excel转pdf linux,从JAVA直接读取EXCEL、WORD并生成PDF文件

    从JAVA直接读取EXCEL.WORD并生成PDF文件 1.操作EXCEL和WORD文件 使用JAVA从EXCEL.WORD文件中读写数据,可以使用http://jexcelapi.sourcefor ...

  10. java导出pdf文件并下载_java根据模板生成pdf文件并导出

    1.首先需要依赖包:itext的jar包,我是maven项目,所以附上maven依赖 [html] view plain copy com.itextpdf itextpdf 5.5.10 [html ...

最新文章

  1. 微生物绝对定量or相对定量,你选对了吗
  2. KUKA通信 CREAD问题
  3. find之exec和args
  4. confluence创建页面加载缓慢_树莓派4B使用docker安装confluence
  5. linux x64下安装oracle 11g
  6. 墨者mysql注入_墨者靶场:SQL注入漏洞测试(参数加密) 使用sqlmap进行注入
  7. 2016word多级列表 一级标题居中后偏左
  8. php 对账单系统,微信支付PHP开发教程八下载对账单
  9. 超简单的scrapy实现ip动态代理与更换ip
  10. 补天漏洞响应平台基本介绍
  11. Linux中的lo回环接口详细介绍
  12. 浅谈综述论文:文献综述
  13. IDEA警告: Redundant character escape xxx in RegExp
  14. 安卓笔记侠周报|开源届捷报,React 凯旋而归
  15. 成都奔驰加装360度全景记录仪 蔚一车改
  16. Robosense速腾激光雷达驱动文件参数介绍
  17. python time 模块函数
  18. 23个Python爬虫开源项目代码,包含微信、淘宝、豆瓣、知乎、微博等
  19. 对于英语小白,运行Pycharm后要做的第一件事,下载一个官方插件,汉化Pycharm
  20. 20221902 2022-2023-2 《网络攻防实践》第三次作业

热门文章

  1. Blender建模(二)
  2. 耐得寂寞,拥得繁华 (转)
  3. 诗经名句(供大家看代码疲劳的时候消遣下)
  4. 管道—过滤器简介 软件体系结构
  5. java 国际象棋_java – 自我项目:使用GUI创建国际象棋游戏
  6. 盗QQ号的现在越来越牛B了,我差点被骗!大家要小心了
  7. mysql中dint,请教一下Dint和Real型变量在使用过程中出现的问题
  8. JRuby: Wiki: RailsWithH2InJNDIOnJetty — Project Kenai
  9. linux centos 动态域名 自动更新
  10. 企业信息系统集成发展阶段及ESB对企业的价值体现