当前位置: 首页 > 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的值来判断数据是否保存成功,从而进一步判断是否要保存文件。

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

http://www.lryc.cn/news/351576.html

相关文章:

  • 个人感觉对Material设计有用的几个网址
  • ubuntu18 安装sudo
  • 【力扣一轮】202.快乐数 1.两数之和
  • Vue小程序项目知识积累(二)
  • RK3588 Android13 预安装自己的apk应用及把这个应用设置为默认桌面
  • NLP(16)--生成式任务
  • 直播回放| 机器人任务挑战赛线上培训资料合集
  • flask Web应用的接口调试
  • 简单易懂的 API 集成测试方法
  • leetcode 239. 滑动窗口最大值、347.前 K 个高频元素
  • npm常用指令
  • 数字孪生技术在管理中有哪些实际应用?
  • LeetCode/NowCoder-链表经典算法OJ练习3
  • 如何理解HTML语义化
  • Solved problem: The number of elements in the character array
  • Flume Channels简介及官方用例
  • 【AI】如何用非Docker方法安装类GPT WebUI
  • 2024年ai知识库:特点、应用与搭建
  • 查询一个字符串在另一个字符串中出现的次数(java)
  • Docker in Docker 原理与实战
  • Rust学习心得
  • K8s deployment 进阶
  • python实现二叉搜索树(AVL树)简单样例
  • Day47 打家劫舍123
  • OceanBase 开源社区新进展|obdiag SIG成立
  • React类组件生命周期详解
  • 智能车竞赛指南:从零到一,驶向自动驾驶的未来
  • 微服务项目收获和总结---第2,3天(分库分表思想,文章业务)
  • 【全网最全】2024电工杯数学建模A题21页初步参考论文+py代码+保奖思路等(后续会更新)
  • 怎么通过OpenAI API调用其多模态大模型(GPT-4o)