Java实现PDF模板数据填充生成PDF

Java实现PDF模板数据填充生成PDF

一、编辑PDF模板

1.创建word文档设置好模板,导出为PDF
2.打开导出的PDF,进行表单编辑
编辑表单
添加表单域

3.设置对应位置的表单名称,用于模板数据填充
最终模板
注意:对应的图片表单域,需要设置为隐藏或者无填充颜色,不然图片会被覆盖显示不出来
隐藏图片表单域

二、获取字体

自己没有字体,可以使用电脑自带的,字体目录在:C:\Windows\Fonts,
注意版权问题,选可以使用的
在这里插入图片描述

三、Java实现

1.添加依赖,在pom.xml文件中添加pdf模板工具依赖itextpdf

 		<!-- pdf模板工具 -->
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itextpdf</artifactId>
            <version>5.5.13.3</version>
        </dependency>

2.示例代码,包括设置字体、填充文本、插入图片
注意:字体替换 注意文件后缀大写、有逗号和0

public static void main(String[] args){
        //TODO 模板替换
        String inputFileName = "/test/template/template_v1.pdf";

        FileOutputStream os = null;
        PdfStamper ps = null;
        PdfReader reader = null;
        try {
            // 1 获取文件的输出流
            os = new FileOutputStream(new File("/test/template/data.pdf"));
            // 2 读取pdf模板
            reader = new PdfReader(inputFileName);
            // 3 根据表单生成一个新的pdf
            ps = new PdfStamper(reader, os);
            // 4 获取pdf表单
            AcroFields form = ps.getAcroFields();
            // 5 给表单添加中文字体
            // TODO 字体替换 注意文件后缀大写、逗号和0
            BaseFont bf = BaseFont.createFont("/test/template/simsun.TTC,0", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
            form.addSubstitutionFont(bf);

            //6填充模板表单数据
            form.setField("name","张三");
            form.setField("phone","18977546523");
            form.setField("address","地球村北京");

            ps.setFormFlattening(true);

            // 7 填充图片到form
            PdfStamper stamper = ps;

                // 通过域名获取所在页和坐标,左下角为起点
                int pageno = form.getFieldPositions("photo").get(0).page;
                Rectangle signrect = form.getFieldPositions("photo").get(0).position;
                float x = signrect.getLeft();
                //float width = signrect.getWidth();
                float y = signrect.getBottom();
                // 读图片
                Image image = Image.getInstance("F:\\test\\template\\photo.jpg");
                //float img_width = image.getWidth();
                // 获取操作的页面
                PdfContentByte under = stamper.getOverContent(pageno);
                // 添加图片
                image.setAbsolutePosition(x, y);
                // 图片的大小
                image.scaleToFit(signrect.getWidth(), signrect.getHeight());

                under.addImage(image);



        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                ps.close();
                reader.close();
                os.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

3.输出结果如下
输出PDF结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值