java 实现 word 文档的在线编辑以及流转

用 pageoffice 实现文档的在线编辑以及文档流转

1: 流程

用修改无痕迹模式起草文件,各个领导批注自己意见的时候使用强制留痕模式打开,文员清稿的时候用核稿模式打开,还有最后只读模式打开发布的正式文件。其中在领导批注环节也演示了PageOffice提供的手写功能,在文件核稿之后可以加盖印章。

2:详细代码

<!-- PageOffice Begin -->
	<servlet>
		<servlet-name>poserver</servlet-name>
		<servlet-class>com.zhuozhengsoft.pageoffice.poserver.Server</servlet-class>
	</servlet>

	
	<servlet-mapping>
		<servlet-name>poserver</servlet-name>
		<url-pattern>/poserver.zz</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>poserver</servlet-name>
		<url-pattern>/sealsetup.exe</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>poserver</servlet-name>
		<url-pattern>/posetup.exe</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>poserver</servlet-name>
		<url-pattern>/pageoffice.js</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>poserver</servlet-name>
		<url-pattern>/jquery.min.js</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>poserver</servlet-name>
		<url-pattern>/pobstyle.css</url-pattern>
	</servlet-mapping>
	<servlet>
		<servlet-name>adminseal</servlet-name>
		<servlet-class>com.zhuozhengsoft.pageoffice.poserver.AdminSeal</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>adminseal</servlet-name>
		<url-pattern>/adminseal.zz</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>adminseal</servlet-name>
		<url-pattern>/loginseal.zz</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>adminseal</servlet-name>
		<url-pattern>/sealimage.zz</url-pattern>
	</servlet-mapping>
	<mime-mapping>
		<extension>mht</extension>
		<mime-type>message/rfc822</mime-type>
	</mime-mapping>
	<context-param>
		<param-name>adminseal-password</param-name>
		<param-value>111111</param-value>
	</context-param>
	<!-- PageOffice End -->
<a href="word.jsp?type=creat">在线编辑</a> →
<a href="word.jsp?type=check&user=张三">张三批阅 </a> →
<a href="word.jsp?type=check&user=LiSi">李四批阅</a> →
<a href="word.jsp?type=accept">文员清稿</a> →
<a href="word.jsp?type=publish">正式发文</a>
<%@ page language="java"
	import="java.util.*,com.zhuozhengsoft.pageoffice.*,com.zhuozhengsoft.pageoffice.wordwriter.*"
	pageEncoding="UTF-8"%>
<%@page import="java.awt.Color"%>
<%
	String type = (String) request.getParameter("type");
	String user = (String) request.getParameter("user");

	PageOfficeCtrl poCtrl = new PageOfficeCtrl(request);
	//设置服务器页面
	poCtrl.setServerPage(request.getContextPath() + "/poserver.zz");
	//添加自定义按钮
	poCtrl.addCustomToolButton("保存", "Save", 1);
	poCtrl.addCustomToolButton("全屏/还原", "IsFullScreen", 4);
	//设置保存页面
	poCtrl.setSaveFilePage("SaveFile.jsp");

	if ("creat".equals(type)) {
		//普通编辑模式打开文档 打开Word文档
		poCtrl.webOpen("doc/test.doc", OpenModeType.docNormalEdit,
				"张佚名");
	}
	if ("check".equals(type)) {
		poCtrl.addCustomToolButton("显示/隐藏痕迹", "Show_HidRevisions", 5);
		poCtrl.addCustomToolButton("领导圈阅", "StartHandDraw", 3);
		poCtrl.addCustomToolButton("插入键盘批注", "StartRemark", 3);
		poCtrl.addCustomToolButton("分层显示手写批注", "ShowHandDrawDispBar",7);

		//强制留痕模式打开文档 打开Word文档
		poCtrl.webOpen("doc/test.doc", OpenModeType.docRevisionOnly,user);
	}
	if ("accept".equals(type)) {
		poCtrl.addCustomToolButton("显示/隐藏痕迹", "Show_HidRevisions", 5);
		poCtrl.addCustomToolButton("插入印章/签名", "InsertSeal", 2);
		poCtrl.addCustomToolButton("接受所有修订", "AcceptAllRevisions", 5);
		poCtrl .addCustomToolButton("分层显示手写批注", "ShowHandDrawDispBar",7);
		//核稿模式打开文档 打开Word文档
		poCtrl.webOpen("doc/test.doc", OpenModeType.docAdmin, "张佚名");
	}
	if ("publish".equals(type)) {
		poCtrl.addCustomToolButton("另存到本地", "ShowDialog(0)", 5);
		poCtrl.addCustomToolButton("页面设置", "ShowDialog(1)", 0);
		poCtrl.addCustomToolButton("打印", "ShowDialog(2)", 6);

		poCtrl.setMenubar(false);
		poCtrl.setOfficeToolbars(false);
		//只读模式打开文档 打开Word文档
		poCtrl.webOpen("doc/test.doc", OpenModeType.docReadOnly, "张佚名");
	}
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
	<head>
	<script type="text/javascript">
		//保存
        function Save() {
            document.getElementById("PageOfficeCtrl1").WebSave();
        }
        
        //全屏/还原
        function IsFullScreen() {
            document.getElementById("PageOfficeCtrl1").FullScreen = !document.getElementById("PageOfficeCtrl1").FullScreen;
        }
		//显示/隐藏痕迹
        function Show_HidRevisions() {
            document.getElementById("PageOfficeCtrl1").ShowRevisions = !document.getElementById("PageOfficeCtrl1").ShowRevisions;
        }
        
        //领导圈阅签字
        function StartHandDraw() {
            document.getElementById("PageOfficeCtrl1").HandDraw.SetPenWidth(5);
            document.getElementById("PageOfficeCtrl1").HandDraw.Start();
        }
		// 插入键盘批注
        function StartRemark() {
            var appObj = document.getElementById("PageOfficeCtrl1").WordInsertComment();

        }	
        //分层显示手写批注
        function ShowHandDrawDispBar() {
            document.getElementById("PageOfficeCtrl1").HandDraw.ShowLayerBar(); ;
        }


        //接受所有修订
        function AcceptAllRevisions() {
            document.getElementById("PageOfficeCtrl1").AcceptAllRevisions(); 
        }
        
        function ShowDialog(index) {
            if (index == 0) document.getElementById("PageOfficeCtrl1").ShowDialog(2);
            if (index == 1) document.getElementById("PageOfficeCtrl1").ShowDialog(5);
            if (index == 2) document.getElementById("PageOfficeCtrl1").ShowDialog(4);
        }
        
        //插入印章
        function InsertSeal(){
        	try {
				document.getElementById("PageOfficeCtrl1").ZoomSeal.AddSeal();
			} catch(e) {}
        }
  
    </script>
	</head>
	<body>
		<div style="height: 850px; width: 1036px; overflow: hidden;">
			<%=poCtrl.getHtmlCode("PageOfficeCtrl1")%>
		</div>
	</body>
</html>

保存代码

FileSaver fs=new FileSaver(request,response);
fs.saveToFile(request.getSession().getServletContext().getRealPath("doc/")+"/"+fs.getFileName());
fs.close();

3:注意事项

(1)此示例演示了简单的文件流转,没有返回. 如需返回重新编辑审阅文档,可以写自己的逻辑

(2)本示例 用到的印章是pgaeoffice 自带的简易印章. 用的是 sqlite 数据库. 必须复制sqlite 的jar 以及 poseal.db文件. 可以到http://www.zhuozhengsoft.com/dowm/  下载试用程序.里面有对应的文件

猜你喜欢

转载自blog.csdn.net/weixin_37904139/article/details/82842149
今日推荐