国产麒麟、uos在线编辑word文件并控制编辑区域(局部编辑)

windows系统也适用,该插件可同时支持windows和国产系统

在实际项目开发中,以下场景可能会用到Word局部编辑功能:

  • 合同审批
  • 公文流转
  • 策划设计报告
  • 汇签单
  • 招投标(标书文件)
  • 其他,有模板且需要不同人员协作编辑的场景

PageOffice使用表单模式docSubmitForm打开Word文件之后,只有设置了Editing属性为true的数据区域部分是可以编辑的,Word中的其他部分都是只读不可编辑的,所以利用此特性就可以控制Word文件编辑区域,只要保存的时候不处理提交的数据,只是保存文件的话,就实现了局部编辑功能。

控制编辑区域实现局部编辑的功能,通常用在以下两个方面:

  • 只是为了控制Word文档中哪些位置属于可编辑区域,避免用户误操作修改、或故意修改编辑区域以外的内容;
  • 多人负责编辑Word文档中不同章节的情况下,控制不同用户编辑各自不同的区域;

以下我们就合同审批和公文流转两个场景来举例说明,PageOffice是如何使用局部编辑功能分别实现这两个需求的。

注意

“数据区域”是指word文件中名称以“PO_”开头的书签。

合同审批的需求

某公司要在线上起草采购合同,合同模板是固定的,合同条款几乎固定不变,只有签订合同的供货单位名称和担保人是根据实际情况变动的。因此,在线上制作合同时,只需要让合同中那些可变的区域可编辑,其他位置则不能编辑,这时就需要用到PageOffice的局部编辑功能。

在实际项目中,合同审批肯定会用到更多的数据区域,本文为了简明扼要,所以仅以有限的几个数据区域来举例说明。

首先,制作一个销售合同模板,比如:D:\template1.docx,里面包含了购货单位、供货单位、合同编号、产品名称、担保人等数据区域,如下图所示:

 然后,起草文件时,编程控制用表单模式docSubmitForm打开Word文件,并调用WordDocument对象动态填充从Web系统数据库中获取的所有数据到Word模板,生成合同文件的初稿,同时设置供货单位(PO_Supplier)和担保人(PO_Guarantor)两个数据区域的Editing属性为true,即实现除供货单位名称和担保人之外的所有内容都是只读不可编辑的。做如下编码:

PageOfficeCtrl poCtrl = new PageOfficeCtrl(request);

WordDocument wordDoc = new WordDocument();
//打开数据区域,openDataRegion方法的参数代表Word文档中的书签名称
wordDoc.openDataRegion("PO_Buyer").setValue("北京幻想科技有限公司");
wordDoc.openDataRegion("PO_No").setValue("HT20230211");
wordDoc.openDataRegion("PO_ProductName").setValue("三防热敏标签纸");

DataRegion  supplierNameDr = wordDoc.openDataRegion("PO_Supplier");
supplierNameDr.setValue("湖北某某有限公司");
supplierNameDr.setEditing(true); // true代表当前数据区域可编辑,false为不可编辑。默认值是false

DataRegion  guarantorDr = wordDoc.openDataRegion("PO_Guarantor");
guarantorDr.setValue("张三");
guarantorDr.setEditing(true);

poCtrl.setWriter(wordDoc);//必须
poCtrl.setSaveFilePage("saveFile"); // 设置保存文件的接口地址
poCtrl.WebOpen("D:\\template1.docx", OpenModeType.docSubmitForm, "李四");

生成的合同初稿如下图所示:

保存合同文件时,在SaveFilePage属性指向的地址接口中,调用FileSaver对象保存合同文件为正式的文件名,比如:hetong001.docx,后面的流转和审核环节对hetong001.docx进行处理即可。

FileSaver fs = new FileSaver(request, response);
fs.saveToFile("D:\\hetong001.docx");
fs.close();

这样一来,合同起草人员或合同流转审阅环节的其他人员,就只需要根据具体情况修改合同中相关数据,无需担心误操作修改了与Web系统紧密相关的关键数据(如“合同编号”),或其他关键合同条款。最后合同的审核环节,领导只需要关注合同中可编辑区域的数据,无需逐一核对全文数据,不用担心可编辑区域以外的其他内容发生变动,极大的提高了领导审核合同的效率。

公文流转的需求

起草人起草文档,然后文档在部门之间流转(或在人员之间流转),一个时常会遇到的需求就是,要求A部门人员不能编辑B部门区域的内容,反之亦然,否则就不能划清部门之间的责任。总的来说就是不同的人负责编辑文章中不同的区域,所以就需要控制编辑区域的功能。此功能基本上属于OA系统、文档系统、合同管理等各种类型的文档审核流转的核心功能。比如:打开公司公文,里面包含两个数据区域“研发部意见”和“销售部意见”,名称分别为:PO_YanFa、PO_XiaoShou,实现A用户打开公文后只能编辑研发部意见,B用户打开公文后只能编辑销售部意见,可以做如下编码:

PageOfficeCtrl poCtrl = new PageOfficeCtrl(request);

WordDocument wordDoc = new WordDocument();

if (loginUser.equals("A用户")){
  wordDoc.openDataRegion("PO_YanFa").setEditing(true); // 设置数据区域为可编辑状态
} else if (loginUser.equals("B用户") {
  dwordDoc.openDataRegion("PO_XiaoShou").setEditing(true); 
}

poCtrl.setWriter(wordDoc);//必须
poCtrl.setSaveFilePage("saveFile");
poCtrl.WebOpen("D:\\documents\\hetong.docx", OpenModeType.docSubmitForm, "张三");

当A用户打开公文时只能编辑研发部意见的效果,如下图所示(只有黄色中括号内的区域可以编辑):

当B用户打开公文时只能编辑销售部意见的效果,如下图所示(只有黄色中括号内的区域可以编辑):

编辑区域的定义

方法一:编辑Word模板,即在Word文档中添加书签。在D盘根目录下新建Word文件,比如:D:\template1.docx,打开文件用光标选中需要标记为书签的文字,比如“[公司名称]”,然后点Word菜单中的“插入”-“书签”,就会弹出一个标题为“书签”的对话框(如下图所示),输入新书签的名称,注意:书签名必须以“PO_”开头,并由字母和数字组成,但中间不能有空格。点右侧的“添加”按钮,新的书签名将出现在下面的列表中。此方法适用于,模板在项目开发时就固定下来不再修改的场景。

方法二:请参考“用户自定义模板中数据区域”章节。此方法适用于,在项目发布运行后,用户还需要修改调整模板、甚至新建模板的场景。

原文链接:控制Word编辑区域(局部编辑) | PageOffice 开发者中心

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/802624.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

OpenGL笔记十三之Uniform向量数据传输、使用glUniform3f和glUniform3fv

OpenGL笔记十三之Uniform向量数据传输、使用glUniform3f和glUniform3fv —— 2024-07-14 晚上 bilibili赵新政老师的教程看后笔记 code review! 文章目录 OpenGL笔记十三之Uniform向量数据传输、使用glUniform3f和glUniform3fv1.glUniform3f1.1.运行1.2.vs1.3.fs1.4.shader.…

<数据集>竹子缺陷检测数据集<目标检测>

数据集格式:VOCYOLO格式 图片数量:2953张 标注数量(xml文件个数):2953 标注数量(txt文件个数):2953 标注类别数:3 标注类别名称:[Bud, Sprouted_Bud, Damage_Bud] 序号类别名称图片数框数1Bud2288229…

LintcCode 468 · 对称二叉树【简单 二叉树 递归 Java】

题目 题目链接: https://www.lintcode.com/problem/468/description?showListFetrue&page1&problemTypeId2&tagIds371&orderingid&pageSize50 思路 递归 Java代码 /*** Definition of TreeNode:* public class TreeNode {* public int…

推送Prometheus数据到N9E并通过Grafana展示

小编在上篇文章中已经通过安装jenkins并构建自动化测试项目并发送了消息通知,但是这只是群内的通知,如何通过大盘展示呢?经过讨论,暂时选择采用的实现思路:通过jenkins自动化执行结果来推送Prometheus数据到N9E&#x…

opencv学习:图像视频的读取截取部分图像数据颜色通道提取合并颜色通道边界填充数值计算图像融合

一、计算机眼中的图像 1.图像操作 构成像素点的数字在0~255之间 RGB叫做图像的颜色通道 h500,w500 2.灰度图像 3. 彩色图像 4.图像的读取 5.视频的读取 cv2.VideoCapture()--在OpenCV中,可以使用VideoCapture来读取视频文件,或是摄像头数…

专业电脑硬盘修复教程,教你轻松搞定!

电脑硬盘作为电脑存储系统的重要组成部分,其健康状态直接影响到数据的安全和系统的运行速度。硬盘出现问题可能导致数据丢失、系统崩溃,甚至无法启动。及时进行硬盘修复,不仅可以恢复数据,还能延长硬盘的使用寿命。本文将详细介绍…

【经验分享】关于静态分析工具排查 Bug 的方法

文章目录 编译器的静态分析cppcheck安装 cppcheck运行 cppcheck 程序员的日常工作,不是摸鱼扯皮,就是在写 Bug。虽然这是一个梗,但也可以看出,程序员的日常一定绕不开 Bug。而花更少的时间修复软件中的 Bug,且不引入新…

华为USG6000V防火墙安全策略用户认证

目录 一、实验拓扑图 二、要求 三、IP地址规划 四、实验配置 1🤣防火墙FW1web服务配置 2.网络配置 要求1:DMZ区内的服务器,办公区仅能在办公时间内(9:00-18:00)可以访问,生产区的设备全天可以访问 要求2:生产区不…

(01)Unity使用在线AI大模型(使用百度千帆服务)

目录 一、概要 二、环境说明 三、申请百度千帆Key 四、使用千帆大模型 四、给大模型套壳 一、概要 在Unity中使用在线大模型分为两篇发布,此篇文档为在Python中使用千帆大模型,整体实现逻辑是:在Python中接入大模型—>发布为可传参的…

NSSCTF中24网安培训day2中web题目【下】

[NISACTF 2022]easyssrf 这道题目考察的是php伪协议的知识点 首先利用file协议进行flag查找 file:///flag.php 接着我们用file协议继续查找fl4g file:///fl4g 接着我们访问此文件,得到php代码如下 这里存在着stristr的函数&#x…

CREC晶振产品分类

CREC晶振大类有石英晶体谐振器、石英晶体振荡器、石英晶体滤波器 其中石英晶体谐振器: KHZ石英谐振器 车规级32.768KHz石英谐振器 专为汽车RTC应用而设计,通过AECQ-200可靠性测试,满足汽车电子的高标准时频需求,为客户提供可靠…

打破平台限制,使智能手机和平板电脑上无缝运行Windows x86/x64架构的软件和游戏的一款安卓应用

大家好,今天给大家分享一款专为Android设备设计的模拟器应用Winlator。其核心功能是能够在基于ARM架构的智能手机和平板电脑上无缝运行Windows x86/x64架构的软件和游戏。 Winlator是一款Android应用程序,它允许用户使用Wine和Box86/Box64在Android设备上…

通过Dockerfile构建镜像

案例一: 使用Dockerfile构建tomcat镜像 cd /opt mkdir tomcat cd tomcat/ 上传tomcat所需的依赖包 使用tar xf 解压三个压缩包vim Dockerfile FROM centos:7 LABEL function"tomcat image" author"tc" createtime"2024-07-16"ADD j…

4. JavaSE ——【移位运算符】

📖 开场白 亲爱的读者,大家好!我是一名正在学习编程的高校生。在这个博客里,我将和大家一起探讨编程技巧、分享实用工具,并交流学习心得。希望通过我的博客,你能学到有用的知识,提高自己的技能&…

《后端程序员 · Nacos 常见配置 · 第一弹》

📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗 🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数…

MQ基础1

对应B站视频: MQ入门-01.MQ课程介绍_哔哩哔哩_bilibili 微服务一旦拆分,必然涉及到服务之间的相互调用,目前我们服务之间调用采用的都是基于OpenFeign的调用。这种调用中,调用者发起请求后需要等待服务提供者执行业务返回结果后…

C#小结:未能找到类型或命名空间名“xxx”(是否缺少 using 指令或程序集引用?)

方案一:移除类库这些失效的引用,下载对应版本的dll(如有则不需要重复下载),重新添加引用 方案二:类库右键属性-调整目标框架版本(一般是降低版本) 方案三:调整类库编译顺…

【TensorRT】Yolov5-DeepSORT 目标跟踪

Yolov5-DeepSORT-TensorRT 本项目是 Yolo-DeepSORT 的 C 实现,使用 TensorRT 进行推理 🚀🚀🚀 开源地址:Yolov5_DeepSORT_TensorRT,求 star⭐ ~ 引言 ⚡ 推理速度可达25-30FPS,可以落地部署&…

分布式 I/O 系统Modbus TCP 耦合器BL200

BL200 耦合器是一个数据采集和控制系统,基于强大的 32 位微处理器设计,采用 Linux 操作系统,可以快速接入现场 PLC、SCADA 以及 ERP 系统, 内置逻辑控制、边缘计算应用,支持标准 Modbus TCP 服务器通讯,以太…

<数据集>铁轨缺陷检测数据集<目标检测>

数据集格式:VOCYOLO格式 图片数量:844张 标注数量(xml文件个数):844 标注数量(txt文件个数):844 标注类别数:3 标注类别名称:[Spalling, Squat, Wheel Burn] 序号类别名称图片数框数1Spalling3315522…