一、首先在word文件中给需要在后台获取数据的区域设置以PO_开头的书签。

二、通过pageoffice在线打开文件并编辑保存。有两种打开文件的模式

1、普通编辑模式(docNormalEdit)

普通编辑模式就是简单的打开文件,分别设置SaveDataPage保存数据的方法和SaveFilePage保存文件的方法即可,保存文件和保存数据是两个方法,不能写在一起

		PageOfficeCtrl poCtrl = new PageOfficeCtrl(request);
poCtrl.setServerPage("/api/poserver.zz");//设置服务页面
//添加自定义按钮
poCtrl.addCustomToolButton("保存", "Save", 1);
//设置保存数据的方法
poCtrl.setSaveDataPage("/api/SaveDataAndFile/SaveData");
//设置保存文档的方法
poCtrl.setSaveFilePage("/api/SaveDataAndFile/save");
//打开Word文档
poCtrl.webOpen("G:\\doc\\word1.docx", OpenModeType.docNormalEdit, "张三");

2、表单提交模式(docSubmitForm)

提交模式打开文件默认是不可编辑的,将需要编辑的数据区域的Editing设置为true,其他与普通编辑模式打开一样

PageOfficeCtrl poCtrl = new PageOfficeCtrl(request);
poCtrl.setServerPage("/api/poserver.zz");//设置服务页面 WordDocument wordDoc = new WordDocument();
//打开数据区域,openDataRegion方法的参数代表Word文档中的书签名称
DataRegion dataRegion1 = wordDoc.openDataRegion("PO_userName");
//设置DataRegion的可编辑性
dataRegion1.setEditing(true);
DataRegion dataRegion2 = wordDoc.openDataRegion("PO_deptName");
dataRegion2.setEditing(true);
DataRegion dataRegion3 = wordDoc.openDataRegion("PO_cause");
dataRegion3.setEditing(true);
poCtrl.setWriter(wordDoc);
//添加自定义按钮
poCtrl.addCustomToolButton("保存", "Save", 1);
//设置保存数据的方法
poCtrl.setSaveDataPage("/api/SaveDataAndFile/SaveData");
//设置保存文档的方法
poCtrl.setSaveFilePage("/api/SaveDataAndFile/save");
//打开Word文档
poCtrl.webOpen("G:\\doc\\word1.docx", OpenModeType.docSubmitForm, "张三");

三、保存文件

@RequestMapping("save")
public void save(HttpServletRequest request, HttpServletResponse response) {
FileSaver fs = new FileSaver(request, response);
fs.saveToFile("G:\\doc\\" + fs.getFileName());
fs.close();
}

这是本地打开word文件后的效果,书签的内容是在线编辑保存的

四、保存数据

获取到的数据可以保存到数据库或者其他地方,具体保存到哪里与pageoffice没有直接关系,根据自己的业务逻辑处理即可,我是直接在后台输出了下

@RequestMapping("SaveData")
public void saveData(HttpServletRequest request, HttpServletResponse response) {
com.zhuozhengsoft.pageoffice.wordreader.WordDocument doc = new com.zhuozhengsoft.pageoffice.wordreader.WordDocument(request, response);
//获取提交的数值
String dataUserName = doc.openDataRegion("PO_userName").getValue();
String dataDeptName = doc.openDataRegion("PO_deptName").getValue();
String cause = doc.openDataRegion("PO_cause").getValue();
System.out.println("姓名==="+dataUserName);
System.out.println("部门==="+dataDeptName);
System.out.println("原因==="+cause); doc.close();
}

参考链接:https://blog.csdn.net/qq_44306545/article/details/128418533

PageOffice既保存Word文件中指定区域的数据又保存整篇文件的更多相关文章

  1. 【译】 AWK教程指南 3计算并打印文件中指定的字段数据

    awk 处理数据时,它会自动从数据文件中一次读取一条记录,并会将该记录切分成一个个的字段:程序中可使用 $1, $2,... 直接取得各个字段的内容.这个特色让使用者易于用 awk 编写 reform ...

  2. 通过 mysqlbinlog 和 grep 命令定位binlog文件中指定操作

    1.binlog日志基本知识 MySQL的二进制日志binlog可以说是MySQL最重要的日志,它记录了所有的DDL和DML语句(除了数据查询语句select),以事件形式记录,还包含语句所执行的消耗 ...

  3. opencv保存选择图像中的区域(二)

    /* * ===================================================================================== * * Filen ...

  4. Java查找指定文件中指定字符的个数

    package lwl.youweb2.test; import java.io.BufferedReader; import java.io.FileReader; import java.io.I ...

  5. 另类爬虫:从PDF文件中爬取表格数据

    简介   本文将展示一个稍微不一样点的爬虫.   以往我们的爬虫都是从网络上爬取数据,因为网页一般用HTML,CSS,JavaScript代码写成,因此,有大量成熟的技术来爬取网页中的各种数据.这次, ...

  6. 《Java虚拟机原理图解》1.5、 class文件中的方法表集合--method方法在class文件中是怎样组织的

    0. 前言 了解JVM虚拟机原理是每一个Java程序员修炼的必经之路.但是由于JVM虚拟机中有很多的东西讲述的比较宽泛,在当前接触到的关于JVM虚拟机原理的教程或者博客中,绝大部分都是充斥的文字性的描 ...

  7. Android中突发情况Activity数据的保存和恢复

    Android中突发情况Activity数据的保存和恢复 写在前面:在我们的APP使用的过程中,总有可能出现各种手滑.被压在后台.甚至突然被杀死的情况.所以对APP中一些临时数据或关键持久型数据,就需 ...

  8. C#程序中:如何修改xml文件中的节点(数据)

    要想在web等程序中实现动态的数据内容给新(如网页中的Flash),不会更新xml文件中的节点(数据)是远远不够的,今天在这里说一个简单的xml文件的更新,方法比较基础,很适合初学者看的,保证一看就懂 ...

  9. 在C的头文件中定义的结构体,如何在cpp文件中引用

    解决方案1:在cpp文件中放置.c,且在该文件中引用变量 解决方案2:在一个cpp文件中包含.c,但在另一个cpp文件中使用结构体变量 cpp文件1 cpp文件2 #include "dia ...

  10. Java基础知识强化之IO流笔记52:IO流练习之 把一个文件中的字符串排序后再写入另一个文件案例

    1. 把一个文件中的字符串排序后再写入另一个文件 已知s.txt文件中有这样的一个字符串:"hcexfgijkamdnoqrzstuvwybpl" 请编写程序读取数据内容,把数据排 ...

随机推荐

  1. #期望dp#洛谷 6835 [Cnoi2020]线形生物

    题目 分析 设\(f[i]\)表示由点\(i\)走到点\(i+1\)的期望步数, \(dp[i]\)表示由点1走到点\(i+1\)的期望步数, 那么\(dp\)为\(f\)的前缀和,最后答案为\(dp ...

  2. 使用OHOS SDK构建mimalloc

    参照OHOS IDE和SDK的安装方法配置好开发环境. 从github下载源码. 执行如下命令: git clone https://github.com/microsoft/mimalloc.git ...

  3. RabbitMQ 05 直连模式-Spring Boot操作

    Spring Boot集成RabbitMQ是现在主流的操作RabbitMQ的方式. 官方文档:https://docs.spring.io/spring-amqp/docs/current/refer ...

  4. k8s之持久存储卷PV和PVC

    一.简介 在前边文章中可以看到,Kubernetes中依赖后端存储包括:NFS.Ceph.块存储等存储设备实现数据的远程存储以及数据持久化. 使用这些网络存储资源需要工程师对存储有一定的了解,并需要在 ...

  5. JavaScript 高阶技巧

    0x01 深浅拷贝 开发中经常需要拷贝(复制)一个对象,如果直接赋值,则对拷贝对象的修改会影响到源对象 const o1 = { a: 1, b: 2 } const o2 = o1 console. ...

  6. CentOS 编译安装golang

    一.下载go wget https://studygolang.com/dl/golang/go1.16.4.linux-amd64.tar.gz 二.解压到指定目录 tar -xvf go1.16. ...

  7. redis 简单整理——缓存设计[三十二]

    前言 简单整理一下缓存设计. 正文 缓存的好处: ·加速读写:因为缓存通常都是全内存的(例如Redis.Memcache),而 存储层通常读写性能不够强悍(例如MySQL),通过缓存的使用可以有效 地 ...

  8. spring boot 手动value和自动注入配置的区别[五]

    前言 前面两篇中,写道我们注入配置的方式,是通过是注解的方式完成,如下: @ConfigurationProperties(prefix ="person") 这意味着: 我们写一 ...

  9. i-MES生产制造管理系统-老化时间管控

    在生产过程中,产品的可靠性是影响其性能和寿命的关键因素,因此提高产品的可靠性是十分必要的,而老化测试是提高产品可靠性的重要手段之一,老化的时间随着产品不同而变化,因此老化时间管控变得尤为重要! 在ME ...

  10. 详细的讲一下微服务框架--SpringCloud

    一:微服务架构? 1.为什么需要微服务架构 大家都知道,最开始开发系统就是单机模式(only one computer).但是随着网络的不断发展,数据不断的增加,业务不断的增加,之前在一台机器上实现的 ...