本文主要是介绍Java操作PDF文件实现签订电子合同详细教程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
《Java操作PDF文件实现签订电子合同详细教程》:本文主要介绍如何在PDF中加入电子签章与电子签名的过程,包括编写Word文件、生成PDF、为PDF格式做表单、为表单赋值、生成文档以及上传到OB...
前言:
前两天领导提出需求要在pdf中加入电子签章与电子签名,然后自己查找了一些资料完成了,今天有时间正好分享一下,希望可以帮助到大家
先看效果:
1.编写word文件
1.1先将模板编写出来(可以根据自己的需求编写)我这里是测试demo
1.2然后生成PDF格式进行保存
1.3我这里是将文件保存到本地后上传到华为云的OBS中,在本地也可以操作,我只是为了方便保存到数据库中,可以根据自己的业务逻辑处理,效果雷同
注:这里上传是在第二步完成后在操作
2.为PDF格式做表单
2.1然后将刚刚生成的pdf用PDF编辑器打开
注:我这里使用的是(万兴PDF)可以去找免费的使用
打开后找到表单:
文字部分:
点击文本字段,然后和截图一样吧自己需要添加文字的地方圈出来
然后在属性中设置名称(后面代码操作会用到)
2.2图片表单
然后在添加图片表单,操作和文字一样,吧需要放图片的地方圈出来命名
这里需要注意的就是(外观设置无颜色,不然后面生成出来会有边框,特别丑)
然后在选项中选为仅标签(这样公章就可以变的透明,可以根据自己的业务逻辑调整)
操作完成后保存
3.为表单赋值
public class PdfTest { public static void main(String[] args) { String fileName = "电子合同"; // 获取当前时间 Date currentDate = new Date(); // 创建一个SimpleDateFormat对象,指定日期格式 SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日"); // 格式化当前时间 String formattedDate = sdf.format(currentDate); //获取当前日期一年后的日期 String formattedDate2 = sdf.format(new Date(currentDate.getTime() + 365L * 24 * 60 * 60 * 1000)); System.err.println(formattedDate+"-"+formattedDate2); //测试执行 FillTemplate( "刚刚添加表单保存的pdf文件的路径", "保存生成的pdf文件的路径", "XXX有限公司", "张三丰", "浙江宁波海曙区红星大厦1706号", "李四", "18888888888", "dawdawd@163.com", formattedDate+"至"+formattedDate2, formattedDate, "签名图片的路径", "盖章的路径" ); } // 下面的参数就是表单中的名称,需要对应上不然找不到(需要注意大小写) public static void FillTemplate( String sourcesPath, String targetPath, String name, String fr, String address, String phoneName, String phone, String wx, String data, String newData, String signPath, String gongzhangPath ){ //设置参数 jsONObject jsonObject = new JSONObject(); jsonObject.put("name",name); jsonObject.put("fr",fr); jsonObject.put("address",address); jsonObject.put("phoneName",phoneName); jsonObject.put("phone",phone); jsonObject.put("wx",wx); jsonObject.put("data",data); jsonObject.put("newData",newData); // 填充创建pdf PdfReader reader = null; PdfStamper stamp = null; ByteArrayOutputStream baos =www.chinasem.cnnull; try { reader = new PdfReader( sourcesPath); File deskFile = new File(targetPath); stamp = new PdfStamper(reader, new FileOutputStream(deskFile)); // 取出报表模板中的所有字段 AcroFields form = stamp.getAcroFields(); System.err.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{ readChina编程er.close()android; }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); phpunder.addImage(image); }catch (Exception e){ return false; } return true; } }
4.生成文档
然后执行后在保存生成的pdf文件的路径中找到文件:
点击查看:
效果图:
5.上传到OBS中
需要保存到数据库中的上传到OSS和OBS中都可以。。。
总结
到此这篇关于Java操作PDF文件实现签订电子合同的文章就介绍到这了,更多相关Java实现签订电子合同内容请搜索编程China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持China编程(www.chinasem.cn)!
这篇关于Java操作PDF文件实现签订电子合同详细教程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!