pdf在办公过程中,做矢量文档工具,使用比较广范。
在文档审批和发布过程中,也要求最后要pdf有效的签名或者印章,以示文档的重要性。
卓正软件公司的pageOffice,专门实现办公文档的在线编辑,在办公文档编辑领域,提供的插件比较丰富。为做办公系统的程序员节约了大量时间。最新的5.0版本,推出了pdf的在线签章功能。
实现了pdf签发的全流程处理。
本程序员实现了一个最简单的pdf签章的功能。
项目的结构如下图
第一步
pom.xml
4.0.0
org.springframework.boot
spring-boot-starter-parent
2.3.4.RELEASE
com.example
demo
0.0.1-SNAPSHOT
PDFseal
Demo project for Spring Boot
1.8
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-thymeleaf
org.xerial
sqlite-jdbc
3.7.2
com.zhuozhengsoft
pageoffice
5.1.0.2
2appplication.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= 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 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 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
Index
PageOffice 集成效果演示
templates\AddSeal\PDF1.html
templates\AddSign\PDF1.html
代码写完后,配置环境
1电脑创建d:/lic/ 这个目录,里面添加pageOffice自带的数据库。
2创建
目录结构,每个目录放入一个test1.pdf的pdf文档。
3启动服务
index页面打开效果
点 打开pdf盖章
盖章后的效果
签字后的效果
git项目地址为
https://github.com/qingxue0606/PDFseal
需要的,数据库文档,和pdf文档都在data目录中。
有问题可访问 http://www.zhuozhengsoft.com/