使用iTextPdf为Pdf模板填充表单项 |
您所在的位置:网站首页 › 表单如何制作模板 › 使用iTextPdf为Pdf模板填充表单项 |
说明
日常开发中,通常会有动态填充Pdf表单的需求,程序可根据用户的输入或后台数据库的内容,动态、批量向Pdf模板中填充内容。 这里简单介绍一下Pdf模板的制作,以及通过iTextPdf组件给pdf Form表单进行内容填充。 Pdf模板制作 1、word中制作表格使用Office word 或 WPS word,制作出一个表格,通过表格底色,颜色、字体设置、对齐等方式美化一下表格。 效果图如下: 可以使用WPS的另存为功能,将word导出为pdf文件 导出完的pdf文件,效果如下: 使用 “Adobe Acrobat DC” 软件,对已经生成的pdf文件进行表单项默认文本的替换。
iText(公司网址:https://itextpdf.com/en)是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。 项目要使用iText,必须引入jar包才能使用,maven依赖如下: com.itextpdf itextpdf 5.5.10 com.itextpdf itext-asian 5.2.0 org.bouncycastle bcprov-jdk15on 1.54GenerateResumePDF.java代码清单: package com.david.pdf; import com.itextpdf.text.Document; import com.itextpdf.text.pdf.*; import java.io.ByteArrayOutputStream; import java.io.FileOutputStream; import java.util.HashMap; import java.util.Map; public class GenerateResumePDF { public static void resumeGenerate(Map paramsMap) { String templatePath = "C:\\Users\\user\\Desktop\\pdf_template\\test-output-2.pdf"; String outputPDFPath = "C:\\Users\\user\\Desktop\\pdf_template\\" + paramsMap.get("name") + "-" + paramsMap.get("phone") + ".pdf"; PdfReader reader; FileOutputStream out; ByteArrayOutputStream bos; PdfStamper stamper; try { out = new FileOutputStream(outputPDFPath); reader = new PdfReader(templatePath); bos = new ByteArrayOutputStream(); stamper = new PdfStamper(reader, bos); AcroFields form = stamper.getAcroFields(); //获取pdf上的表单集合,如name/phone //给表单添加中文字体 BaseFont baseFont = BaseFont.createFont("C:\\Windows\\Fonts\\simsun.ttc,0", BaseFont.IDENTITY_H, BaseFont.EMBEDDED); form.addSubstitutionFont(baseFont); //遍历map插入数据 for (Map.Entry entry : paramsMap.entrySet()) { form.setField(entry.getKey(), entry.getValue()); System.out.println(String.format("插入PDF数据---> key=%13s, value=%5s", entry.getKey(), entry.getValue())); } //如果设置为false,那么生成的文件还能编辑,一般都需要设置为false stamper.setFormFlattening(true); stamper.close(); //文档对象,包括header、footer、page信息、和页面元数据信息 Document doc = new Document(); //Make copies of PDF documents. Documents can be edited after reading and before writing them out. PdfCopy copy = new PdfCopy(doc, out); //文档打开,等待写入 doc.open(); //待写入的页面 PdfImportedPage importedPage = copy.getImportedPage(new PdfReader(bos.toByteArray()), 1); //添加页面 copy.addPage(importedPage); doc.close(); } catch (Exception e) { e.printStackTrace(); } finally { } } public static void main(String[] args) { Map map = new HashMap(); map.put("name", "david"); map.put("age", "30"); map.put("gender", "男"); map.put("phone", "13666666666"); map.put("email", "[email protected]"); map.put("marriage", "未婚"); map.put("jobyear", "2"); map.put("education", "博士"); map.put("location", "墨尔本"); System.out.println("map = " + map); resumeGenerate(map); } }经过代码填充表单的pdf文件,效果如下图所示: |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |