java itext动态生成模板_【Java】itext根据模板生成pdf(包括图片和表格)

该博客介绍了如何使用Java的iText库,结合模板PDF文件,动态生成包含文字、图片和表格的PDF文档。通过创建字体、设置输出流、读取模板、填充表单字段、处理图片以及构建和添加表格,实现复杂内容的PDF生成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 public static void creatPdf(Mapmap,String filePath) {2 try{3 BaseFont bf = BaseFont.createFont("c://windows//fonts//simsun.ttc,1", BaseFont.IDENTITY_H,4 BaseFont.EMBEDDED);5 FileOutputStream out = new FileOutputStream(filePath);//输出流

6 PdfReader reader = new PdfReader(TemplateToWord.class.getResource("/com/cn/business/templates/report.pdf"));//读取pdf模板

7 ByteArrayOutputStream bos = newByteArrayOutputStream();8 PdfStamper stamper = newPdfStamper(reader, bos);9 stamper.setFormFlattening(true);10 AcroFields form =stamper.getAcroFields();11 //文字类的内容处理

12 Map datemap = (Map) map.get("datemap");13 form.addSubstitutionFont(bf);14 for(String key : datemap.keySet()) {15 String value =datemap.get(key);16 form.setField(key, value);17 }18 //图片类的内容处理

19 Map imgmap = (Map) map.get("imgmap");20 for(String key : imgmap.keySet()) {21 String value =imgmap.get(key);22 String imgpath =value;23 int pageNo = form.getFieldPositions(key).get(0).page;24 Rectangle signRect = form.getFieldPositions(key).get(0).position;25 float x =signRect.getLeft();26 float y =signRect.getBottom();27 //根据路径读取图片

28 Image image =Image.getInstance(imgpath);29 //获取图片页面

30 PdfContentByte under =stamper.getOverContent(pageNo);31 //图片大小自适应

32 image.scaleToFit(signRect.getWidth(), signRect.getHeight());33 //添加图片

34 image.setAbsolutePosition(x, y);35 under.addImage(image);36 }37 //表格类

38 Map>> listMap = (Map>>) map.get("list");39 for(String key : listMap.keySet()) {40 List> lists =listMap.get(key);41 int pageNo = form.getFieldPositions(key).get(0).page;42 PdfContentByte pcb =stamper.getOverContent(pageNo);43 Rectangle signRect = form.getFieldPositions(key).get(0).position;44 //表格位置

45 int column = lists.get(0).size();46 int row =lists.size();47 PdfPTable table = newPdfPTable(column);48 float tatalWidth = signRect.getRight() - signRect.getLeft() - 1;49 int size = lists.get(0).size();50 float width[] = new float[size];51 for(int i=0;i

65 for(int i=0;i list =lists.get(i);67 for(int j=0;j

80 stamper.close();81 Document doc = newDocument();82 PdfCopy copy = newPdfCopy(doc, out);83 doc.open();84 int pageNum =reader.getNumberOfPages();85 for(int i = 1;i <= pageNum;i++){86 PdfImportedPage importPage = copy.getImportedPage(newPdfReader(bos.toByteArray()), i);87 copy.addPage(importPage);88 }89 doc.close();90 } catch(IOException e) {91 System.out.println(e);92 } catch(DocumentException e) {93 System.out.println(e);94 }95

96 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值