Java 使用 itext 向PDF插入数据和图片 骑猪看日落 2023-10-13 23:37 1阅读 0赞 ### Java 使用 itext 向PDF插入数据和图片 ### #### 一、下载Adobe Acrobat DC #### ![在这里插入图片描述][38898d81a269460caad80377b2bc054f.png_pic_center] #### 二、制作模板 #### ##### 1、准备一个word模板,并转换成PDF格式 ##### ![在这里插入图片描述][673dfff85ed743fc87aa388969b9a083.png_pic_center] ##### 2、使用Adobe Acrobat DC打开PDF文档,并在右侧搜索框搜索表单,点击准备表单 ##### ![在这里插入图片描述][97648524d7344433b7e93e85c275044b.png_pic_center] ##### 3、点击开始,制作PDF表单 ##### ![在这里插入图片描述][cbfc4d1348a94b1fb51f71e6da6f8dcb.png_pic_center] ##### 4、扫描完成后如下图,蓝白色框就是可编辑表单 ##### ![在这里插入图片描述][39b03df0f7d3476689f1a1e99980254f.png_pic_center] ##### 5、点击表单编辑表单名称以及插入时的字体大小样式等,如果没有设置字体大小,数据写入时会将字体会根据表单的高度自适应大小 ##### ![在这里插入图片描述][5036f8b12a15431d9c03ed5a1e511612.png_pic_center] ![在这里插入图片描述][a968ca7cf93940a2a465dd6c26140465.png_pic_center] ##### 6、编辑完成后保存PDF模板 ##### #### 三、在Java中使用 #### import com.itextpdf.text.DocumentException; import com.itextpdf.text.Image; import com.itextpdf.text.Rectangle; import com.itextpdf.text.pdf.*; import java.io.*; import java.nio.file.Files; import java.util.Calendar; import java.util.HashMap; import java.util.Map; public class PDFUtil { private static void insertImage(AcroFields form, PdfStamper stamper, String filedName, String url) throws IOException, DocumentException { int pageNo = form.getFieldPositions(filedName).get(0).page; Rectangle signRect = form.getFieldPositions(filedName).get(0).position; float x = signRect.getLeft(); float y = signRect.getBottom(); Image image = Image.getInstance(url); // 获取操作的页面 PdfContentByte under = stamper.getOverContent(pageNo); // 根据域的大小缩放图片 image.scaleToFit(signRect.getWidth(), signRect.getHeight()); // 添加图片 image.setAbsolutePosition(x, y); under.addImage(image); } public static Boolean pdfTemplateInsert(String templateUrl, String outputFileUrl, Map<String, Object> templateValueMap, Map<String, String> templateImageMap) { boolean success = true; OutputStream os = null; PdfStamper ps = null; PdfReader reader = null; try { os = Files.newOutputStream(new File(outputFileUrl).toPath()); //读取pdf表单 reader = new PdfReader(templateUrl); //根据表单生成一个新的pdf文件 ps = new PdfStamper(reader, os); //获取pdf表单 AcroFields form = ps.getAcroFields(); //给表单中添加中文字体 BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED); form.addSubstitutionFont(bf); if (null != templateValueMap && !templateValueMap.isEmpty()) { for (String key : templateValueMap.keySet()) { form.setField(key, String.valueOf(templateValueMap.get(key))); } } if (null != templateImageMap && !templateImageMap.isEmpty()) { for (String key : templateImageMap.keySet()) { insertImage(form, ps, key, templateImageMap.get(key)); } } ps.setFormFlattening(true); } catch (Exception e) { success = false; } finally { try { ps.close(); reader.close(); os.close(); } catch (Exception e) { e.printStackTrace(); } } return success; } public static void main(String[] args) { //模板路径 String inputUrl = "E:/Desktop/test/demo/itext-demo.pdf"; //生成的文件路径 String outputUrl = "E:/Desktop/test/demo/itext-demo-output.pdf"; Map<String, Object> data = new HashMap<>(); data.put("name", "张山"); data.put("year", "2000年10月"); data.put("phone", "13032451234"); data.put("gangwei", "Java开发"); data.put("introduceOneself", "熟练使用Java常用框架:Spring 、mybatis等"); //图片地址 String imageUrl = "E:/Desktop/test/demo/1.jpeg"; Map<String, String> templateImageMap = new HashMap<>(); templateImageMap.put("image", imageUrl); PDFUtil.pdfTemplateInsert(inputUrl, outputUrl, data, templateImageMap); } } ##### 执行结果 ##### ![在这里插入图片描述][8d280cbbba154b2286285f7874a05b90.png_pic_center] [38898d81a269460caad80377b2bc054f.png_pic_center]: https://img-blog.csdnimg.cn/38898d81a269460caad80377b2bc054f.png#pic_center [673dfff85ed743fc87aa388969b9a083.png_pic_center]: https://img-blog.csdnimg.cn/673dfff85ed743fc87aa388969b9a083.png#pic_center [97648524d7344433b7e93e85c275044b.png_pic_center]: https://img-blog.csdnimg.cn/97648524d7344433b7e93e85c275044b.png#pic_center [cbfc4d1348a94b1fb51f71e6da6f8dcb.png_pic_center]: https://img-blog.csdnimg.cn/cbfc4d1348a94b1fb51f71e6da6f8dcb.png#pic_center [39b03df0f7d3476689f1a1e99980254f.png_pic_center]: https://img-blog.csdnimg.cn/39b03df0f7d3476689f1a1e99980254f.png#pic_center [5036f8b12a15431d9c03ed5a1e511612.png_pic_center]: https://img-blog.csdnimg.cn/5036f8b12a15431d9c03ed5a1e511612.png#pic_center [a968ca7cf93940a2a465dd6c26140465.png_pic_center]: https://img-blog.csdnimg.cn/a968ca7cf93940a2a465dd6c26140465.png#pic_center [8d280cbbba154b2286285f7874a05b90.png_pic_center]: https://img-blog.csdnimg.cn/8d280cbbba154b2286285f7874a05b90.png#pic_center
还没有评论,来说两句吧...