当前位置: 首页 > news >正文

国产linux系统(银河麒麟,统信uos)使用 PageOffice 国产版在线编辑word文件,同时保存数据和文件

PageOffice 国产版 :支持信创系统,支持银河麒麟V10和统信UOS,支持X86(intel、兆芯、海光等)、ARM(飞腾、鲲鹏、麒麟等)芯片架构。

在OA办公、文档流转等各个Web系统中,实现最简单的打开编辑保存文件功能,调用PageOffice只需要几行代码就可以完成。

在实际应用中,例如在线签订合同的时候,合同的签订日期,合同号等等这些信息既要保存到数据库,合同签订后又要将整个合同文件保存起来。这时候就需要用到PageOffice的保存数据区域数据的同时保存整个文件的功能。

后端代码

1.后端打开文件的接口方法中,在webOpen方法之前给SaveFilePage和SaveDataPage方法赋值(设置好保存时由哪个地址接口负责接收数据和处理控件上传的文件流)。

PageOfficeCtrl poCtrl = new PageOfficeCtrl(request);
// com.zhuozhengsoft.pageoffice.wordwriter命名空间的WordDocument
WordDocument wordDoc = new WordDocument(); 
//打开数据区域,openDataRegion方法的参数代表Word文档中的书签名称
wordDoc.openDataRegion("PO_contractNum").setEditing(true);
wordDoc.openDataRegion("PO_contractDate").setEditing(true);poCtrl.setWriter(wordDoc);// 必须。
poCtrl.setSaveDataPage("saveData"); //设置保存数据时的接口地址
poCtrl.setSaveFilePage("saveFile");//设置保存文件时的接口地址
//webOpen的第一个参数支持能够输出下载文件的Url相对地址或者文件在服务器上的磁盘路径两种方式
//查看详细,请在本站搜索“PageOffice属性或方法中涉及到的URL路径或磁盘路径的说明”
poCtrl.webOpen("doc/test.docx", OpenModeType.docSubmitForm, "张三");

2.(1)在SaveDataPage属性指向的地址接口中,创建com.zhuozhengsoft.pageoffice.wordreader.WordDocument包下的WordDocument对象获取数据。

WordDocument doc = new WordDocument(request, response);
//获取提交的数值
String contractNum = doc.openDataRegion("PO_contractNum").getValue();
String contractDate = doc.openDataRegion("PO_contractDate").getValue();
String contractId = doc.getFormField("contractId");//getFormField的参数是Form控件的id
/**
*实际开发中,这块代码一般是连接数据库将上面获取的数据更新到数据库中
*/
doc.close();

2.(2)在SaveFilePage属性指向的地址接口中,创建FileSaver对象处理文件的保存工作。

FileSaver fs = new FileSaver(request, response);
fs.saveToFile(request.getSession().getServletContext().getRealPath("doc/") + fs.getFileName());
fs.close();

SaveFilePage和SaveDataPage的区别

  • SaveFilePage:指定的页面可接受二进制文件流、Form域,直接保存修改后的文件。指定的页面只能创建FileServer对象。
  • SaveDataPage:指定的页面可接收页面提交的Word数据区域、Excel表格数据、Form域。指定的页面只能创建PageOffice.ExcelReader或PageOffice.WordReader命名空间下的对象。
  • SaveFilePage的使用:只需要保存修改后的文档,而不需要提取文档内容时。
  • SaveDataPage的使用:需要提交文档内容或用户输入的文档内容时。

保存文档和数据的事务实现

在实际开发中,我们可能会遇到这样的问题:如果数据保存失败了,PageOffice是否会继续保存文档呢?事实上,PageOffice的保存机制是先保存数据,再保存文件。但是,如果我们想用事务控制来解决这个问题,可能会遇到一些困难。原因是处理保存数据的页面和保存文档的页面通常是两个不同的servlet或action,这与事务机制并不完全符合。但是我们可以通过模拟实现一个“事务”,例如,在Session中设置一个变量来标识状态,比如用flag来表示,初始值为false。当数据保存成功时,将flag设置为true;保存失败时,flag为false。然后,在保存文件的页面中,根据flag的值来判断数据是否保存成功,从而进一步判断是否要保存文件。

参考链接:保存数据区域数据同时保存文档

相关文章:

  • Springboot 自定义线程池 ThreadPoolTaskExecutor
  • 标准库算法
  • Android 观察者模式(OBSERVER)应用详解
  • Spring与Netty底层源码解析
  • 一个基于HOOK机制的微信机器人
  • 论文阅读--ViLD
  • 力扣226. 翻转二叉树(DFS的两种思路)
  • 开源模型应用落地-模型量化-Qwen1.5-7B-Chat-GPTQ-Int8(一)
  • 初见flyway
  • MongoDB 和 MySQL 的对比
  • Flutter 页面布局 Flex Expanded弹性布局
  • 谷歌上架,个人号比企业号好上?“14+20”封测如何解决,你知道了吗
  • 基于RV1126的AI网络摄像机AHD、CVBS、HDMI接口的区别有哪些?支持8路AHD摄像头,支持AI实时分析
  • Python-温故知新
  • 2024上海国际化工自动化仪器仪表展览会
  • [译]前端离线指南(上)
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • Fundebug计费标准解释:事件数是如何定义的?
  • java8-模拟hadoop
  • js ES6 求数组的交集,并集,还有差集
  • laravel with 查询列表限制条数
  • Mocha测试初探
  • Python连接Oracle
  • SOFAMosn配置模型
  • Vue 2.3、2.4 知识点小结
  • Vue ES6 Jade Scss Webpack Gulp
  • windows-nginx-https-本地配置
  • 回流、重绘及其优化
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 系统认识JavaScript正则表达式
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • 整理一些计算机基础知识!
  • ​【数据结构与算法】冒泡排序:简单易懂的排序算法解析
  • ​什么是bug?bug的源头在哪里?
  • ​字​节​一​面​
  • # 数论-逆元
  • #NOIP 2014# day.1 T2 联合权值
  • #数学建模# 线性规划问题的Matlab求解
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • (javaweb)Http协议
  • (Ruby)Ubuntu12.04安装Rails环境
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (汇总)os模块以及shutil模块对文件的操作
  • (接口封装)
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (全注解开发)学习Spring-MVC的第三天
  • (五)MySQL的备份及恢复
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • .net 8 发布了,试下微软最近强推的MAUI
  • .net core 管理用户机密