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

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<String, Object> 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<String, String> datemap = (Map<String, String>) 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<String, String> imgmap = (Map<String, String>) 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<String, List<List<String>>> listMap =  (Map<String, List<List<String>>>) map.get("list");
39             for (String key : listMap.keySet()) {
40                 List<List<String>> 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<size;i++){
52                     if(i==0){
53                         width[i]=60f;
54                     }else{
55                         width[i]=(tatalWidth-60)/(size-1);
56                     }
57                 }
58                 table.setTotalWidth(width);
59                 table.setLockedWidth(true);
60                 table.setKeepTogether(true);
61                 table.setSplitLate(false);
62                 table.setSplitRows(true);
63                 Font FontProve = new Font(bf, 10, 0);
64                 //表格数据填写
65                 for(int i=0;i<row;i++){
66                     List<String> list = lists.get(i);
67                     for(int j=0;j<column;j++){
68                         Paragraph paragraph = new Paragraph(String.valueOf(list.get(j)), FontProve);
69                         PdfPCell cell = new PdfPCell(paragraph);
70                         cell.setBorderWidth(1);
71                         cell.setVerticalAlignment(Element.ALIGN_CENTER);
72                         cell.setHorizontalAlignment(Element.ALIGN_CENTER);
73                         cell.setLeading(0, (float) 1.4);
74                         table.addCell(cell);
75                     }
76                 }
77                 table.writeSelectedRows(0, -1, signRect.getLeft(), signRect.getTop(), pcb);
78             }
79             stamper.setFormFlattening(true);// 如果为false,生成的PDF文件可以编辑,如果为true,生成的PDF文件不可以编辑
80             stamper.close();
81             Document doc = new Document();
82             PdfCopy copy = new PdfCopy(doc, out);
83             doc.open();
84             int pageNum = reader.getNumberOfPages();
85              for(int i = 1;i <= 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     }

参数:

 1 //文字类
 2 Map<String, String> dataMap = new HashMap<String, String>();
 3 dataMap.put("title", title+time);
 4
 5 //图片
 6 String knowImgPath = "D:\\upload\\report\\knowImg.png";
 7 Map<String, String> imgMap = new HashMap<String, String>();
 8 imgMap.put("knowImg", knowImgPath);
 9
10 //表格 一行数据是一个list
11 List<String> list = new ArrayList<String>();
12 list.add("日期");
13 list.add("金额");
14
15 List<String> list2 = new ArrayList<String>();
16 list2.add("2018-01-01");
17 list2.add("100");
18
19 List<List<String>> List = new ArrayList<List<String>>();
20 List.add(list);
21 List.add(list2);
22
23 Map<String, List<List<String>>> listMap = new HashMap<String, List<List<String>>>();
24 listMap.put("eventList", List);
25
26 Map<String, Object> o = new HashMap<String, Object>();
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);

原文地址:https://www.cnblogs.com/duoduo-727/p/9367175.html

时间: 2024-08-28 00:03:45

【Java】itext根据模板生成pdf(包括图片和表格)的相关文章

poi生成excel和itext、jasperResport生成pdf

1.Poi生成excel 1)创建HSSFWorkbook对象 HSSFWorkbook hssfWorkbook = new HSSFWorkbook(); HSSFSheet sheet = hssfWorkbook.createSheet("运单数据"); 2)设置表头: HSSFRow headRow = sheet.createRow(0); headRow.createCell(0).setCellValue("运单号"); headRow.create

java 处理word文档 (含图片,表格内容)

由于本人长期从事Oa相关项目的开发,所以处理word文档,Pdf,Excel等是在所难免的. 1.需求      处理Excel 可以用jxl        或者poi 2需求     用户在系统上填写信息,保存后导出标准的word文档,用户在系统上填写的信息我们用富文本编辑工具kindEditor,这个插件可以将用户从word文档拷贝的表格标签保存,但是图片信息需要另行上传. 现在问题出来了,我们要将这些包含图片,表格,特殊符号的东东生成word文档. 如果是单纯的没有特殊格字符,图片等信息,

[转]C#操作word模板插入文字、图片及表格详细步骤

c#操作word模板插入文字.图片及表格 1.建立word模板文件 person.dot用书签 标示相关字段的填充位置 2.建立web应用程序 加入Microsoft.Office.Interop.Word引用具体添加引用请参看http://www.microsoft.com/china/msdn/library/office/office/OfficePrIntopAssFAQ.mspx?mfr=true 3.相关示例代码 protected void CreateReport_Click(o

Java iText使用PDF模板生成PDF文档

我们系统需要生成一个可以打印的PDF文档,老板给了我一个Word文档,按照这个Word文档的格式生成PDF文档. 第一步:下载AdobeAcrobat DC,必须使用这个来制作from域. 第二步:使用AdobeAcrobat DC将Word导成PDF文档. 第三步:由于还要加水印的效果,所以还是使用AdobeAcrobat DC来添加水印,非常方便: 添加水印的方法:使用AdobeAcrobat DC打开PDF文档,"工具"->"编辑PDF"->&qu

java itextpdf使用HTML模板生成pdf文件,并设置table

我们这里是maven项目,导入相应jar包: <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.23</version> </dependency> <dependency> <groupId>com.itextpdf</groupId>

java根据模板生成PDF

首先你的制作一个pdf模板: 1.先用word做出模板界面 画单元格的时候需要考虑值的长度,像这里的状态可能会很长 2.文件另存为pdf格式文件 使用福昕PDF 打开,添加文本,以及需要添加值的地方,设置文本域,这个就是属性值 保存以后会生成PDF封面,需要去掉. 在线分封PDF https://smallpdf.com/cn/result#r=1d5e4fbd858366eb5e4abe33a71ba648&t=split 代码 @GetMapping("/downOrderDashb

itextsharp利用模板生成pdf文件笔记

iTextSharp是一款开源的PDF操作类库,使用它可以快速的创建PDF文件. 中文参考网站:http://hardrock.cnblogs.com/ http://pdfhome.hope.com.cn/Article.aspx?CID=bf51a5b6-78a5-4fa3-9310-16e04aee8c78&AID=f5fe52dd-8419-4baa-ab1c-ea3f26952132 英文参考网站:http://itext.ugent.be/library/ ·  技术文章(http:

java通过word模板生成word文档

介绍 上次公司项目需要一个生成word文档的功能,有固定的模板根据业务填充数据即可,由于从来没做过,项目也比较着急于是去网上找有没有合适的工具类,找了好几种,看到其中有freeMark模板生成比较靠谱于是采用这个,正常生成成功了还挺高兴的于是修改优化部署测试,出问题了,由于我一直使用wps可以正常打开,但是同事使用office打不开,于是各种查找原因都没好,于是只能转变思路又试了两种还是不好用,直到发现这款模板生成 poi-tl 真的做的很不错,而且是国人写的,关于学习这个东西还是看官方文档的好

Java生成PDF文档(表格、列表、添加图片等)

需要的两个包及下载地址: (1)iText.jar:http://download.csdn.net/source/296416 (2)iTextAsian.jar(用来进行中文的转换):http://download.csdn.net/source/172399 代码如下: 1 import java.awt.Color; 2 import java.io.FileOutputStream; 3 import com.lowagie.text.Cell; 4 import com.lowagi