文章目录

  • 前言
  • 一、注备好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文件相关推荐

  1. html与css入门经典doc,HTML+CSS入门 flying-saucer如何利用HTML来生成PDF文件

    本篇教程介绍了HTML+CSS入门 flying-saucer如何利用HTML来生成PDF文件,希望阅读本篇文章以后大家有所收获,帮助大家HTML+CSS入门. < 1.导入maven依赖 9. ...

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

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

  3. itext根据模版生成PDF与合并多个PDF以及向已存在PDF增加水印设置权限等操作

    我之前写了一篇文章讲了itext的基础操作常用方法(https://my.oschina.net/itazi/blog/1812042),但是有时涉及到比较复杂的PDF生成,手工操作就很复杂,可以使用 ...

  4. python数据生成pdf,Python生成pdf文件的方法

    摘要:这篇Python开发技术栏目下的"Python生成pdf文件的方法",介绍的技术点是"python生成pdf文件.python生成pdf.生成pdf文件.Pytho ...

  5. MFC使用Haru free pdf lib生成pdf文件

    MFC使用Haru free pdf lib生成pdf文件 我们先创建一个项目MFCPDFDemo,在上面添加一个编辑框和一个按钮: haru free pdf类库下载地址 这里直接下载dll,如果想 ...

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

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

  7. python pdf报告_Python实现html转换为pdf报告(生成pdf报告)功能示例

    本文实例讲述了Python实现html转换为pdf报告(生成pdf报告)功能.分享给大家供大家参考,具体如下: 1.先说下html转换为pdf:其实支持直接生成,有三个函数pdfkit.f 安装pyt ...

  8. java中freemarker使用ftl模版生成PDF文件

    说明 调用方法生成PDF时,使用的ftl模版,以及字体都是从jar中读取的,无需担心多节点部署 引用jar <dependency><groupId>org.freemarke ...

  9. java利用iText工具包生成PDF

    iText是一个非常著名的能够快速产生PDF文件的Java类库.支持文本,表格,图形的操作,可以方便的跟 Servlet 进行结合 iText的更新变化很大,早期版本在PDF样式上可能会有瑕疵,所有我 ...

最新文章

  1. java前台传多个id用什么接收_前端js传多个id 到java后台的处理方式
  2. 自学python要看哪些书籍-Python入门自学到精通需要看哪些书籍?
  3. app uniapp 获取位置_uniApp 地图使用
  4. Python缩进的几个原则
  5. 【机器学习】 LightGBM——优于XGBoost提升的集成算法(安装+对比XGBoost改进+参数说明+python代码实例)
  6. python中数字和字符串可以直接相加_用c语言或者python将文件中特定字符串后面的数字相加...
  7. JuliaPro安装与使用
  8. 腾讯云首次披露云原生智能数据湖全景图,数据湖之争再起波澜
  9. MQTT、CoAP 还是 LwM2M?主流物联网协议如何选择
  10. 最长公共子串 动态规划
  11. h3c 抓包么 能通过debug_华三路由器可以抓包吗 路由器密码
  12. openEuler代码贡献之星:麒麟软件裴建康
  13. 主板各种插针接口与机箱(电源)的接法
  14. 全球著名化妆品品牌--SEPHORA丝芙兰验厂
  15. 如何幽默的介绍php是撒,终于明白如何幽默介绍自己名字
  16. 美国名校为何青睐爱吃泡面的考生
  17. 程序员为什么害怕低代码?
  18. 用keil语言定义c51,51单片机Keil C51的使用(C语言)
  19. 怎样修复win7无线服务器,win7开启无线服务器
  20. Attention 与Hierarchical Attention Networks 原理

热门文章

  1. 微信小程序-贪吃蛇开发5 游戏界面设计,flex布局
  2. mac上git clone报错:error: RPC failed; curl 92 HTTP/2 stream 0 was not closed cleanly: PROTOCOL_ERROR (e
  3. 在线FLV播放器实现
  4. iOS SDK制作脚本(a或framework)
  5. iOS HID蓝牙协议
  6. SSH札记(struts 2)
  7. 宝塔环境挂载阿里云盘(webdav协议)给服务器扩容自动备份网站数据!
  8. GCN原理的直观解释
  9. Microarchitecture:Macro Fusion
  10. RIP(IPV6) ciso