您的位置 首页 java

Java基于itext实现pdf模板填充

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.Pdf reader ;
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("13800000000").build();
        createPdf(leave, "test-demo/data/template.pdf", "test-demo/data/张三的请假条.pdf");
    }
}  

最终效果

效果图

文章来源:智云一二三科技

文章标题:Java基于itext实现pdf模板填充

文章地址:https://www.zhihuclub.com/189561.shtml

关于作者: 智云科技

热门文章

网站地图