`
妮子321
  • 浏览: 82096 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java在线并发控制word文档

阅读更多

前言:

对于在线操作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 

版权声明:本文为博主原创文章,转载请附上博文链接!

分享到:
评论

相关推荐

    java在线编辑保存Word文件(支持跨浏览器)

    4. **用户编辑**: 用户在浏览器中看到的Word文档是PageOffice组件在服务器端模拟生成的,用户的所有编辑操作都会实时同步到服务器端的Word文档。 5. **保存文档**: 当用户完成编辑并点击“保存”按钮时,JavaScript...

    java后端开发规范word文档

    这份"java后端开发规范word文档"包含了多个方面的内容,包括但不限于编程风格、命名规则、异常处理、并发控制、数据库操作、单元测试、日志记录以及代码组织结构等。 1. **编程风格**:编程风格是代码可读性的基础...

    java swing 实现的word文档转换成pdf文档

    在给定的场景中,我们关注的是如何使用Java Swing来实现一个功能,即把Word文档转换为PDF文档。 首先,理解这个任务的背景,我们需要知道Word和PDF是两种常见的文档格式,各有其特点。Word文档通常用于编辑和格式化...

    java操作word(包含书签插值)

    Java作为一种广泛使用的编程语言,提供了多种库来操作Word文档,实现自动化填充模板,例如书签插值,这在合同制作中非常有用。本文将详细讲解如何使用Java操作Word,特别是针对书签插值的方法,以及相关的技术和工具...

    java freemarker导出word -包含多张图片导出

    在Java应用中,使用FreeMarker导出Word文档可以提供灵活的文本和数据结合的方式,尤其适用于生成报告、合同等复杂格式的文档。本篇将详细介绍如何使用FreeMarker与Java结合来导出包含多张图片的Word文档。 1. **...

    java编程规范(word文档)

    这份文档通常包含多个方面的内容,包括命名规范、注释规则、代码结构、异常处理、类型使用、并发编程等多个核心主题。下面我们将深入探讨这些关键知识点。 1. **命名规范**: - 类名应全大写字母,每个单词首字母...

    Java基础面试题 word文档类型

    这些只是Java基础面试中可能会涉及到的部分知识点,实际文档可能还包含更多细节,如网络编程、数据库操作、并发编程等。准备面试时,不仅要理解这些概念,还要通过实践来加深理解,以便在面试中能够流畅地讨论和解答...

    java学习文档(word)

    这份"java学习文档"显然是一份深入学习Java的重要资源,包含理论与实践的结合,以及具体的代码实现。 首先,"Java 理论与实践.doc"可能会涵盖Java的基础概念,如类、对象、封装、继承和多态等核心特性。它可能还会...

    java转换成word

    8. **样式和格式化:** Word文档的样式和格式化可以通过Java代码控制,包括字体、颜色、大小、对齐方式等。 9. **并发处理:** 如果需要批量处理大量文件,了解如何在多线程环境中操作文件和进行转换会很有帮助。 10...

    java文档excel、word、pdf、ppt转图片

    在Java编程环境中,将文档(如Excel、Word、PDF、PPT)转换为图片是一种常见的需求,这在处理大量文档预览、数据可视化或者移动设备兼容性问题时尤其有用。以下是一些关于如何使用Java实现这种转换的关键知识点: 1...

    java+pdf转word+word转pdf 无水印 无页数限制

    综上所述,实现"java+pdf转word+word转pdf 无水印 无页数限制"这一功能,需要对Java编程、PDF处理、Word文档结构有深入理解,以及熟练运用相关库。同时,需要在代码设计上考虑扩展性、可维护性和性能。

    java word文档转PDF工具.zip

    本资源"java word文档转PDF工具.zip"提供了一种使用Java编程语言将Microsoft Word文档(.doc或.docx)转换为PDF的解决方案。这个工具包包含了必要的库文件(jar包)以及一个示例(demo),使得开发者可以直接将其...

    JAVA WORD中实现电子印章效果 文字浮于印章上面

    在JAVA中实现Word文档中的电子印章效果,可以让文档看起来更加正式和权威,尤其适用于法律、合同等场景。这个过程涉及到的主要技术包括Java编程语言、Apache POI库以及可能的图像处理技术。Apache POI是一个流行的...

    Java认证课程Word文档

    Java认证课程Word文档包含了丰富的Java编程知识,特别针对SCJP(Sun Certified Programmer for the Java 2 Platform, Standard Edition)考试,这是Oracle公司为Java开发者提供的初级认证。SCJP证书证明了持证者对...

    用于测试java代码操作word文档

    Java作为一种广泛使用的编程语言,提供了多种库和工具来实现对Word文档的读写和操作。本文将深入探讨如何使用Java代码来操作Word文档。 首先,Java中的Apache POI是一个非常流行的库,它允许开发者使用Java处理...

    java程序员面试简历 WORD 模版

    首先,标题"java程序员面试简历 WORD 模版"表明这是一个专门为Java程序员设计的Word文档模板,用于构建面试简历。在制作简历时,你需要关注以下几点: 1. **个人信息**:简历的开头应包含姓名、联系方式(电话、...

    java认证课程--WORD文档

    本"java认证课程--WORD文档"可能包含了以下关键知识点: 1. **Java基础知识**:涵盖Java语法基础,如数据类型、变量、运算符、流程控制(if-else,switch,循环)、方法定义和调用,以及类和对象的概念。 2. **...

    java核心知识-word版2

    9. **并发编程**:Java并发库包含许多高级工具,如ExecutorService、Future、Callable和Fork/Join框架,以及并发集合类,如ConcurrentHashMap和CopyOnWriteArrayList,帮助开发者编写高效、安全的多线程代码。...

    java操作wordpdf图片生成图片水印

    首先,我们关注的是Java对Word文档的操作。Apache POI是一个非常流行的Java库,用于读写Microsoft Office格式的文件,包括Word(.docx)文档。通过使用Apache POI,我们可以打开Word文档,访问其中的图片元素,然后...

Global site tag (gtag.js) - Google Analytics