java实现根据pdf模板生成文件并插入文字,选项,签名和公章
作者:小七蒙恩
这篇文章主要为大家详细介绍了java如何实现根据pdf模板生成文件并插入文字,选项,签名和公章,感兴趣的小伙伴可以跟随小编一起学习一下
成果
使用word,制作一个模板
使用pdf编辑器,生成pdf模板
我这里使用福昕pdf编辑器,其他pdf编辑器(如Adobe Acrobat)也可以用但是大多要钱。
1.从做好的word导入来创建pdf
2.插入文字域
右键文字域,填入字段与属性
3.插入选项域
导出值不要忘记填写,与代码对应上。
导出值不要忘记填写,与代码对应上。
4.插入图片域,预插入签名和公章
注意:外观这里的边框和填充都选无色,否则图片会被填充色盖住;
注意:选项这里我们选择只显示标签。
5.模板做好了,我们进行保存
java 实现
引入依赖
<!-- pdf --> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.5.13.2</version> </dependency> <!--中文字体--> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itext-asian</artifactId> <version>5.2.0</version> </dependency> <!--html xml 转为pdf--> <dependency> <groupId>com.itextpdf.tool</groupId> <artifactId>xmlworker</artifactId> <version>5.5.11</version> </dependency>
代码实现
package com.tencent.qcloud.roomservice.webrtc.utils; import com.alibaba.fastjson.JSONObject; import com.itextpdf.text.Image; import com.itextpdf.text.Rectangle; import com.itextpdf.text.pdf.*; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.util.Map; /** * @author dume * @ClassName PdfTest * @description: pdf模板操作 * @date 2024年07月26日 * @version: 1.0 */ public class PdfTest { public static void main(String[] args) { //测试执行 FillTemplate( "C:\\test\\申请表.pdf", "C:\\test\\新申请表.pdf", "杜小七", "辽宁大连", "跑步", "Yes", "Yes", "Yes", "C:\\test\\电子签名.png", "C:\\test\\公章.png" ); } /** * 根据模板生成pdf * @param sourcesPath 原文件路径 * @param targetPath 生成文件路径 * @param name 参数 * @param address 参数 * @param hobby 参数 * @param select_1 选项 * @param select_2 选项 * @param select_3 选项 * @param signPath 签名图片路径 * @param gongzhangPath 公章图片路径 */ public static void FillTemplate( String sourcesPath, String targetPath, String name, String address, String hobby, String select_1, String select_2, String select_3, String signPath, String gongzhangPath ){ //设置参数 JSONObject jsonObject = new JSONObject(); jsonObject.put("name",name); jsonObject.put("address",address); jsonObject.put("hobby",hobby); jsonObject.put("select_1",select_1); jsonObject.put("select_2",select_2); jsonObject.put("select_3",select_3); // 填充创建pdf PdfReader reader = null; PdfStamper stamp = null; ByteArrayOutputStream baos =null; try { reader = new PdfReader( sourcesPath); File deskFile = new File(targetPath); stamp = new PdfStamper(reader, new FileOutputStream(deskFile)); // 取出报表模板中的所有字段 AcroFields form = stamp.getAcroFields(); System.out.println(form.getFields().keySet()); //设置宋体 BaseFont song =BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED); if (jsonObject != null) { for (Map.Entry<String, Object> entry : jsonObject.entrySet()) { String key = entry.getKey(); String value = entry.getValue().toString(); //保存选项 if (key.startsWith("select")) { form.setField(key, value, true); //保存文字 }else { form.setFieldProperty(key, "textfont", song, null); form.setField(key, value); } } } //插入签名 insertImage(form,stamp,"sign",signPath); //插入公章 insertImage(form,stamp,"gongzhang",gongzhangPath); //保存修改 stamp.setFormFlattening(true); }catch (Exception e){ e.printStackTrace(); }finally { if (stamp != null) { try{ stamp.close(); }catch (Exception e){ e.printStackTrace(); } } if (reader != null) { try{ reader.close(); }catch (Exception e){ e.printStackTrace(); } } if (baos != null) { try{ baos.close(); }catch (Exception e){ e.printStackTrace(); } } } } /** * pdf模板插入图片 * @param form * @param stamper * @param filedName * @param url * @return */ public static boolean insertImage(AcroFields form, PdfStamper stamper, String filedName, String url) { try { 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); }catch (Exception e){ return false; } return true; } }
执行测试
以上就是java实现根据pdf模板生成文件并插入文字,选项,签名和公章的详细内容,更多关于java pdf模板生成文件的资料请关注脚本之家其它相关文章!