java springboot實現pdf在線加蓋電子印章和簽字的功能


原文地址:https://blog.csdn.net/weixin_38757817/article/details/109092774

為什么要使用pdf簽章

pdf在辦公過程中,做矢量文檔工具,使用比較廣范。
在文檔審批和發布過程中,也要求最后要pdf有效的簽名或者印章,以示文檔的重要性。

什么插件能實現pdf簽章功能

卓正軟件公司的pageOffice,專門實現辦公文檔的在線編輯,在辦公文檔編輯領域,提供的插件比較豐富。為做辦公系統的程序員節約了大量時間。最新的5.0版本,推出了pdf的在線簽章功能。
實現了pdf簽發的全流程處理。

spirngboot如果集成pageOffice並實現pdf簽章呢

本程序員實現了一個最簡單的pdf簽章的功能。

項目的結構如下圖:

1. pom文件

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>PDFseal</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

        <!-- 添加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.1.0.2</version>

        </dependency>
    </dependencies>


</project>

2. appplication.properties 文檔的設置。

########################################################
###PageOffice
########################################################
posyspath=d:/lic/
popassword=111111
########################################################
###THYMELEAF (ThymeleafAutoConfiguration)
########################################################
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html
#spring.thymeleaf.mode=HTML5
#spring.thymeleaf.encoding=UTF-8
# ;charset=<encoding> is added
#spring.thymeleaf.content-type=text/html
# set to false for hot refresh

spring.thymeleaf.cache=false

3. 寫入pageOffice定義的bean
DemoController.java

package com.example.demo;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.util.ResourceUtils;
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 java.io.FileNotFoundException;

/**
 * @author Administrator
 */
@RestController
public class DemoController {
    @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();
        poserver.setSysPath(poSysPath);//設置PageOffice注冊成功后,license.lic文件存放的目錄
        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();
        adminSeal.setAdminPassword(poPassWord);//設置印章管理員admin的登錄密碼
        adminSeal.setSysPath(poSysPath);//設置印章數據庫文件poseal.db存放的目錄
        ServletRegistrationBean srb = new ServletRegistrationBean(adminSeal);
        srb.addUrlMappings("/adminseal.zz");
        srb.addUrlMappings("/sealimage.zz");
        srb.addUrlMappings("/loginseal.zz");
        return srb;// 
    }
}

4開始寫后端業務代碼。
PDFInsertSealController.java

package com.example.demo;

import com.zhuozhengsoft.pageoffice.FileSaver;
import com.zhuozhengsoft.pageoffice.PDFCtrl;
import org.springframework.util.ResourceUtils;
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.io.FileNotFoundException;
import java.util.Map;

@RestController
public class PDFInsertSealController {

    @RequestMapping(value = "/index", method = RequestMethod.GET)
    public ModelAndView showIndex() {
        ModelAndView mv = new ModelAndView("Index");
        return mv;
    }
//蓋章功能
    @RequestMapping(value = "/AddSeal", method = RequestMethod.GET)
    public ModelAndView showWord(HttpServletRequest request, Map<String, Object> map) {
        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);
        //此處路徑為服務器端文檔路徑
        pdfCtrl1.webOpen("D:\\doc\\AddSeal\\test1.pdf");
        map.put("pageoffice", pdfCtrl1.getHtmlCode("PDFCtrl1"));
        ModelAndView mv = new ModelAndView("/AddSeal/PDF1");
        return mv;
    }

//簽字功能
    @RequestMapping(value = "AddSign", method = RequestMethod.GET)
    public ModelAndView showWord11(HttpServletRequest request, Map<String, Object> map) {
        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);
        //此處路徑為服務器端文檔路徑
        pdfCtrl1.webOpen("D:\\doc\\AddSign\\test1.pdf");
        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(  "D:/doc/AddSeal/" + fs.getFileName());
        fs.close();
    }

    @RequestMapping("/AddSign/save")
    public void save2(HttpServletRequest request, HttpServletResponse response) {
        FileSaver fs = new FileSaver(request, response);
        //此處路徑為服務器端文檔路徑
        fs.saveToFile(  "D:/doc/AddSign/" + fs.getFileName());
        fs.close();
    }

}

最后
寫上三個對應的thymleleaf的模板

index.html

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"
      xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity3">
<head>
    <title>Index</title>
    <script type="text/javascript" src="pageoffice.js" ></script>

</head>

<body>
<h1 th:inline="text">PageOffice 集成效果演示</h1>

<div style="width: 49%;float: left ">


    <a href="javascript:POBrowser.openWindowModeless('AddSeal','fullscreen=yes;');">打開pdf蓋章 </a><br>

    <a href="javascript:POBrowser.openWindowModeless('AddSign','fullscreen=yes;');">打開pdf簽字</a><br>


</div>



</body>
</html>

templates\AddSeal\PDF1.html

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"
      xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity3">
<head>
</head>
<body style="overflow:hidden">
<!--**************   卓正 PageOffice 客戶端代碼開始    ************************-->
<script language="javascript" type="text/javascript">
    function Save() {
        document.getElementById("PDFCtrl1").WebSave();
    }

    function InsertSeal() {
        try {
            document.getElementById("PDFCtrl1").ZoomSeal.AddSeal();//如果使用ZoomSeal中的USBKEY方式蓋章,第一個參數不能為蓋章用戶登錄名,只能為null或者空字符串
        } catch(e) {}
    }


</script>
<div style="height:850px;width:auto;" th:utext="${pageoffice}">

</div>
</body>

</html>

templates\AddSign\PDF1.html

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"
      xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity3">
<head>
</head>
<body style="overflow:hidden">
<!--**************   卓正 PageOffice 客戶端代碼開始    ************************-->
<script language="javascript" type="text/javascript">
    function Save() {
        document.getElementById("PDFCtrl1").WebSave();
    }

    function AddHandSign() {
        try {
            document.getElementById("PDFCtrl1").ZoomSeal.AddHandSign();
        } catch(e) {}
    }

</script>
<div style="height:850px;width:auto;" th:utext="${pageoffice}">

</div>
</body>
</html>

代碼寫完后,配置環境

1電腦創建d:/lic/ 這個目錄,里面添加pageOffice自帶的數據庫。
2創建

                   

目錄結構,每個目錄放入一個test1.pdf的pdf文檔。
3啟動服務

最終效果

index頁面打開效果

點 打開pdf蓋章

蓋章后的效果

簽字后的效果
git項目地址為

https://github.com/qingxue0606/PDFseal

需要的,數據庫文檔,和pdf文檔都在data目錄中。

有問題可訪問 http://www.zhuozhengsoft.com/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM