Java基于itext实现pdf模板填充

Java基于itext实现pdf模板填充Itext简介iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库。通过iText不仅可以生成

大家好,欢迎来到IT知识分享网。

Itext简介

iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。 iText的安装非常方便,下载iText.jar文件后,只需要在系统的CLASSPATH中加入iText.jar的路径,在程序中就可以使用iText类库了。

准备工作

第一步,使用Word编辑一个模板(template.docx),然后另存为PDF文件(template.pdf)

Java基于itext实现pdf模板填充

word模板

第二步,使用pdf编辑工具(Adobe Acrobat Pro)打开template.pdf,点击准备表单,增加变量文本域

Java基于itext实现pdf模板填充

编辑pdf模板

这样一个pdf模板就准备好了

功能实现

  • 添加maven依赖,本教程基于Itext5实现
 <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>
  • 创建实体类
@Data @NoArgsConstructor @AllArgsConstructor @Builder static class Leave { private String name; private String year; private String month; private String day; private String reason; private String beginDate; private String endDate; private String phone; }
  • 创建工具类
import com.itextpdf.text.pdf.AcroFields; import com.itextpdf.text.pdf.PdfReader; import com.itextpdf.text.pdf.PdfStamper; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import java.beans.PropertyDescriptor; import java.io.File; import java.io.FileOutputStream; import java.lang.reflect.Field; public class ReflectPdfUtil { public static <T> void createPdf(T t, String templatePath, String targetPath) throws Exception { PdfReader reader = null; PdfStamper stamp = null; try { reader = new PdfReader(templatePath); if (!new File(templatePath).exists()) new File(templatePath).mkdirs(); Integer index = targetPath.lastIndexOf("/"); String filename = targetPath.substring(index + 1); String filepath = targetPath.substring(0, index); File deskFile = new File(filepath, filename); stamp = new PdfStamper(reader, new FileOutputStream(deskFile)); AcroFields form = stamp.getAcroFields(); Field[] declaredFields = t.getClass().getDeclaredFields(); for (Field field:declaredFields) { String fieldName = field.getName(); PropertyDescriptor descriptor = new PropertyDescriptor(fieldName, t.getClass()); form.setField(fieldName, descriptor.getReadMethod().invoke(t).toString()); } stamp.setFormFlattening(true); } catch (Exception e) { e.printStackTrace(); } finally { if (stamp != null) { stamp.close(); } if (reader != null) { reader.close(); } } } } 
  • 创建测试类
public class Test { public static void main(String[] args) throws Exception { Leave leave = Leave.builder().name("张三").year("2021").month("03").day("10").reason("身体不适").beginDate("2021-03-11").endDate("2021-03-12").phone("").build(); createPdf(leave, "test-demo/data/template.pdf", "test-demo/data/张三的请假条.pdf"); } }

最终效果

Java基于itext实现pdf模板填充

效果图

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/54062.html

(0)
上一篇 2024-08-01 18:33
下一篇 2024-08-02 16:00

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信