前言:

在OA系统中,有时会出现在线打开word文档实现指定用户只能编辑指定区域的需求。这就需要我们学习微软activex控件的使用了。但是这需要开发者具备将activex控件集成到Java环境的能力。对于大部分Java开发工程师来说,仅仅解决单一的功能就要掌握activex控件,未免学习成本太大。

所以我们今天就要介绍一个中间件技术——pageoffice,此中间件技术已经将web系统中操作office文档的大部分功能整合完毕,大家只需要关注自己web系统的业务逻辑即可,学习成本低,且功能很丰富。下面我们来实战用pageoffice实现一下用Java在线打开word文档实现指定用户只能编辑指定区域的功能。

先看效果:

首先模拟一下A用户登录打开文件

java poi在线编辑文档 java实现在线编辑word_word

java poi在线编辑文档 java实现在线编辑word_word_02

此时文档中能编辑的位置只有红框里指定的位置能够编辑录入数据,不能编辑其他位置的内容。

下面再以B用户登录打开文件

java poi在线编辑文档 java实现在线编辑word_限制编辑_03

java poi在线编辑文档 java实现在线编辑word_Java_04

此时B用户只能编辑下面指定的位置,其他位置的内容不可编辑。

5步)

1.官网http://www.zhuozhengsoft.com/dowm/下载集成文件,引入jar包,配置web.xml

java poi在线编辑文档 java实现在线编辑word_在线_05

去刚才下载的集成文件中找到lib,将里面的内容放在项目web-inf的lib中引入jar包,然后将web.xml的pageoffice配置引入到自己项目的wb.xml中

2.在父页面aaa.jsp(需要打开文档的页面)放一个a标签或者button

写a标签之前先引入pageoffice需要的js文件

<script type="text/javascript" src="/jquery.min.js"></script>
<script type="text/javascript" src="/pageoffice.js" id="po_js_main"></script>

然后添加a标签 

<a href="javascript:POBrowser.openWindowModeless('Default.jsp' , 'width=1200px;height=800px;');">控制不同用户编辑Word文档中不同的区域</a>

3.在父页面aaa.jsp同级目录下创建一个名为Default.jsp的文件

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>登录页面</title>
</head>
<body>
    <form id="form1"  action="SetDataRegionByUserName.jsp" method="post"> 
    <div style=" text-align:center;">
    <div>请选择登录用户:</div><br />
    <select name="userName">
        <option selected="selected" value="zhangsan">A部门经理</option>
        <option  value="lisi">B部门经理</option>
    </select><br /><br />
    <input type="submit"  value="打开文件" /><br /><br />
    <div style=" color:Red;">不同的用户登录后,在文档中可以编辑的区域不同</div>
    </div>
    </form>
</body>

</html>

4.在父页面aaa.jsp同级目录下创建一个名为SetDataRegionByUserName.jsp的文件

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@page
	import="com.zhuozhengsoft.pageoffice.*,com.zhuozhengsoft.pageoffice.wordwriter.*"%>
<%
	String userName = request.getParameter("userName");
	//***************************卓正PageOffice组件的使用********************************
	WordDocument doc = new WordDocument();

	DataRegion dA1 = doc.openDataRegion("PO_A_pro1");
	DataRegion dB1 = doc.openDataRegion("PO_B_pro1");

	//根据登录用户名设置数据区域可编辑性
	//A部门经理登录后
	if (userName.equals("zhangsan")) {
		userName = "A部门经理";
		dA1.setEditing(true);
		dB1.setEditing(false);
	}
	//B部门经理登录后
	else {
		userName = "B部门经理";
		dB1.setEditing(true);
		dA1.setEditing(false);
	}

	PageOfficeCtrl poCtrl = new PageOfficeCtrl(request);
	poCtrl.setWriter(doc);

	//设置服务器页面
	poCtrl.setServerPage(request.getContextPath()+"/poserver.zz"); //此行必须

	//设置文档打开方式
	poCtrl.webOpen("test.doc", OpenModeType.docSubmitForm, userName);

%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<title></title>
	</head>
	<body>

		<div id="content">
			<div id="textcontent" style="width: 1000px; height: 800px;">
				<div class="flow4">
					<a href="Default.jsp"> 返回登录页</a>
					<strong>当前用户:</strong>
					<span style="color: Red;"><%=userName%></span>
				</div>

	<!--**************   卓正 PageOffice组件 ************************-->
		 <%=poCtrl.getHtmlCode("PageOfficeCtrl1")%>
			</div>
		</div>

	</body>
</html>

5.新建文件

新建一个名为test.doc的word文件(如果新建的是docx文件就将第三步的poCtrl.webOpen("test.doc", OpenModeType.docSubmitForm, userName);代码改为poCtrl.webOpen("test.docx", OpenModeType.docSubmitForm, userName);

将新建的test.doc文件放在SetDataRegionByUserName.jsp同级目录下。

本地打开test.doc文件,随意输入一段文字,然后选中一部分内容(只让A用户编辑的区域)。

在选中的情况下,点击菜单栏插入-书签--书签名设置为PO_A_pro1--点击添加(书签名称格式为PO_开头,比如自己设置的书签名为PO_T001,那么记得将第三步中的DataRegion dA1 = doc.openDataRegion("PO_A_pro1");改为 DataRegion dA1 = doc.openDataRegion("PO_T001");   )。

java poi在线编辑文档 java实现在线编辑word_java poi在线编辑文档_06

然后同样的步骤选中另外一部分内容(只让B用户编辑的区域),在选中的情况下添加一个PO_B_pro1的书签。

然后启动项目直接访问aaa.jsp点击链接.此时会提示安装插件,点击安装成功后提示注册,填写相关信息,填写注册码Q37LN-W8NI-KFSQ-LEY3Y就可以打开文档.

注意:如果需要更丰富的功能,可以去pageoffice官网下载示例代码直接将samples4文件夹拷贝到Tomcat的webapps下,启动Tomcat,浏览器访问http://localhost:8080/Samples4/index.html,查看示例中的下面一个链接,直接看samples4文件夹下SetDrByUserWord文件夹里面的代码.

java poi在线编辑文档 java实现在线编辑word_在线_07

 

刚开始接触pageoffice的话,也可以看视频快速上手http://www.zhuozhengsoft.com/Technical/

java poi在线编辑文档 java实现在线编辑word_word_08