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

写在前面:本文主要为了实现能对pdf文件进行在线签名、盖章功能。采用的技术是pageoffice。说简单吧他坑点挺多的,说难吧 他代码量确实不多。本文总结了一下我自己遇到的问题以及解决方式。
注:实现pdf签名、签章的前提是pageoffice版本必须为 5.0以上

本文案例源码:源码地址

项目结构

在这里插入图片描述

真的没几个文件

1、添加依赖
        <!-- 添加Sqlite依赖(可选:如果不需要使用印章功能的话,不需要添加此依赖 )-->
        <dependency>
            <groupId>org.xerial</groupId>
            <artifactId>sqlite-jdbc</artifactId>
            <version>3.7.2</version>
        </dependency>
        <!-- 添加PageOffice依赖(必须) -->
        <dependency>
            <groupId>com.zhuozhengsoft</groupId>
            <artifactId>pageoffice</artifactId>
            <version>5.2.0.12</version>
        </dependency>
        <!--此处前端模板用的thymeleaf 可自行选择 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
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<String, Object> 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<String, Object> 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

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值