java根据模板生成pdf
Posted 一颗小树苗
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java根据模板生成pdf相关的知识,希望对你有一定的参考价值。
一、创建word模板。 word模板如图:
二、将word模板转pdf模板。
三、用Adobe Acrobat Pro打开pdf模板。
四、编辑模板域,即要填写的内容。
点击表单选择添加或编辑域选项:
双击可以 修改域的变量名及样式字体的设置。
然后保存这样pdf的模板就生成了。
六、添加mawen引用:
<dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.4.3</version> </dependency>
七、生成代码:
public static void pdfout(Map<String,Object> o) { // 模板路径 String templatePath = "D:/模板1.pdf"; // 生成的新文件路径 String newPDFPath = "D:/test.pdf"; PdfReader reader; FileOutputStream out; ByteArrayOutputStream bos; PdfStamper stamper; try { BaseFont bf = BaseFont.createFont("c://windows//fonts//simsun.ttc,1" , BaseFont.IDENTITY_H, BaseFont.EMBEDDED); Font FontChinese = new Font(bf, 5, Font.NORMAL); out = new FileOutputStream(newPDFPath);// 输出流 reader = new PdfReader(templatePath);// 读取pdf模板 bos = new ByteArrayOutputStream(); stamper = new PdfStamper(reader, bos); AcroFields form = stamper.getAcroFields(); //文字类的内容处理 Map<String,String> datemap = (Map<String,String>)o.get("datemap"); form.addSubstitutionFont(bf); for(String key : datemap.keySet()){ String value = datemap.get(key); form.setField(key,value); } //图片类的内容处理 Map<String,String> imgmap = (Map<String,String>)o.get("imgmap"); for(String key : imgmap.keySet()) { String value = imgmap.get(key); String imgpath = value; int pageNo = form.getFieldPositions(key).get(0).page; Rectangle signRect = form.getFieldPositions(key).get(0).position; float x = signRect.getLeft(); float y = signRect.getBottom(); //根据路径读取图片 Image image = Image.getInstance(imgpath); //获取图片页面 PdfContentByte under = stamper.getOverContent(pageNo); //图片大小自适应 image.scaleToFit(signRect.getWidth(), signRect.getHeight()); //添加图片 image.setAbsolutePosition(x, y); under.addImage(image); } 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(); } catch (IOException e) { System.out.println(e); } catch (DocumentException e) { System.out.println(e); } }
代码测试:
public static void main(String[] args) { Map<String,String> map = new HashMap(); map.put("Name","张三"); map.put("Code","2565"); map.put("Number","123456789"); Map<String,String> map2 = new HashMap(); map2.put("img","d:/Spring.jpg"); Map<String,Object> o=new HashMap(); o.put("datemap",map); o.put("imgmap",map2); pdfout(o); }
以上是关于java根据模板生成pdf的主要内容,如果未能解决你的问题,请参考以下文章