通过Java组件iText生成PDF报表或合同,完成pdf上传,预览,存入数据库
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了通过Java组件iText生成PDF报表或合同,完成pdf上传,预览,存入数据库,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5254字,纯文字阅读大概需要8分钟。
内容图文
![通过Java组件iText生成PDF报表或合同,完成pdf上传,预览,存入数据库](/upload/InfoBanner/zyjiaocheng/914/65d4afe243844dfdb42c95cde249bfc6.jpg)
因业务需要,做了一个通过Java组件iText生成PDF合同,运行成功了,做个记录,也分享给大家。
首先,我们需要准备好一个有文本域的pdf文件。
1.先用word做出你需要的模板,并保存。
2.通过Adobe Acrobat Pro DC软件打开:文件---创建---从文件创建PDF---选择你的word文件并等待一分钟左右。如果没有Adobe Acrobat Pro DC软件,可以去下载(http://www.xue51.com/soft/4070.html#xzdz)。
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上传,预览,存入数据库全部内容,希望文章能够帮你解决通过Java组件iText生成PDF报表或合同,完成pdf上传,预览,存入数据库所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。