不會吧不會吧,還有開發不會Java填充PDF模板數據的,趕緊看看吧


思路

根據業務需求,獲取實際業務數據,借助itext庫功能,將業務數據填充入提前制作好的PDF模板中

操作步驟

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

准備PDF,如下圖

編輯PDF

在

准備表單

設置字體

設置多行

模板表單標簽

標簽綁定具體業務數據

  • 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);
        }
    }

效果展示

最后

我這里准備了一線大廠面試資料和我原創的超硬核PDF技術文檔,以及我為大家精心准備的多套大廠面試題(不斷更新中),需要的朋友可以關注我的公眾號:前程有光,獲取!希望大家都能找到心儀的工作!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM