博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Java】itext根据模板生成pdf(包括图片和表格)
阅读量:7124 次
发布时间:2019-06-28

本文共 4065 字,大约阅读时间需要 13 分钟。

1、导入需要的jar包:itext-asian-5.2.0.jar itextpdf-5.5.11.jar。

2、新建word文档,创建模板,将文件另存为pdf,并用Adobe Acrobat DC打开编辑,点击右侧【准备表单】后点击【开始】

3、在需要插入数据的空白处,右击,点击【文本域】,将文本域拖放到你想要的位置,更改域名称为你传入的变量名。

4、保存文件,将文件放到项目中。生成pdf代码如下:

1 public static void creatPdf(Map
map,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 = new ByteArrayOutputStream(); 8 PdfStamper stamper = new PdfStamper(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 = new PdfPTable(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
list = lists.get(i);67 for(int j=0;j
<= pageNum;i++){86 PdfImportedPage importPage = copy.getImportedPage(new PdfReader(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 }
View Code

 

参数:

1 //文字类 2 Map
dataMap = new HashMap
(); 3 dataMap.put("title", title+time); 4 5 //图片 6 String knowImgPath = "D:\\upload\\report\\knowImg.png"; 7 Map
imgMap = new HashMap
(); 8 imgMap.put("knowImg", knowImgPath); 9 10 //表格 一行数据是一个list11 List
list = new ArrayList
();12 list.add("日期");13 list.add("金额");14 15 List
list2 = new ArrayList
();16 list2.add("2018-01-01");17 list2.add("100");18 19 List
> List = new ArrayList
>();20 List.add(list);21 List.add(list2);22 23 Map
>> listMap = new HashMap
>>();24 listMap.put("eventList", List);25 26 Map
o = new HashMap
();27 o.put("datemap", dataMap);28 o.put("imgmap", imgMap);29 o.put("list", listMap);30 31 String knowImgPath = "D:\\upload\\report\\report.pdf";32 creatPdf(o,filePath);
View Code

 

转载于:https://www.cnblogs.com/duoduo-727/p/9367175.html

你可能感兴趣的文章
2019年自动驾驶5大趋势预测:第一台Level 5 无人车问世
查看>>
后APP时代的破局之路 :阿里技术“三大容器五大方案”亮相,百川开放全面升级...
查看>>
工欲善其事-必先利其器之终端
查看>>
64位的Mac OS X也有Windows.Forms了
查看>>
立下“去O”Flag的AWS,悄悄修炼了哪些内功?
查看>>
Better Software East/DevOps East/Agile Dev East 2016大会上的教程介绍
查看>>
优酷在多模态内容理解上的研究及应用
查看>>
JavaScript学习笔记整理:对象篇
查看>>
GitHub的bug赏金计划升级:奖金提高到3万美元以上
查看>>
中国法院裁定:禁售部分型号苹果手机
查看>>
使用实体框架、Dapper和Chain的仓储模式实现策略
查看>>
HTTP/2推送之难,远超想象
查看>>
与Bob McWhirter的问答:WildFly Swarm更名为Thorntail项目
查看>>
新书问答:Agile Management
查看>>
在sublime中实现代码检测
查看>>
活在伟大的Scrum团队是什么感觉
查看>>
Swift 5进入发布倒计时
查看>>
一套代码称霸5大端口,移动金融应用还能这样开发?
查看>>
MIT开发Polaris,使网页载入加快34%
查看>>
微软对macOS和Linux开放量子开发工具集
查看>>