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

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

后端代码

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

    PageOfficeCtrl poCtrl = new PageOfficeCtrl(request);
    // com.zhuozhengsoft.pageoffice.word命名空间的WordDocumentWriter
    WordDocumentWriter wordDoc = new WordDocumentWriter();
    //打开数据区域,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. 在SaveDataPage属性指向的地址接口中,创建com.zhuozhengsoft.pageoffice.word包下的WordDocumentReader对象获取数据。

    WordDocumentReader doc = new WordDocumentReader(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();

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

前端代码

本示例无前端关键代码。

SaveFilePage和SaveDataPage的区别

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

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

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

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

相关推荐
MilesShi2 小时前
从 scheduler_tick 到上下文切换:深入解析 Linux 内核的 TIF_NEED_RESCHED 标志设置流程
linux·运维·单片机
我爱云计算5 小时前
K8S详解(5万字详细教程)
linux·运维·云原生·容器·kubernetes
2301_794333917 小时前
实验室服务器配置|通过Docker实现Linux系统多用户隔离与安全防控
linux·服务器·docker·实验室
打码人的日常分享7 小时前
运维服务方案,运维巡检方案,运维安全保障方案文件
大数据·运维·安全·word·安全架构
揭老师高效办公7 小时前
在Word和WPS文字的表格中快速输入连续的星期、月、日
word·wps
荣光波比8 小时前
Nginx 实战系列(一)—— Web 核心概念、HTTP/HTTPS协议 与 Nginx 安装
linux·运维·服务器·nginx·云计算
绿箭柠檬茶10 小时前
Ubuntu 使用 Samba 共享文件夹
linux·运维·ubuntu
工藤新一¹11 小时前
Linux —— 虚拟进程地址空间
linux·运维·服务器·c/c++·虚拟进程地址空间
Aspiresky12 小时前
浅析Linux内核scatter-gather list实现
linux·dma·scatter/gather
奔跑吧 android12 小时前
【linux kernel 常用数据结构和设计模式】【数据结构 3】【模拟input子系统input_dev和input_handler之间的多对多关系】
linux·数据结构·input·kernel·input_dev·input_handler·input_handle