spring boot集成pageoffice实现对PDF文件的在线签字、盖章 | 您所在的位置:网站首页 › pdf电子印章客户端显示印章图片获取失败 › spring boot集成pageoffice实现对PDF文件的在线签字、盖章 |
写在前面:本文主要为了实现能对pdf文件进行在线签名、盖章功能。采用的技术是pageoffice。说简单吧他坑点挺多的,说难吧 他代码量确实不多。本文总结了一下我自己遇到的问题以及解决方式。 注:实现pdf签名、签章的前提是pageoffice版本必须为 5.0以上 本文案例源码:源码地址 项目结构真的没几个文件 1、添加依赖 org.xerial sqlite-jdbc 3.7.2 com.zhuozhengsoft pageoffice 5.2.0.12 org.springframework.boot spring-boot-starter-thymeleaf 2、注册bean(直接复制即可) package com.zks.pageoffice.controller; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.web.servlet.ServletRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.stereotype.Component; import org.springframework.web.bind.annotation.RestController; /** * @Package: com.zks.pageoffice * @ClassName: DemoController * @Author: ZhouKaiShun * @CreateTime: 2021/9/10 10:18 * @Description: */ @Component public class RegistrationBean { @Value("${posyspath}") private String poSysPath; @Value("${popassword}") private String poPassWord; /** * 添加PageOffice的服务器端授权程序Servlet(必须) * @return */ @Bean public ServletRegistrationBean servletRegistrationBean() { com.zhuozhengsoft.pageoffice.poserver.Server poserver = new com.zhuozhengsoft.pageoffice.poserver.Server(); //设置PageOffice注册成功后,license.lic文件存放的目录 poserver.setSysPath(poSysPath); ServletRegistrationBean srb = new ServletRegistrationBean(poserver); srb.addUrlMappings("/poserver.zz"); srb.addUrlMappings("/posetup.exe"); srb.addUrlMappings("/pageoffice.js"); srb.addUrlMappings("/jquery.min.js"); srb.addUrlMappings("/pobstyle.css"); srb.addUrlMappings("/sealsetup.exe"); return srb; } /** * 添加印章管理程序Servlet(可选) * @return */ @Bean public ServletRegistrationBean servletRegistrationBean2() { com.zhuozhengsoft.pageoffice.poserver.AdminSeal adminSeal = new com.zhuozhengsoft.pageoffice.poserver.AdminSeal(); //设置印章管理员admin的登录密码 adminSeal.setAdminPassword(poPassWord); //设置印章数据库文件poseal.db存放的目录 adminSeal.setSysPath(poSysPath); ServletRegistrationBean srb = new ServletRegistrationBean(adminSeal); srb.addUrlMappings("/adminseal.zz"); srb.addUrlMappings("/sealimage.zz"); srb.addUrlMappings("/loginseal.zz"); return srb; } } 3、controller调用 package com.zks.pageoffice.controller; import com.zhuozhengsoft.pageoffice.FileSaver; import com.zhuozhengsoft.pageoffice.OpenModeType; import com.zhuozhengsoft.pageoffice.PDFCtrl; import com.zhuozhengsoft.pageoffice.PageOfficeCtrl; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.Map; /** * @Package: com.zks.pageoffice * @ClassName: PDFInsertSealController * @Author: ZhouKaiShun * @CreateTime: 2021/9/10 10:19 * @Description: */ @RestController @Slf4j public class PDFInsertSealController { @Value("${spring.profiles.active}") public String active; @Value("${signpath}") public String signPath; @Value("${sealpath}") private String sealPath; @RequestMapping(value = "/", method = RequestMethod.GET) public ModelAndView showIndex() { ModelAndView mv = new ModelAndView("Index"); return mv; } /** * @description:盖章功能 * @return: * @author: ZhouKaiShun * @time: 2021/9/10 13:40 */ @GetMapping("/AddSeal") public ModelAndView showWord(HttpServletRequest request, Map map) { log.info("准备盖章"); PDFCtrl pdfCtrl1 = new PDFCtrl(request); //此行必须 pdfCtrl1.setServerPage(request.getContextPath() + "/poserver.zz"); //设置保存页面 pdfCtrl1.setSaveFilePage("AddSeal/save"); // Create custom toolbar pdfCtrl1.addCustomToolButton("保存", "Save()", 1); pdfCtrl1.addCustomToolButton("加盖印章", "InsertSeal()", 2); //此处路径为服务器端文档路径 如果是Linux服务器上的路径,前面需要加“file://” (这个点找了好久......) pdfCtrl1.webOpen(active.equals("prod") ? "file://" + sealPath : sealPath); map.put("pageoffice", pdfCtrl1.getHtmlCode("PDFCtrl1")); ModelAndView mv = new ModelAndView("AddSeal/PDF1"); return mv; } /** * @description:签字功能 * @return: * @author: ZhouKaiShun * @time: 2021/9/10 13:40 */ @GetMapping("AddSign") public ModelAndView showWord11(HttpServletRequest request, Map map) { log.info("准备签字"); //PageOfficeCtrl pdfCtrl1 = new PageOfficeCtrl(request); PDFCtrl pdfCtrl1 = new PDFCtrl(request); //此行必须 pdfCtrl1.setServerPage(request.getContextPath() + "/poserver.zz"); //设置保存页面 pdfCtrl1.setSaveFilePage("AddSign/save"); // Create custom toolbar pdfCtrl1.addCustomToolButton("保存", "Save()", 1); pdfCtrl1.addCustomToolButton("签字", "AddHandSign()", 3); //此处路径为服务器端文档路径 如果是Linux服务器上的路径,前面需要加“file://” (这个点找了好久......) pdfCtrl1.webOpen(active.equals("prod") ? "file://" + signPath : signPath); map.put("pageoffice", pdfCtrl1.getHtmlCode("PDFCtrl1")); ModelAndView mv = new ModelAndView("AddSign/PDF1"); return mv; } @RequestMapping("/AddSeal/save") public void save(HttpServletRequest request, HttpServletResponse response) { FileSaver fs = new FileSaver(request, response); //此处路径为服务器端文档路径 fs.saveToFile(sealPath); fs.close(); } @RequestMapping("/AddSign/save") public void save2(HttpServletRequest request, HttpServletResponse response) { FileSaver fs = new FileSaver(request, response); //此处路径为服务器端文档路径 fs.saveToFile(signPath); fs.close(); } }两个主要接口,一个用于签名,一个用于盖章 controller中的一些配置项application-dev.yml server: port: 8080 # 用于存放注册的信息以及.db文件,这个db文件包含了签章的一些信息,pageoffice帮我们集成好了 我们不用管,只需要自己创建签章即可 posyspath: d:/lic/ # 默认密码,管理签章的默认账号 admin 111111 popassword: 111111 # 用于签名的文件地址 signpath: D:\doc\AddSign\test1.pdf # 用于盖章的文件路径 sealpath: D:\doc\AddSeal\test1.pdf spring: thymeleaf: prefix: classpath:/templates/ suffix: .html cache: falseapplication-prod.yml server: port: 8011 # 用于存放注册的信息以及.db文件,这个db文件包含了签章的一些信息,pageoffice帮我们集成好了 我们不用管,只需要自己创建签章即可 posyspath: /usr/javaproject/pageoffice/lic/ # 默认密码,管理签章的默认账号 admin 111111 popassword: 111111 # 用于签名的文件地址 signpath: /usr/javaproject/static/pageoffice/sign/test.pdf # 用于盖章的文件路径 sealpath: /usr/javaproject/static/pageoffice/seal/test.pdf spring: thymeleaf: prefix: classpath:/templates/ suffix: .html cache: falseapplication.yml (此处测试默认dev) spring: profiles: active: dev上述路径需自行创建好,准备好用于测试的pdf文件放入指定路径。项目启动后会在我们的 d:lic下看到以下文件
poseal.db暂时忽略 后面再提 到这里我们就可以启动项目了,可以看到如下界面 点击的时候如果没有安装pageoffice客户端,则会提示安装,直接下载安装即可。这里下载后需要注册,组织什么的可以随便填,最后的序列号,需要到官网下载一个案例(注意版本),里面有序列号,注意要使用专业版试用序列号。官网demo下载地址:http://www.zhuozhengsoft.com/dowm/ 安装完毕后点击 加盖签章会提示输入用户名密码 这里的用户密码是签章的关联关系,由管理员创建,并且这里不能登录admin 111111 会提示 这个文件我们需要去官网下载一个demo包,然后从实例项目中的 Samples5\WEB-INF\lib 这个路径下拿到 官网下载demo地址:http://www.zhuozhengsoft.com/dowm/ 下载时记得对应大版本号,案例里面有很多资料,如果出问题了可以查看参考 拿到poseal.db文件后,替换我们本地的文件,重启服务,然后访问印章管理,去新建印章 **这时候我们就可去盖章了,输入刚刚的用户名以及默认密码,修改密码后确定 **
保存后,可在本地的文件夹下查看,章已经盖好了,签字同理。
这里用的是体验版,期限3个月 参考博客:https://blog.csdn.net/wqqqianqian/article/details/109174170 |
CopyRight 2018-2019 实验室设备网 版权所有 |