利用PDF模版生成PDF文件
文章目录
- 前言
- 一、注备好PDF模版
- 二、代码示例
- 1.依赖
- 2.代码示例
- 总结
前言
如何利用PDF模版填充数据,生成我们想要的PDF文件呢?
一、准备好PDF模版
1、注备好需要生成的PDF文件
2、使用编辑器(例如:福昕高级PDF编辑器)编辑PDF文件,新建文本域,并保存。
二、代码示例
1.依赖
<dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.9</version></dependency><dependency><groupId>com.itextpdf</groupId><artifactId>itext-asian</artifactId><version>5.2.0</version></dependency>
2.代码
/*** 利用模板生成pdf,入参为设置的文本域替换字段*/@Override@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)public void pdfOut(Map<String, String> inputMap) throws Exception {// 模板路径File directory = new File("");// 参数为空String templatePath = directory.getCanonicalPath() + File.separator + "file/contractPDF.pdf";// 输出文件夹(临时)String newPdfPath = directory.getCanonicalPath() + File.separator + "fileout";if(!new File(newPdfPath).exists()){new File(newPdfPath).mkdir();}//字体文件String simfangPath = directory.getCanonicalPath() + File.separator + "file/simfang.ttf";PdfReader reader;FileOutputStream out;ByteArrayOutputStream bos;PdfStamper stamper;try {BaseFont bf = BaseFont.createFont(simfangPath, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);// 输出流String fileName = UUID.randomUUID().toString().replace("-","") + ".pdf";String filePath = newPdfPath + File.separator + fileName;File outFile = new File(filePath);if (!outFile.getParentFile().exists()) {outFile.getParentFile().mkdirs();}out = new FileOutputStream(filePath);// 读取pdf模板reader = new PdfReader(templatePath);bos = new ByteArrayOutputStream();stamper = new PdfStamper(reader, bos);AcroFields form = stamper.getAcroFields();//文字类的内容处理Map<String, String> datemap = inputMap;form.addSubstitutionFont(bf);for (String key : datemap.keySet()) {String value = datemap.get(key);form.setField(key, value);}stamper.setFormFlattening(false);stamper.close();Document doc = new Document();PdfCopy copy = new PdfCopy(doc, out);doc.open();for (int i = 1; i < 4; i++) {PdfImportedPage importPage = copy.getImportedPage(new PdfReader(bos.toByteArray()), i);copy.addPage(importPage);}doc.close();//filePath 为得到的pdf文件//上传阿里云,返回pdf路径//保存阿里云返回的文件路径//删除临时文件File delFile = new File(filePath);if(delFile.exists()){delFile.delete();}} catch (Exception ex) {throw new Exception(ex);}}
三、总结
该方法适用于数据固定的pdf文件生成。
如果模版数据pdf文件数据格式动态改变,比如有动态表格的情况下,可参考利用html模版生成PDF文件_奕安的博客-CSDN博客,使用html模版动态生成。
利用PDF模版生成PDF文件相关推荐
- html与css入门经典doc,HTML+CSS入门 flying-saucer如何利用HTML来生成PDF文件
本篇教程介绍了HTML+CSS入门 flying-saucer如何利用HTML来生成PDF文件,希望阅读本篇文章以后大家有所收获,帮助大家HTML+CSS入门. < 1.导入maven依赖 9. ...
- java 制作pdf模板,Java-pdf模板制作流程-使用pdf 模板生成pdf文件
Java 使用pdf 模板生成pdf文件 --制作流程 1. 使用工具 adobe acrobat dc.word 2015 2. 使用 word 繪制一個 3*5 的表格並保存, ...
- itext根据模版生成PDF与合并多个PDF以及向已存在PDF增加水印设置权限等操作
我之前写了一篇文章讲了itext的基础操作常用方法(https://my.oschina.net/itazi/blog/1812042),但是有时涉及到比较复杂的PDF生成,手工操作就很复杂,可以使用 ...
- python数据生成pdf,Python生成pdf文件的方法
摘要:这篇Python开发技术栏目下的"Python生成pdf文件的方法",介绍的技术点是"python生成pdf文件.python生成pdf.生成pdf文件.Pytho ...
- MFC使用Haru free pdf lib生成pdf文件
MFC使用Haru free pdf lib生成pdf文件 我们先创建一个项目MFCPDFDemo,在上面添加一个编辑框和一个按钮: haru free pdf类库下载地址 这里直接下载dll,如果想 ...
- itextpdf通过pdf模板生成pdf文件
itextpdf通过pdf模板生成pdf文件,设置粗体字体 1.创建pdf模板 2.使用模板生成pdf 3.itext自带的字体列表 4.遇到的坑 1.创建pdf模板 可以使用PDFFescape网站 ...
- python pdf报告_Python实现html转换为pdf报告(生成pdf报告)功能示例
本文实例讲述了Python实现html转换为pdf报告(生成pdf报告)功能.分享给大家供大家参考,具体如下: 1.先说下html转换为pdf:其实支持直接生成,有三个函数pdfkit.f 安装pyt ...
- java中freemarker使用ftl模版生成PDF文件
说明 调用方法生成PDF时,使用的ftl模版,以及字体都是从jar中读取的,无需担心多节点部署 引用jar <dependency><groupId>org.freemarke ...
- java利用iText工具包生成PDF
iText是一个非常著名的能够快速产生PDF文件的Java类库.支持文本,表格,图形的操作,可以方便的跟 Servlet 进行结合 iText的更新变化很大,早期版本在PDF样式上可能会有瑕疵,所有我 ...
最新文章
- java前台传多个id用什么接收_前端js传多个id 到java后台的处理方式
- 自学python要看哪些书籍-Python入门自学到精通需要看哪些书籍?
- app uniapp 获取位置_uniApp 地图使用
- Python缩进的几个原则
- 【机器学习】 LightGBM——优于XGBoost提升的集成算法(安装+对比XGBoost改进+参数说明+python代码实例)
- python中数字和字符串可以直接相加_用c语言或者python将文件中特定字符串后面的数字相加...
- JuliaPro安装与使用
- 腾讯云首次披露云原生智能数据湖全景图,数据湖之争再起波澜
- MQTT、CoAP 还是 LwM2M?主流物联网协议如何选择
- 最长公共子串 动态规划
- h3c 抓包么 能通过debug_华三路由器可以抓包吗 路由器密码
- openEuler代码贡献之星:麒麟软件裴建康
- 主板各种插针接口与机箱(电源)的接法
- 全球著名化妆品品牌--SEPHORA丝芙兰验厂
- 如何幽默的介绍php是撒,终于明白如何幽默介绍自己名字
- 美国名校为何青睐爱吃泡面的考生
- 程序员为什么害怕低代码?
- 用keil语言定义c51,51单片机Keil C51的使用(C语言)
- 怎样修复win7无线服务器,win7开启无线服务器
- Attention 与Hierarchical Attention Networks 原理
热门文章
- 微信小程序-贪吃蛇开发5 游戏界面设计,flex布局
- mac上git clone报错:error: RPC failed; curl 92 HTTP/2 stream 0 was not closed cleanly: PROTOCOL_ERROR (e
- 在线FLV播放器实现
- iOS SDK制作脚本(a或framework)
- iOS HID蓝牙协议
- SSH札记(struts 2)
- 宝塔环境挂载阿里云盘(webdav协议)给服务器扩容自动备份网站数据!
- GCN原理的直观解释
- Microarchitecture:Macro Fusion
- RIP(IPV6) ciso