因业务需要,做了一个通过Java组件iText生成PDF合同,运行成功了,做个记录,也分享给大家。

首先,我们需要准备好一个有文本域的pdf文件。
1.先用word做出你需要的模板,并保存。

2.通过Adobe Acrobat Pro DC软件打开:文件—创建—从文件创建PDF—选择你的word文件并等待一分钟左右。如果没有Adobe Acrobat Pro DC软件,可以去下载(Adobe Acrobat Pro DC破解版下载)。

3.点击“准备表单”—“开始”—“保存”—“确定”


4.“添加文本域”—依次添加文本域,并修改名字—点击保存。

此时,pdf文件就已经准备好了。

然后,我们就开始准备代码了。
代码参考来源:https://blog.csdn.net/u012377333/article/details/51264122
前提:在pom文件里添加项目需要的依赖:

<dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.10</version>
</dependency>
// 设置字体,防止中文乱码
<dependency><groupId>com.itextpdf</groupId><artifactId>itext-asian</artifactId><version>5.2.0</version>
</dependency>

1.根据你的pdf中需要填的字段创建实体类-Ticket

package com.ymy.model;/*@author ymy@DESCRIPTION ${DESCRIPTION}@create 2019/4/12
*/public class Ticket {Integer fileId;String productName;String name;String idCard;String tel;String address;public Ticket() {}public Ticket(Integer fileId, String productName, String name, String idCard, String tel, String address) {this.fileId = fileId;this.productName = productName;this.name = name;this.idCard = idCard;this.tel = tel;this.address = address;}public Integer getFileId() {return fileId;}public void setFileId(Integer fileId) {this.fileId = fileId;}public String getProductName() {return productName;}public void setProductName(String productName) {this.productName = productName;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getIdCard() {return idCard;}public void setIdCard(String idCard) {this.idCard = idCard;}public String getTel() {return tel;}public void setTel(String tel) {this.tel = tel;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}
}

2.创建功能类-PDFTempletTicket

package com.ymy.util;/*@author ymy@DESCRIPTION ${DESCRIPTION}@create 2019/4/12
*/import com.ymy.model.*;import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;import com.itextpdf.text.pdf.AcroFields;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;public class PDFTempletTicket {private String templatePdfPath;private String ttcPath;private String targetPdfpath;private Ticket ticket;public PDFTempletTicket() {super();}public PDFTempletTicket(String templatePdfPath, String ttcPath,String targetPdfpath, Ticket ticket) {this.templatePdfPath= templatePdfPath;this.ttcPath= ttcPath;this.targetPdfpath= targetPdfpath;this.ticket= ticket;}public void templetTicket(File file) throws Exception {PdfReader reader = new PdfReader(templatePdfPath);ByteArrayOutputStream bos = new ByteArrayOutputStream();PdfStamper ps = new PdfStamper(reader, bos);/*使用中文字体 */BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);/*BaseFont bf = BaseFont.createFont(PDFTicket.class.getResource("/") + "org/csun/ns/util/simsun.ttc,1", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);*/ArrayList<BaseFont> fontList = new ArrayList<BaseFont>();fontList.add(bf);AcroFields s = ps.getAcroFields();s.setSubstitutionFonts(fontList);s.setField("productName",ticket.getProductName());s.setField("name",ticket.getName());s.setField("idCard",ticket.getIdCard());s.setField("tel",ticket.getTel());s.setField("address",ticket.getAddress());ps.setFormFlattening(false);ps.close();FileOutputStream fos = new FileOutputStream(file);fos.write(bos.toByteArray());fos.close();}/*** @return the templatePdfPath*/public String getTemplatePdfPath() {return templatePdfPath;}/*** @param templatePdfPath the templatePdfPathto set*/public void setTemplatePdfPath(String templatePdfPath) {this.templatePdfPath= templatePdfPath;}/*** @return the ttcPath*/public String getTtcPath() {return ttcPath;}/*** @param ttcPath the ttcPath to set*/public void setTtcPath(String ttcPath) {this.ttcPath= ttcPath;}/*** @return the targetPdfpath*/public String getTargetPdfpath() {return targetPdfpath;}/*** @param targetPdfpath the targetPdfpath toset*/public void setTargetPdfpath(String targetPdfpath) {this.targetPdfpath= targetPdfpath;}/*** @return the ticket*/public Ticket getTicket() {return ticket;}/*** @param ticket the ticket to set*/public void setTicket(Ticket ticket) {this.ticket= ticket;}
}

3.测试类-TestTempletTicket

package com.ymy.util;/*@author ymy@DESCRIPTION ${DESCRIPTION}@create 2019/4/12
*/import com.ymy.model.Ticket;import java.io.File;public class TestTempletTicket {public static void main(String[] args) throws Exception {Ticket ticket = new Ticket();ticket.setProductName("产品一");ticket.setName("张三");ticket.setIdCard("411323166517786546");ticket.setTel("15723546678");ticket.setAddress("上海市浦东新区");PDFTempletTicket pdfTT = new PDFTempletTicket();pdfTT.setTemplatePdfPath("D:\\file.pdf");//你的pdf模板的位置pdfTT.setTargetPdfpath("D:\\successFile.pdf");pdfTT.setTicket(ticket);File file = new File("D:\\successFile.pdf");file.createNewFile();pdfTT.templetTicket(file);}
}

最后,运行成功出来:

通过Java组件iText生成PDF报表或合同,完成pdf上传,预览,存入数据库相关推荐

  1. JAVA微信公众号开发第8篇JSSDK图片上传预览

    简介 博主微信JSSDK&图片上传预览基于微信分享做拓展,所以一些配置操作请点击查阅JAVA微信公众号开发第7篇JSSDK&微信分享博文 页面 <html><head ...

  2. vue实战--vue+elementUI实现多文件上传+预览(word/PDF/图片/docx/doc/xlxs/txt)

    需求 最近在做vue2.0+element UI的项目中遇到了一个需求:需求是多个文件上传的同时实现文件的在线预览功能.需求图如下: 看到这个需求的时候,小栗脑袋一炸.并不知道该如何下手,之前的实践项 ...

  3. java实现文件上传预览_jsp+springmvc实现文件上传、图片上传和及时预览图片

    1.多文件上传:http://blog.csdn.net/a1314517love/article/details/24183273 2.单文件上传的简单示例:http://blog.csdn.net ...

  4. JAVA实现一个图片上传预览功能

    这个小项目主要使用java实现了一个简单的图片上传预览功能,废话不多说,先上实现成果 ^ _ ^

  5. flash 图片剪切 php,flash + php头像上传预览裁剪组件1.8发_php

    安装及部署: 1. 上传到 apache,iis,Tomcat 服务器,通过域名访问 index.html v1.8 1.优化摄像头拍照不清晰(目前支持高清) v1.7 http://www.gaod ...

  6. 钉钉小程序上传预览下载word,pdf文档等一系列问题

    钉钉小程序上传预览下载word,pdf文档等一系列问题 小程序"用完即走"的理念使得有着很好的发展市场,不仅微信小程序,支付宝,钉钉小程序等都受用户的喜爱. 刚接触了一个企业内部应 ...

  7. java 生成pdf itext_使用Java组件itext 生成pdf介绍

    iText是一个能够快速产生PDF文件的Java类库.iText的java类对于那些要产生包含文本,表格,图形的只读文档是很有用的.它的类库尤其与java Servlet有很好的给合.使用iText与 ...

  8. java itext 设计器_使用Java组件itext 生成pdf的介绍

    [IT168 技术]iText是一个能够快速产生PDF文件的java类库.iText的java类对于那些要产生包含文本,表格,图形的只读文档是很有用的.它的类库尤其与java Servlet有很好的给 ...

  9. java后台图片的上传预览接口 IO流

    上传图片接口    图片保存到服务器(适用于任何文件) /** * 上传医生照片 * @param request * @return * @throws Exception * @throws IO ...

最新文章

  1. 应用TP3.2.3的一些小问题(一)
  2. 解决神州数码校园上网客服端软件不能在Windows 7 (5956版)安装的问题
  3. aapt2 资源 compile 过程
  4. Java14来了!Switch竟如此简单?Lombok也不需要了?来用Idea搭建Java14吧!
  5. oracle sqe值,质量感悟 | 无论什么层次的供应商都喜欢跟SQE中的高手过招儿
  6. ios 横竖屏切换总结
  7. mysql数据表中取几列_MySQL查询数据表中数据记录(包括多表查询)
  8. 和我一起学CSLA.NET----创建业务对象2
  9. Android高效率编码-第三方SDK详解系列(三)——JPush推送牵扯出来的江湖恩怨,XMPP实现推送,自定义客户端推送...
  10. Atitit 多继承实现解决方案 java c#
  11. linux的视频格式转换软件,工具盘点:必备的Linux视频转换工具(1)
  12. 计算机桌面维护介绍,电脑桌面基础知识介绍
  13. ntdll.dll 0xc0000005
  14. linux主机独立显卡切换,Linux Deepin 2013 设置双显卡之关闭独显
  15. Staking八月排行榜 | TokenInsight
  16. Halcon20算子中文解释
  17. “术业有专攻”和“功夫在行外”--笑来
  18. 被iPhone4电死空姐丈夫回应:充电器是原装
  19. python 将变量保存到文件里
  20. LDPC码Gallager论文解读

热门文章

  1. 智工教育:临聘教师的工作待遇好吗?
  2. GoodSync文件同步工具,亲测可用。
  3. 【20200705】CISA考题练习
  4. java取模_Java 中的取模和取余
  5. 自备ACM模板 —— 其他技巧
  6. 一个优秀的品牌名至少应做到这四个联想
  7. 网页调用服务器视频代码,PPVOD视频系统调用视频地址播放的两种方式
  8. 226. 翻转二叉树【58】
  9. 烧烤店小程序线上开店的步骤
  10. 蘑菇街2019届校招-测试类笔试题