前言:
对于在线操作word文档的OA系统来说有一个常见问题,就是对于服务端放置的word文档,如果有两个人甚至更多客户端同时打开该文档时,就会存在并发问题。有了并发问题就会出现操作的文档保存内容被覆盖的问题,造成用户编辑数据丢失,这是很致命的,该如何解决呢?
首先我们可以通过系统业务逻辑来限制系统层次的并发问题。比如张三通过某链接打开了一个文档,同时向后台发送ajax请求将当前系统登录用户名,文件名,以及是否打开文档的标识存入数据库。等张三关闭文档时再发ajax去将数据库内容更新,或将之前那条数据删除。在李四点击同一个链接时,ajax去数据库查询一下此文件的打开者以及打开状态。如果标识是true,那就提醒李四文档正在被编辑,不让他打开文档。 或者有用shiro做权限验证的,可以直接让有权限的王五在页面看到打开文档的链接,不让没有权限的赵六看到页面打开文档的链接。
系统层次解决并发问题有好多方案,但是都仅限于此。想要从word文档层次解决并发问题呢?或者我想要张三打开文档的时候也让李四打开,但是李四只能只读呢?那就必须要获取word文档状态,这个状态必须是office返回的,那就必须要调用office的第三方程序接口了。对于Java开发人员来讲,office的接口需要在什么环境运行?需要调用那些接口?这些问题都会带来大量的工作量,甚至对于没接触过VBA的Java工程师来讲,简直是一场灾难。
那就找jar包解决吧!!!这里提供一个pageoffice的插件供大家学习。
先看效果:
张三打开文档,此时是可以编辑的。
同时,再点击一下李四的请求(这里虽然为两个链接,但是访问的是同一个地址)
此时,会提示张三正在修改,如果点击忽略,依然可以打开文档,并且是只读状态。
部署步骤(只需5步)
1.官网http://www.zhuozhengsoft.com/dowm/下载集成文件,引入jar包,配置web.xml
去刚才下载的集成文件中找到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标签
<div style=" margin-top:50px; height:170px; ">
<span style=" color:Red;">操作说明:</span><span>首先点击“张三打开文件”会在弹出窗口中打开Word文档(不要关闭窗口),<br />再点击“李四打开文件”,看并发控制效果。</span><br /><br />
1:<a href="javascript:POBrowser.openWindowModeless('Word.jsp?userid=1' , 'width=1200px;height=800px;');">张三打开文件</a><br /><br />
2:<a href="javascript:POBrowser.openWindowModeless('Word.jsp?userid=2' , 'width=1200px;height=800px;');">李四打开文件</a>
</div>
3.在父页面同级目录下创建一个名为Word.jsp的文件
<%@ page language="java"
import="java.util.*,com.zhuozhengsoft.pageoffice.*"
pageEncoding="utf-8"%>
<%
String userName = "somebody";
String userId = request.getParameter("userid").toString();
if (userId.equals("1"))
{
userName = "张三";
}
else
{
userName = "李四";
}
PageOfficeCtrl poCtrl=new PageOfficeCtrl(request);
poCtrl.setServerPage(request.getContextPath()+"/poserver.zz");
poCtrl.addCustomToolButton("保存","Save",1);
poCtrl.setSaveFilePage("SaveFile.jsp");
//设置并发控制时间
poCtrl.setTimeSlice(20);
poCtrl.webOpen("test.doc",OpenModeType.docRevisionOnly,userName);
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>最简单的打开保存Word文件</title>
</head>
<body>
<script type="text/javascript">
function Save() {
document.getElementById("PageOfficeCtrl1").WebSave();
}
//文档关闭前先提示用户是否保存
function BeforeBrowserClosed(){
if (document.getElementById("PageOfficeCtrl1").IsDirty){
if(confirm("提示:文档已被修改,是否继续关闭放弃保存 ?"))
{
return true;
}else{
return false;
}
}
}
</script>
<form id="form1" >
当前用户: <%=userName %>。
<div style=" width:auto; height:700px;">
<%=poCtrl.getHtmlCode("PageOfficeCtrl1")%>
</div>
</form>
</body>
</html>
4.在父页面同级目录下创建一个SaveFile.jsp文件
<%@ page language="java" import="java.util.*,com.zhuozhengsoft.pageoffice.*" pageEncoding="utf-8"%>
<%
FileSaver fs=new FileSaver(request,response);
fs.saveToFile(request.getSession().getServletContext().getRealPath("ConcurrencyCtrl/doc/")+"/"+fs.getFileName());
fs.close();
%>
5.新建一个名为test.doc的word文件(如果新建的是docx文件就将第三步的poCtrl.webOpen("test.doc",OpenModeType.docRevisionOnly,userName);代码改为poCtrl.webOpen("test.docx",OpenModeType.docRevisionOnly,userName);
将新建的word文件随便编辑点内容放在父页面同级目录下.然后启动项目直接访问aaa.jsp点击链接.此时会提示安装插件,点击安装成功后提示注册,填写相关信息,填写注册码CA1XB-MF7Y-12ST-PSBP2就可以打开文档.
注意:如果需要更丰富的功能,大家可以去pageoffice官网下载示例代码直接将samples4文件夹扔到Tomcat的webapps下,启动Tomcat,浏览器访问http://localhost:8080/Samples4/index.html,查看示例中的下面一个链接,直接看samples4文件夹下ConcurrencyCtrl文件夹里面的代码.
刚开始接触pageoffice的话,也可以看视频快速上手.http://www.zhuozhengsoft.com/Technical/
---------------------
作者:it_zhang81
来源:CSDN
原文:https://blog.csdn.net/IT_zhang81/article/details/84136659
版权声明:本文为博主原创文章,转载请附上博文链接!
相关推荐
4. **用户编辑**: 用户在浏览器中看到的Word文档是PageOffice组件在服务器端模拟生成的,用户的所有编辑操作都会实时同步到服务器端的Word文档。 5. **保存文档**: 当用户完成编辑并点击“保存”按钮时,JavaScript...
这份"java后端开发规范word文档"包含了多个方面的内容,包括但不限于编程风格、命名规则、异常处理、并发控制、数据库操作、单元测试、日志记录以及代码组织结构等。 1. **编程风格**:编程风格是代码可读性的基础...
在给定的场景中,我们关注的是如何使用Java Swing来实现一个功能,即把Word文档转换为PDF文档。 首先,理解这个任务的背景,我们需要知道Word和PDF是两种常见的文档格式,各有其特点。Word文档通常用于编辑和格式化...
Java作为一种广泛使用的编程语言,提供了多种库来操作Word文档,实现自动化填充模板,例如书签插值,这在合同制作中非常有用。本文将详细讲解如何使用Java操作Word,特别是针对书签插值的方法,以及相关的技术和工具...
在Java应用中,使用FreeMarker导出Word文档可以提供灵活的文本和数据结合的方式,尤其适用于生成报告、合同等复杂格式的文档。本篇将详细介绍如何使用FreeMarker与Java结合来导出包含多张图片的Word文档。 1. **...
这份文档通常包含多个方面的内容,包括命名规范、注释规则、代码结构、异常处理、类型使用、并发编程等多个核心主题。下面我们将深入探讨这些关键知识点。 1. **命名规范**: - 类名应全大写字母,每个单词首字母...
这些只是Java基础面试中可能会涉及到的部分知识点,实际文档可能还包含更多细节,如网络编程、数据库操作、并发编程等。准备面试时,不仅要理解这些概念,还要通过实践来加深理解,以便在面试中能够流畅地讨论和解答...
这份"java学习文档"显然是一份深入学习Java的重要资源,包含理论与实践的结合,以及具体的代码实现。 首先,"Java 理论与实践.doc"可能会涵盖Java的基础概念,如类、对象、封装、继承和多态等核心特性。它可能还会...
8. **样式和格式化:** Word文档的样式和格式化可以通过Java代码控制,包括字体、颜色、大小、对齐方式等。 9. **并发处理:** 如果需要批量处理大量文件,了解如何在多线程环境中操作文件和进行转换会很有帮助。 10...
在Java编程环境中,将文档(如Excel、Word、PDF、PPT)转换为图片是一种常见的需求,这在处理大量文档预览、数据可视化或者移动设备兼容性问题时尤其有用。以下是一些关于如何使用Java实现这种转换的关键知识点: 1...
综上所述,实现"java+pdf转word+word转pdf 无水印 无页数限制"这一功能,需要对Java编程、PDF处理、Word文档结构有深入理解,以及熟练运用相关库。同时,需要在代码设计上考虑扩展性、可维护性和性能。
本资源"java word文档转PDF工具.zip"提供了一种使用Java编程语言将Microsoft Word文档(.doc或.docx)转换为PDF的解决方案。这个工具包包含了必要的库文件(jar包)以及一个示例(demo),使得开发者可以直接将其...
Java认证课程Word文档包含了丰富的Java编程知识,特别针对SCJP(Sun Certified Programmer for the Java 2 Platform, Standard Edition)考试,这是Oracle公司为Java开发者提供的初级认证。SCJP证书证明了持证者对...
Java作为一种广泛使用的编程语言,提供了多种库和工具来实现对Word文档的读写和操作。本文将深入探讨如何使用Java代码来操作Word文档。 首先,Java中的Apache POI是一个非常流行的库,它允许开发者使用Java处理...
首先,标题"java程序员面试简历 WORD 模版"表明这是一个专门为Java程序员设计的Word文档模板,用于构建面试简历。在制作简历时,你需要关注以下几点: 1. **个人信息**:简历的开头应包含姓名、联系方式(电话、...
在JAVA中实现Word文档中的电子印章效果,可以让文档看起来更加正式和权威,尤其适用于法律、合同等场景。这个过程涉及到的主要技术包括Java编程语言、Apache POI库以及可能的图像处理技术。Apache POI是一个流行的...
本"java认证课程--WORD文档"可能包含了以下关键知识点: 1. **Java基础知识**:涵盖Java语法基础,如数据类型、变量、运算符、流程控制(if-else,switch,循环)、方法定义和调用,以及类和对象的概念。 2. **...
首先,我们关注的是Java对Word文档的操作。Apache POI是一个非常流行的Java库,用于读写Microsoft Office格式的文件,包括Word(.docx)文档。通过使用Apache POI,我们可以打开Word文档,访问其中的图片元素,然后...
9. **并发编程**:Java并发库包含许多高级工具,如ExecutorService、Future、Callable和Fork/Join框架,以及并发集合类,如ConcurrentHashMap和CopyOnWriteArrayList,帮助开发者编写高效、安全的多线程代码。...