用adobe abstract 制作pdf模板的方法,先创建pdf,打开,添加表单,设置各表单域的名字,字号大小。
然后通过itext来根据模板生成pdf。
package com.yf.demomaven; import java.io.ByteArrayOutputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.HashMap; import java.util.Map; import com.itextpdf.text.Document; import com.itextpdf.text.DocumentException; import com.itextpdf.text.Font; import com.itextpdf.text.Image; import com.itextpdf.text.Rectangle; import com.itextpdf.text.pdf.AcroFields; import com.itextpdf.text.pdf.BaseFont; import com.itextpdf.text.pdf.PdfContentByte; import com.itextpdf.text.pdf.PdfCopy; import com.itextpdf.text.pdf.PdfImportedPage; import com.itextpdf.text.pdf.PdfReader; import com.itextpdf.text.pdf.PdfStamper; /** * */ public class PdfUtils { // 利用模板生成pdf public static void pdfout(Mapo) { // 模板路径 String templatePath = "d:/tmp/test.pdf"; // 生成的新文件路径 String newPDFPath = "d:/tmp/testout.pdf"; PdfReader reader; FileOutputStream out; ByteArrayOutputStream bos; PdfStamper stamper; try { BaseFont bf= BaseFont.createFont("c:/windows/fonts/simsun.ttc,1", //注意这里有一个,1 BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); // Font font = new Font(bf,12); out = new FileOutputStream(newPDFPath);// 输出流 reader = new PdfReader(templatePath);// 读取pdf模板 bos = new ByteArrayOutputStream(); stamper = new PdfStamper(reader, bos); AcroFields form = stamper.getAcroFields(); //文字类的内容处理 Map datemap = o; form.addSubstitutionFont(bf); for(String key : datemap.keySet()){ String value = datemap.get(key); form.setFieldProperty(key, "textfont", bf, null); form.setField(key,value); System.out.println(key+":"+value); } stamper.setFormFlattening(true);// 如果为false,生成的PDF文件可以编辑,如果为true,生成的PDF文件不可以编辑 stamper.close(); Document doc = new Document(); //Font font = new Font(bf, 32); PdfCopy copy = new PdfCopy(doc, out); doc.open(); PdfImportedPage importPage = copy.getImportedPage(new PdfReader(bos.toByteArray()), 1); copy.addPage(importPage); doc.close(); out.flush(); out.close(); } catch (IOException e) { System.out.println("io"); System.out.println(e); } catch (DocumentException e) { System.out.println(e); } } public static void main(String[] args) { Map root = new HashMap (); root.put("uname", "张三千"); root.put("contractNo", "X111111111"); root.put("money", "20000"); root.put("beginDate", "2018年8月24日"); root.put("endDate", "2018年9月24日"); root.put("fee", "200"); root.put("profitPayed", "600"); root.put("profitReal", "500"); root.put("refund", "100"); pdfout(root); } }