首页 > 其他分享 >pageoffice多用户同时在线编辑word文档

pageoffice多用户同时在线编辑word文档

时间:2023-10-11 17:15:04浏览次数:40  
标签:同时在线 word doc 用户 pageoffice 编辑 文档 Word PO

转载:多用户同时编辑

多用户同时编辑

注意

本文中展示的代码均为关键代码,复制粘贴到您的项目中,按照实际的情况,例如文档路径,用户名等做适当修改即可使用。

总体来说,各种Web系统中的Word文档在线处理大体可以分为以下四种流转处理方式:

  • A用户编辑完,流转给B用户修改,再流转给C用户修改,直到最后。每个用户都是针对全文修改的,如果需要在这一篇文档中能区分不同用户分别在文件中做了哪些修改,就需要留痕功能,PageOffice提供了强制留痕功能可以满足此需求,详细请参考强制留痕模式编辑
  • A用户起草文件,流转给B用户修改B用户负责的部分,再流转给C用户修改C用户负责的部分,B用户和C用户负责的部分不存在交叉的情况,而且每个用户都不希望别人改自己负责的部分,这种情况下使用PageOffice提供的控制编辑区域功能即可。
  • A用户起草文件,同时流转给B、C用户,两个用户都可以看到文档,还希望在这种情况下不限制用户的编辑顺序,甚至两用户可以同时打开文档进行编辑,但是B用户和C用户的编辑区域不交叉,每个人都编辑文档中各自负责的段落或章节,此时就可以使用本文所讲的多用户同时编辑功能。
  • A用户起草文件,同时流转给B、C用户,两个用户同时打开文档进行全文不限制区域的编辑,两用户可以实时的看到其他用户编辑的内容,甚至B用户插入或删除了大段的内容,影响到C用户的编辑焦点光标位置到处乱跳,甚至导致C用户都找不到自己的光标位置,如果参与同时编辑的用户还不止两个,甚至更多,那么这种影响会更严重,这种情况就属于各种互联网云文档产品所宣传的协同编辑或同时编辑,详细请参考云文档同时编辑功能存在的问题。PageOffice不支持此场景,因为这种同时实时编辑方式只是看起来美好,而在实际使用过程中存在的严重问题,多人同时编辑一个文档时会引起严重的错乱,一个用户对文档的增删改操作会影响到其他用户的内容和正在查看的视图界面,比如领导查看文档的同时,有其他人在编辑,看到的内容在不断的上下左右“抖动”,或者不同部门之间协作的时候也是这样,有人正在编写文档中的设计部分,有人同时处理文档中的法务问题,由于设计部分的内容插入了一张大的图片,法务人员正在查看和编辑的法律条款内容忽然往下“跑了”,甚至完全看不到了,需要重新翻页等各种问题,用户体验非常不好。在实际项目开发中,还是以前面三种流转处理方式居多,即使开发人员费尽心思实现了这个功能,也很少有人愿意使用,所以我们不推荐使用这种方式在线处理Word文档。

目前网络上的各种云文档产品一般采用HTML、CSS、JavaScript等技术可以用于实现文档的布局、样式、交互等方面的实现,例如实现文本输入、格式化、插入图片、表格等模拟真正的Word文档;后端采用文档解析技术,将Word文档和HTML互相转换;实现多人同时在线编辑功能时再调用一些实时协同编辑技术,例如WebSocket等,所以严格来说,此类在线云文档产品处理的是HTML,并不是真正的Word文档,从云文档系统导出的Word文档都是HTML格式转化出来的,因此云文档中的文档内容格式、样式、布局、排版、页码、总页数等与真正的Word文档格式有很大的出入。

PageOffice提供的多用户同时编辑文档的功能是基于Word文档局部编辑技术的。文档同时流转给B、C用户后,当B用户打开文件,设置B用户负责的段落区域可以编辑,其他段落章节全部只读;当C用户打开文件,设置C用户负责的段落区域可以编辑,其他段落章节全部只读,所以也无需使用留痕技术。B用户保存文件时,只保存B用户编辑区域中的内容为一个独立的子Word文件,当前打开的文档并不保存,当C用户打开文件时,把B用户编辑的子Word子文档再重新插入到当前文档中,但是C用户只能查看B用户编辑的内容,不能修改。C用户保存文件也是同理保存为一个子Word文件,当前文档不保存,B用户打开文件也是只能查看插入到当前文档中的C用户编辑的Word子文档内容,不能修改C用户的数据。这样一来,两个用户即使同时打开编辑同一篇文档,并先后保存,内容也不会互相覆盖,做到互不影响,实现同时编辑文档的效果。

在正式项目的Word文档处理环节,文档流转都是从一个用户到另一个用户串行处理的,使用同时编辑文档的目的大都是为了提高多部门合作编辑文件的效率,并行处理文档,所以希望在时间上不要有先后顺序的限制,不同部门的人员就无需要互相等待了,本质上还是各人负责各自的段落章节,所以就需要使用PageOffice提供的多用户同时编辑文档的功能了。

接下来以B、C两个用户同时编辑一份采购合同来举例说明一下PageOffice实现同时编辑文档的效果。假设B用户是销售人员,负责编辑合同中产品相关的内容;C用户是法务,负责编辑合同中的法律条款,分别对应了合同模板中的两个数据区域PO_Product和PO_Law,如下图所示:

编写代码判断不同用户打开文件时,设置不同的编辑区域:

PageOfficeCtrl poCtrl = new PageOfficeCtrl(request);
WordDocument wordDoc = new WordDocument();
wordDoc.openDataRegion("PO_JiaFang").setValue("北京XX科技有限公司");
wordDoc.openDataRegion("PO_YiFang").setValue("上海YY技术有限公司");
// hetong_product.doc和hetong_law.doc来自于saveData方法保存时得到的Word片段。
DataRegion dataRegion1 = wordDoc.openDataRegion("PO_Product");
dataRegion1.setValue("[word]D:\\documents\\hetong_product.doc[/word]"); // 插入Word片段到当前文档
DataRegion dataRegion2 = wordDoc.openDataRegion("PO_Law");
dataRegion1.setValue("[word]D:\\documents\\hetong_law.doc[/word]");
if (loginUser == 'B用户'){
  dataRegion1.setEditing(true); // 设置数据区域为可编辑状态
  dataRegion1.setSubmitAsFile(true); // 设置保存文件时,数据区域中的内容抽取为子Word文件提交
} else if (loginUser == 'C用户') {
  dataRegion2.setEditing(true);
  dataRegion2.setSubmitAsFile(true);
}
poCtrl.setWriter(wordDoc);//必须
poCtrl.setSaveDataPage("saveData");
poCtrl.WebOpen("D:\\documents\\hetong.docx", OpenModeType.docSubmitForm, "张三");

当B用户打开编辑产品相关数据时的效果如下图所示:

当C用户打开编辑法律条款相关内容时的效果如下图所示:

保存文件时,在后台方法saveData中创建com.zhuozhengsoft.pageoffice.wordreader命名空间中的WordDocument对象,提取数据区域中的子文档。

WordDocument doc = new WordDocument(request, response);
byte[] bWord;
// 数据区域PO_Product中的内容抽取为子Word文件:hetong_product.doc
DataRegion dr1 = doc.openDataRegion("PO_Product");
bWord = dr1.getFileBytes();
FileOutputStream fos1 = new FileOutputStream("D:\\documents\\hetong_product.doc");
fos1.write(bWord);
fos1.flush();
fos1.close();
// 数据区域PO_Law中的内容抽取为子Word文件:hetong_law.doc
DataRegion dr2 = doc.openDataRegion("PO_Law");
bWord = dr2.getFileBytes();
FileOutputStream fos2 = new FileOutputStream("D:\\documents\\hetong_law.doc");
fos2.write(bWord);
fos2.flush();
fos2.close();
doc.close();

因此,在使用PageOffice提供的同时编辑功能时,B用户在自己的区域编辑文档,不会实时传导到C用户或其他用户,不影响其他用户的编辑操作,如果某用户想查看其他用户编辑了哪些内容,那么保存并重新打开文件即可,所以不会造成错乱的用户体验。

标签:同时在线,word,doc,用户,pageoffice,编辑,文档,Word,PO
From: https://www.cnblogs.com/lhl77/p/17757654.html

相关文章

  • python 获取word页数
    没想到获取个word页数这么简单的需求,实现起来还挺难。1.根据网上说法:word文档中不保存总页数,只是在渲染时才根据文字和表格等去摆放到一页上,摆放不下时才展现下一页。所以从docx中取不到总页数2.因此,仅用docx库不行,还需要用win32com。而win32com实际是:pipinstallpypiwin32 ......
  • word如何标题编号不乱
    一问题每回标题编号都乱的一批,得手动调整,这次学习视频中,留意一下里面的操作,恍然大悟,还是三人行,有我师哇,关门造车,造个寂寞 二解决先写字,再选择样式,让系统自己生成标题 ......
  • WordPress网站被黑怎么办?【含解决方案】
    在我们的日常WordPress主题售后工作中,经常会有用户反馈网站出现问题,例如:阿里云提示后门木马文件;打开后跳转到其他地址;页面出现乱码;被添加了其他内容等,根据我们的经验,这种一般都是网站被黑导致的。 如何确认网站是否被黑根据以往经验,可以通过以下方式来判断:1、如果是阿里云提......
  • 图片归类生成文件夹然后生成word
    importosimportshutil#指定根文件夹路径root_folder="C:/Users/Administrator/Desktop/qrCode2"#创建两个子文件夹ifnotos.path.exists(os.path.join(root_folder,'20')):os.makedirs(os.path.join(root_folder,'20'))ifnotos.path.ex......
  • 执行wordcount报错及解决
    今天在执行wordcount词频统计时报错执行语句为hadoopjarshare/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jarwordcountwcinputwcoutput报错如下 这表示指定的输入路径hdfs://hadoop102:8020/user/atguigu/wcinput不存在然后我打开hadoop可视化网页一看确实......
  • 记一次Word 表格处理
    privatestaticvoidMain(string[]args){//假定,每个表格都只有三张照片且按以下方式排列/*"GIS平面图""GIS平面图""GIS平面图"---------------------------......
  • word自动生成目录和调整页码字体的方法
    一、word自动生成目录标题样式“,首先添加”一级标题“(也可以直接在段落中设置)。   按添加一级标题的方法添加”二级标题“、三级标题等。   按照上面的方法把各级标题添加好,下面就开始自动生成目录。”引用“→”Word左上角“目录”。二、调整页码字体参考:https://wenk......
  • word2010首行缩进、设置页码为第几页共几页、图片完全不显示等问题
    一、Word2010中首行缩进2字符:1、选中内容右击选择【段落】,或者点击开始菜单下“段落”选项卡右下角的斜拉箭头。2、在“特殊格式”中选择【首行缩进】,磅值设为“2字符”,点击确定即可,同时还可以设置行距。二、word2010设置页码为第几页共几页   具体操作方法如下:点击插入-页......
  • SAP ABAP 关于SMARTFORMS编辑文本出现WORD样式
    SAPABAP关于SMARTFORMS编辑文本出现WORD样式问题描述:SAPABAP关于SMARTFORMS编辑时文本默认使用WORD在使用smartforms打开编辑文本的时候会出现word样式,这样就会出现无法拖拽字段和系统默认信息情况,导致部分功能无法使用解决方案:通过SE38打开程序RSCPSETEDITOR将SAPscript......
  • visio怎么打开?除了使用visio之外,用word打开操作步骤
    https://zhidao.baidu.com/question/929270840857302739.html1、点击word软件,任意版本均可(2003-2016均可)。 2、点击“新建空白文档”,新建一个空白文档。 3、在顶部的菜单栏中点击“插入”。 4、在出现的菜单中找到“对象”,并点击“对象”按钮。 5、在弹出的对话框中......