spring boot集成pageoffice实现对PDF文件的在线签字、盖章 您所在的位置:网站首页 pdf电子印章客户端显示印章图片获取失败 spring boot集成pageoffice实现对PDF文件的在线签字、盖章

spring boot集成pageoffice实现对PDF文件的在线签字、盖章

2024-06-30 18:12| 来源: 网络整理| 查看: 265

写在前面:本文主要为了实现能对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: false

application-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: false

application.yml (此处测试默认dev)

spring: profiles: active: dev

上述路径需自行创建好,准备好用于测试的pdf文件放入指定路径。项目启动后会在我们的 d:lic下看到以下文件

在这里插入图片描述 这个lic文件是安装pageoffice客户端后的注册信息。(注意:此次的注册码要用 专业版 才可使用签字、签章的功能)

poseal.db暂时忽略 后面再提

到这里我们就可以启动项目了,可以看到如下界面

在这里插入图片描述

点击的时候如果没有安装pageoffice客户端,则会提示安装,直接下载安装即可。这里下载后需要注册,组织什么的可以随便填,最后的序列号,需要到官网下载一个案例(注意版本),里面有序列号,注意要使用专业版试用序列号。官网demo下载地址:http://www.zhuozhengsoft.com/dowm/

安装完毕后点击 加盖签章会提示输入用户名密码

在这里插入图片描述

这里的用户密码是签章的关联关系,由管理员创建,并且这里不能登录admin 111111 会提示 在这里插入图片描述 所以我们需要自己创建,创建地址是:http://localhost:8080/loginseal.zz 在这里插入图片描述 这里的账号密码是admin 111111,这里的数据就是之前我们提到的 poseal.db 文件

这个文件我们需要去官网下载一个demo包,然后从实例项目中的 Samples5\WEB-INF\lib 这个路径下拿到 官网下载demo地址:http://www.zhuozhengsoft.com/dowm/ 下载时记得对应大版本号,案例里面有很多资料,如果出问题了可以查看参考

拿到poseal.db文件后,替换我们本地的文件,重启服务,然后访问印章管理,去新建印章

在这里插入图片描述

**这时候我们就可去盖章了,输入刚刚的用户名以及默认密码,修改密码后确定 **

在这里插入图片描述 在这里插入图片描述 这里可以选择你刚刚新建的印章,点击确定,然后选择需要盖章到哪里后再点鼠标左键,然后保存,即可完成盖章 在这里插入图片描述

保存后,可在本地的文件夹下查看,章已经盖好了,签字同理。 在这里插入图片描述

在这里插入图片描述 至此本地测试完毕,下面可以部署到服务器。部署到服务器需要注意的点我上面的代码里都有注释,直接根据我的配置改下路径放好文件即可。最坑的点莫过于 服务器上的资源路径前需要添加 “file://”,然后再加自己的路径。这个找了半天都没有找到,最后咨询的他们官方技术人员才解答。

这里用的是体验版,期限3个月

参考博客:https://blog.csdn.net/wqqqianqian/article/details/109174170



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有