思路:

1、创建PDF模板(先创建对应的excel文件,创建好后另存为PDF文件)即可。

2、使用Adobe Acrobat DC工具打开PDF文件,设置自己想要替换的内容。

3、maven项目引入依赖:

<dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.5</version>
</dependency><dependency><groupId>com.itextpdf</groupId><artifactId>itext-asian</artifactId><version>5.2.0</version>
</dependency>

3、编写工具类读取模板文件,自动生成PDF文件。

package com.icbc.jfxj.util;import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Random;import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.pdf.AcroFields;
import com.itextpdf.text.pdf.PdfCopy;
import com.itextpdf.text.pdf.PdfImportedPage;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;/*** ** http://www.sinoufc.com/*  .--,       .--,* ( (  \.---./  ) )*  '.__/o   o\__.'*     {=  ^  =}*      >  -  <*     /       \*    //       \\*   //|   .   |\\*   "'\       /'"_.-~^`'-.*      \  _  /--'         `*    ___)( )(___*   (((__) (__)))    高山仰止,景行行止.虽不能至,心向往之。* ** @Description   由PDF模板生成PDF文件工具类* @Author Bingyong.Wang* @Date 2020年10月21日上午9:23:19*/
public class Template2PDFTtil {/***     使用指定数据填充PDF模板(通知书notice)*  参数:*     1、模板文件路径         templatePath*     2、生成的新文件路径  newPDFPath*     3、获取的数据(这里是通知书相关数据)*/public static void fillNoticeTemplate(String templatePath, String newPDFPath) {// 模板路径//String templatePath = "C:\\Users\\asus\\Desktop\\受理通知书和不动产证明.pdf";System.out.println("通知书模板路径 tempaltePath = " + templatePath);// 新的文件名/*String newName = new SimpleDateFormat("yyyyMMdd").format(new Date()) + (int)(new Random().nextDouble() * 100000);System.out.println("生成文件的名称 newName = " + newName);*/// 生成的新文件路径/*String newPDFPath = "D:\\upload\\notice\\notice_"+newName+".pdf";System.out.println("生成文件的路径 newPDFPath = " + newPDFPath);*/PdfReader reader;FileOutputStream out;ByteArrayOutputStream bos;PdfStamper stamper;try {// 文件输出流 即写入的文件out = new FileOutputStream(newPDFPath);// PDF读入 即PDF模板reader = new PdfReader(templatePath);bos = new ByteArrayOutputStream();stamper = new PdfStamper(reader, bos);AcroFields form = stamper.getAcroFields();Map<String, String> map = new HashMap<>();// 获取缴费单的数据。    以下为测试数据// 业务类型map.put("businessType", "土地及房屋抵押权首次登记");// 业务编号map.put("businessCode", "202011270006");// 申请人(权利人)map.put("RightHolder", "中国建设银行股份有限公司云南省分行");// 申请人(义务人)map.put("Obligor", "张万奎");// 坐落map.put("address", "云南省昆明市官渡区小板桥街道北门街58号4-5幢1层520号云南省昆明市官渡区小板桥街道北门街58号4-5幢1层520号");// 权属证书(已登记证明)号map.put("OCNumber", "云(2020)五华区不动产权第0293218号");// 不动产登记申请书 页数map.put("page1", "2");// 不动产权证书 页数map.put("page2", "4");// 主债权合同及抵押合同表 页数map.put("page3", "11");// 不动产登记按规定要求提供的其他材料 页数map.put("page4", "1");Iterator<String> it = form.getFields().keySet().iterator();while (it.hasNext()) {String name = it.next();// 替换模板中对应字段的值form.setField(name, map.get(name));}// true代表生成的PDF文件不可编辑stamper.setFormFlattening(true);stamper.close();Document doc = new Document();PdfCopy copy = new PdfCopy(doc, out);doc.open();PdfImportedPage importPage = copy.getImportedPage(new PdfReader(bos.toByteArray()), 1);copy.addPage(importPage);doc.close();} catch (IOException e) {e.printStackTrace();} catch (DocumentException e) {e.printStackTrace();}}public static void main(String[] args) throws Exception{System.out.println("=====================  以下是获取模板文件的路径  ========================");File directory = new File("src/main/resources/pdf");// 获取通知书模板String noticeTemplatePath = directory.getCanonicalPath() + "\\template\\受理通知书和不动产证明.pdf";System.out.println("========== noticeTemplatePath ====> " + noticeTemplatePath + "============");String newName = new SimpleDateFormat("yyyyMMdd").format(new Date()) + (int)(new Random().nextDouble() * 100000);// 生成新的文件String newPDFPath = directory.getCanonicalPath() + "\\create\\notice_" + newName + ".pdf";System.out.println("========== notice newPDFPath =====> " + newPDFPath);fillNoticeTemplate(noticeTemplatePath, newPDFPath);}
}

注意:

1  首先安装Adobe Acrobat DC。下载地址:https://pan.baidu.com/s/1BxjHtK5zAWBBsrOGZbEtdw

2  pdf模板编辑注意事项   详见 https://my.oschina.net/aijiaoer0624/blog/1921113?tdsourcetag=s_pcqq_aiomsg

自动生成PDF文件(Java通过PDF模板自动生成PDF)相关推荐

  1. java操作office和pdf文件java读取word,excel和pdf文档内容

    在平常应用程序中,对office和pdf文档进行读取数据是比较常见的功能,尤其在很多web应用程序中.所以今天我们就简单来看一下Java对word.excel.pdf文件的读取.本篇博客只是讲解简单应 ...

  2. java 生成pdf文件_Java 中HTTP响应数据生成PDF,PDF文件的读取

    将HTTP响应数据生成PDF,这一步的话,就比较坑,浪费了好多时间,查了很多资料,也是我想把它记录下来的主要原因, 废话少说,先说踩的坑 1.区分字符流.字节流 这里可以百度一下,但是简言之就是: j ...

  3. Java实现pdf转tex_使用Free Spire.PDF在Java程序中创建和转换PDF文件

    在这篇文章中,我将举例说明如何创建一个包含标题,段落,图像,编号列表和表格的简单的PDF文件,以及如何使用Free Spire.PDF将PDF转换为其他文件格式. 概述 Free Spire.PDF ...

  4. Aspose.PDF for Java系列8-转化HTML为PDF

    Aspose.PDF for Java系列8-转化HTML为PDF 转化HTML为PDF 主要分为以下步骤: 创建一个HtmlLoadOptions类. 实例化Document对象. 调用Docume ...

  5. php html转为pdf文件,php使用wkhtmltopdf实现html转pdf

    项目中有需求将html页面实时转为pdf并提供下载.经过各种查找比对,最终使用了wkhtmltopdf工具来实现. wkhtmltopdf,可以很方便的将输入的url渲染并打印成pdf文件.当然也有一 ...

  6. 电脑上怎么做pdf文件_怎么编辑pdf文件内容?什么工具可以编辑pdf?

    怎么编辑pdf文件内容?临近毕业时候,我有了报考教师资格证的想法,打算之后当老师.期间,我在网上找了很多报考教资的参考资料,不过它们大多是以pdf格式文件形式存在.有时候要往里加入.修改些内容,但我不 ...

  7. python修改pdf文件大小,python读pdf文件字体大小_用Python读取pdf文件

    #首先需要在cmd用 pip 安装pdfminer3k 如: #pip list 可以看用pip 安装的所有东西 import sys import importlib importlib.reloa ...

  8. PDF文件能编辑吗,怎么删除PDF文档中的空白页

    有时候我们接触的文件是PDF格式,到遇到文件中夹杂的有空白页面需要进行删除的时候,这个时候我们应该怎么操作呢,有些小伙伴不知道PDF文件能不能编辑,小编来告诉你,PDF文件是可以编辑的,但PDF文件的 ...

  9. 计算机加密解除,pdf文件加密怎么解除?解除加密pdf文件的教程

    原标题:pdf文件加密怎么解除?解除加密pdf文件的教程 pdf文件被加密了之后怎么解除呢?很多人为了让文件更加安全,都会给一些重要的文件加密.但是,文件如果是带有密码的话,进行转换.合并或编辑等操作 ...

  10. PDF文件有编辑权限,怎么编辑PDF文件?

    PDF文件的编辑权限,其实是PDF文件设置了限制编辑,会导致不能在打开PDF文件之后能够直接编辑PDF文件.不能粘贴复制.不能打印PDF文件等限制. 遇到这种情况,我们只需要将限制编辑取消就可以了,在 ...

最新文章

  1. 微信小程序使用阿里巴巴iconfont字体图标
  2. 图像旋转的MATLAB和OpenCV源码
  3. StackOverflow 每月5.6亿PV,但只用25台服务器
  4. 文件对比工具Beyond Compare的使用(入门)
  5. java 文件监听器_java7 文件监听器
  6. Eclipse 各种小图标的含义
  7. centos网络隔一段时间就断_潮汕青年说 | 瞎吃小哥:隔着屏幕也要把你看馋的顶配版吃货...
  8. 你与顶级架构师的差距,可能就在这个数据中台解决方案
  9. 面试4轮字节Java研发岗,最终拿下Offer(原题复盘)
  10. js清空浏览器cokie缓存_JS设置cookie,删除cookie
  11. 简单的了解下前端路由 hash 与 history 差异
  12. 深度 | 蚂蚁金服DASFAA论文带你深入了解GBDT模型
  13. unity android 不锁屏,Unity 实现Android不锁屏
  14. 【性能工具】Windows性能监控工具Perfmon使用指南
  15. 【Day_09】走方格的方案数
  16. 目标检测(四):SSD之Pytorch源码解读
  17. 双软企业两免三减半政策
  18. 超融合架构与容器超融合
  19. CentOS 7 多硬盘合并 mergerfs 磁盘合并 + Duf 磁盘容量查看
  20. 人工智能的编年史——从开始到现在

热门文章

  1. 夏季晚睡早起符合养生原则
  2. 拍照打卡签到活动到达地点拍照上传管理document.getElementById(“myP“).innerHTML=“拍照“;
  3. SQL 注释语句 (--与/*...*/)
  4. 基于 SpringBoot+Vue 的开源数据可视化分析工具
  5. SNP/单核苷酸多态性分析
  6. pycharm设置中文,字体颜色修改,设置背景图片(图文讲解)
  7. 计算机网络之无线局域网
  8. 【测试工程师】关于软件测试的10条建议
  9. 凡科小程序服务器域名,小程序支付申请及配置教程
  10. tensorflow2.0 实现MTCNN、P_net数据生成,及训练-1