一、需求:将数据,以表格形式输出PDF
二、方法:利用itext 操作pdf模板
三、资源:Adobe Acrobat Pro 、itextpdf-5.5.3 、itext-asian.jar
四、操作
1.制作pdf模板,在word文档中画出你想要输出的表格、
打开Adobe Acrobat Pro——》选择“创建PDF表单”——》选择源:(PDF、Word、Excel或其它文件类型),下一步 ——》定位Word文件路径,下一步——》点击"工具"-"表单"-"编辑" 可编辑表单字段名称位置
2.部分代码:
===================================================================================
String fpath = this.getServletContext().getRealPath("cm/tp")+File.separator; //模板路径,自己改 PdfReader reader = new PdfReader(fpath+"model.pdf"); //设计好的pdf模板 PdfStamper ps = new PdfStamper(reader, response.getOutputStream()); AcroFields fields = ps.getAcroFields(); fillData(fields, bm2map(po),fpath); // bm2map()是一个方法,返回值为Map,po是一个类对象,将模板 中的key和value组合成map,key为模板中字段域的名字,value为要输出的值 /** 下面是处理图片,获得图片抽点,绝对位置输出到pdf模板中**/ String img_uri = po.getImgUri(); if(img_uri!=null && !img_uri.trim().equals("")){ String fimg = uploadServlet.getBindPath(img_uri); File fs = uploadServlet.getFnBySize(new File(fimg),600); if(fs!=null){ Image gif = Image.getInstance(fs.getPath()); gif.setAbsolutePosition(450, 200); gif.scaleToFit(300, 300); PdfContentByte over = ps.getOverContent(2); over.addImage(gif,true); } } ps.setFormFlattening(true); ps.getWriter().flush(); ps.close();
====================================================================================
public static void fillData(AcroFields fields, Map<String, String> data,String fpath) throws IOException, DocumentException { BaseFont bfChinese = BaseFont.createFont(fpath+"simfang.ttf",BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED); //引用了simfang.ttf字体 for (String key : data.keySet()) { String value = data.get(key); fields.setFieldProperty(key, "textfont", bfChinese, //BaseFont.createFont() , null); fields.setField(key, value); } }
================================组合模板键值对的方=================================
public Map<String, String> bm2map(Bm bm) { Map<String, String> data = new HashMap<String, String>(); data.put("bh",bm.getBh()); data.put("lbCplb",bm.getLbCplb()); data.put("ysd", bm.getYsd()); data.put("jb",bm.getJb()); SimpleDateFormat sf=new SimpleDateFormat("yyyy-MM-dd"); if(bm.getGlRcrq()!=null) data.put("rgrq", sf.format(bm.getGlRcrq()).toString()); data.put("mc",bm.getMc()); data.put("ymc",bm.getMcYmc()); data.put("mz",bm.getMz()); data.put("nd",bm.getNdSd()); data.put("zd",bm.getZd()); if(bm.getSlCtsl()!=null) data.put("sl",bm.getSlCtsl()+"件"); data.put("wccd",bm.getWcCd()); data.put("zl",bm.getCc()); data.put("bz",bm.getBz()); data.put("tkr",bm.getTkr()); if(bm.getDtCreate()!=null) data.put("tkrq",sf.format(bm.getDtCreate()).toString()); data.put("imgUri", ""); data.put("js",bm.getMsJs()); return data; }
五、不足:
1.PDF模板输出中会遇到部分常用字符包括中文无法显示,尝试设置不同字体,利用itext-asign各种版本字体,但还是没能完全解决,于是引入simfang.ttf字体,可显示全部中文,但缺点是,pdf的体积会变大。不知是否有更好的办法~以及其他方式的模板输出~
说明:此文章为自己的小总结,代码来源于网上各种大牛的文章~
相关推荐
模板方法通常涉及到预先设计好的PDF模板,其中可能包含占位符,然后在运行时替换这些占位符以填充实际数据。例如,可以创建一个包含表格、段落、图片的模板PDF,然后用实际的数据替换模板中的占位符字段。 以下是一...
5. **模板和表单**:iTextPDF支持在PDF模板上填充数据,这对于批量生成相似文档非常有用。同时,它还提供了处理Acrobat表单的能力,包括填写、读取和删除表单字段。 6. **PDF/A兼容性**:PDF/A是一种标准化的PDF...
首先,你需要加载带有表单的PDF模板,然后使用`AcroFields`类来访问和修改表单字段。 ```java PdfReader reader = new PdfReader("template.pdf"); AcroFields fields = reader.getAcroFields(); fields.set...
在将HTML转换为PDF的场景中,FreeMarker可以用来处理HTML模板,填充数据并生成最终的HTML内容,然后由iTextPDF将其转化为PDF。 4. jfinal-2.0.jar:JFinal是一个基于Java的轻量级Web框架,它简化了Web应用的开发...
需要注意的是,iTextPDF库还有许多高级特性,如版面布局、模板、PDF/A合规性等,这些都需要根据具体需求进行学习和应用。此外,随着版本更新,iTextPDF引入了更多的模块,如iTextPDF的PDFHTML模块,可以将HTML转换为...
文件`TestPdf`可能是测试用的PDF模板或者生成的PDF输出。为了进一步理解这个过程,可以打开这个文件查看其结构,或者用iText的API进行分析。 总的来说,Java结合iText实现从数据库导出数据到PDF模板涉及了数据库...
添加模板 添加文本内容 设置文本字体 设置文本字体大小 设置字体颜色 设置表单域颜色 组件方法调用: addTempl(String templKey,String templFileName),注册一个模板文件; addText(String templKey,String key,...
1. iText主库:`itextpdf-版本号.jar` - 这是iText的核心库,包含了生成PDF的所有基本功能。 2. Bouncy Castle库:`bcprov-jdk15on-版本号.jar` - iText在处理加密和数字签名时依赖Bouncy Castle库,因此需要将其...
iReport提供了一个可视化的报表设计界面,用户可以通过拖放操作创建复杂的报表布局,然后结合iText生成PDF输出。它支持SQL查询、数据集、参数、子报表等功能,使得非程序员也能轻松设计报表。 在实际开发中,这四个...
<artifactId>itextpdf <version>5.5.13 ``` 接下来,我们需要一个HTML页面作为PDF的源内容。你可以使用任何你喜欢的方式(如Thymeleaf或Freemarker)来创建HTML,然后使用iText的HTML-to-PDF转换功能将其转换为...
iText 是一个强大的 Java 类库,专为生成和编辑PDF文档而设计。它以其灵活性和易用性在开发社区中广受欢迎。通过iText,开发者可以轻松创建包含文本、图像、表格等各种元素的PDF文件。以下是一些关于如何使用iText...
这篇博客 "freemarker+itext生成PDF" 可能详细介绍了如何结合这两者来生成PDF文件,这在报表生成、发票打印或任何需要静态化输出的场景中非常有用。 首先,让我们了解FreeMarker。FreeMarker是一个基于模板的语言,...
在IT行业中,iText是一个广泛使用的Java和.NET库,用于创建、编辑和处理PDF文档。在最新的版本iText 7中,它提供了丰富的功能,包括将PDF文档转换为图像。这个话题涉及到PDF处理和图像转换两个核心领域。下面将详细...
然后,选择一个输出流(如文件流或网络流)来保存PDF。例如: ```java PdfWriter.getInstance(document, new FileOutputStream("output.pdf")); ``` 在`TempProj`这个项目中,可能包含了已经处理过的iText库jar...
1. iText相关的jar:这可能包括`itextpdf.jar`,这是iText的主要库,包含了创建和操作PDF的基本功能。 2. Freemarker的jar:例如`freemarker.jar`,这是Freemarker模板引擎的核心库。 3. XMLWorker的jar:例如`...
总结起来,"Velocity+Itext导出PDF"是一种高效且灵活的方式,可以将动态数据和预定义的模板结合,生成高质量的PDF文档。通过熟练掌握这两个工具的使用,开发者可以创建出满足各种需求的PDF文档生成系统。
<artifactId>itextpdf <version>5.x.x</version> <!-- 请根据最新版本号替换 --> ``` 确保版本号是最新的,以便利用其所有功能和修复的bug。 接下来,我们探讨如何在PDF中插入文本。使用`Document`对象作为容器...
1. 加载PDF模板文件,获取AcroFields对象:`PdfReader reader = new PdfReader("template.pdf"); AcroFields fields = reader.getAcroFields();` 2. 查找表单字段:`String fieldName = "你的表单字段名";` 3. 填充...
在这个项目中,我们看到标题和描述提到了使用SpringBoot来实现工资条的生成,这涉及到两个关键的技术:FreeMarker模板引擎和iTextPdf库。 首先,FreeMarker是一个强大的模板引擎,常用于动态生成HTML或其他类型的...
相关教程 iText 简介 iText创建文档简介 iText入门实例 IText使用PDF模板输出报表的实践 我和iText第一次亲密接触 相关JAR iText-2.1.7.jar(核心) iTextAsian.jar(中文支持) iText-rups-2.1.7.jar iText-rtf-...