Java PDF模板套打

        套打之前需要先利用Adobe Acrobat Pro DC先做出要打印证书的模板,举例如下图,为对应的文本框赋予名称(ID),后续可在Java程序中根据ID给对应的文本框赋值(模板可存在Img头像,本文忽略)。模板制作完毕后,将xxx.pdf文件拷贝至项目路径下。项目需引用itextpdf-5.5.5.jar处理pdf

 套打方法类中加载此pdf模板文件:

URL templateFile = this.getClass().getResource("/pdftemplate/xxx.pdf");
根据具体业务获取套打的数据,并写入对应的Map中,Map的key即为pdf中的文本ID

Map<Object, Object> datamap = new HashMap<Object, Object>();
datamap.put("KS_XM", your data);
datamap.put("XB_MC", your data);
datamap.put("KS_SFZ", your data);
 然后交由套打公共类处理,处理完毕浏览器下载。

OutputStream os = response.getOutputStream();
FileInputStream inputStream = null;
inputStream = new FileInputStream(templateFile.getFile());
boolean result = createPdfFromTemplateMy(inputStream, os,datamap);
inputStream.close();
os.close();
套打公共类源码如下:

private Boolean createPdfFromTemplateMy(InputStream templateFile, OutputStream targetFile, Map<Object, Object> fieldMap){
        Boolean retValue = false;
        PdfReader reader = null;
        PdfWriter writer = null;
        try {
            /* 打开已经定义好字段以后的pdf模板 */
            reader = new PdfReader(templateFile);
            writer = new PdfWriter(targetFile);
            PdfFont font = PdfFontFactory.createFont(PdfUtil.FONT_FANGSONG_URL, PdfEncodings.IDENTITY_H, true);
            PdfDocument pdfDocument = new PdfDocument(reader, writer);// 创建pdfDocument的对象与Writer的对象关联
            PdfAcroForm form = PdfAcroForm.getAcroForm(pdfDocument, true);
            Map<String, PdfFormField> formFields = form.getFormFields();
            for (Object key : fieldMap.keySet()) {
                String value = (checkStr(fieldMap.get(key))).trim();
                PdfFormField field = formFields.get(key);
                if (field == null)
                    continue;
                if (field instanceof PdfTextFormField) {
                    field.setFont(font);        
                }
                field.setValue(value);
            }
            form.flattenFields();
            pdfDocument.close();
            retValue = true;
        } catch (IOException ioe) {
            System.err.println(ioe.getMessage());
        } finally {
            try {
                reader.close();
                writer.close();
            } catch (Exception e) {
            }
        }
        return retValue;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值