easyexcel 模板填充数据_不会吧不会吧,还有开发不会Java填充PDF模板数据的,赶紧看看吧...

89ef5efbe52b680a46e3f3320afcf160.png

思路

根据业务需求,获取实际业务数据,借助itext库功能,将业务数据填充入提前制作好的PDF模板中

操作步骤

  • 制作PDF模板:提前下载好Adobe Acrobat Pro DC
  • 效果展示

准备PDF,如下图

60038f043ae2a8151756f9f5360cb396.png

编辑PDF

2652845237250f88ea76505fe0d75a6a.png

813ab0b2b21631b2de743c5ad3c5e1cf.png

b5c01e175a63006f9ec899a0587ab6a0.png

准备表单

e2f2e58d98cabc77125a1e30f665b329.png

42d1b9ad94f070b922d7056c9990f663.png

设置字体

f2fe72e88fee1b5b5bff75e0612ad57a.png

设置多行

0c0366dffc22fe3f3cdf64ee5b9711d6.png

模板表单标签

f29e192ea4f1aa7c116b1e41005f7da2.png

标签绑定具体业务数据

  • 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>

        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
        </dependency>
  • 具体实现
private ByteArrayOutputStream getYearData() {
        ClassPathResource classPathResource = new ClassPathResource("template/pdf-template.pdf");
        PdfReader reader;
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        try {
            reader = new PdfReader(classPathResource.getStream());
            bos = new ByteArrayOutputStream();
            PdfStamper stamper = new PdfStamper(reader, bos);
            AcroFields form = stamper.getAcroFields();
            Map<String, String> map = new HashMap<>();
            map.put("changeTag1", ReportConstant.CHOOSE_FLAG);
            map.put("changeTag2", ReportConstant.CHOOSE_FLAG);
            map.put("passport0", "88484695274732");
            map.put("passport1", "88484695274733");
            map.put("signDate0", DateUtil.format(new Date(), ReportConstant.DATE_FORMAT_YMS));
            map.put("signDate1", DateUtil.format(new Date(), ReportConstant.DATE_FORMAT_YMS));
            map.put("validDate0", DateUtil.format(new Date(), ReportConstant.DATE_FORMAT_YM));
            map.put("validDate1", DateUtil.format(new Date(), ReportConstant.DATE_FORMAT_YM));
            map.put("orgName0", "贤一坊科技有限公司");
            map.put("orgName1", "贤一坊科技有限公司");
            map.put("remark0", "这是一个备注,里面的内容并不是无限长");
            map.put("remark1", "这是一个备注,里面的内容并不是无限长");

            this.fillPdfCellForm(map, form);

            // true代表生成的PDF文件不可编辑
            stamper.setFormFlattening(true);
            stamper.close();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (DocumentException e) {
            e.printStackTrace();
        }

        return bos;
    }

    private void fillPdfCellForm(Map<String, String> map, AcroFields form) throws IOException, DocumentException {
        for (Map.Entry entry : map.entrySet()) {
            String key = (String) entry.getKey();
            String value = (String) entry.getValue();
            form.setField(key, value);
        }
    }

效果展示

f274daae211a4cb3c5eada9e523cdb4a.png

最后

我这里准备了一线大厂面试资料和我原创的超硬核PDF技术文档,以及我为大家精心准备的多套大厂面试题(不断更新中),需要的朋友可以关注我的公众号:前程有光,获取!希望大家都能找到心仪的工作!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值