国产麒麟、统信系统在线编辑word并拆分成多个子文件

在实际的开发过程中,有时会遇到希望提取Word文档中部分内容保存为子文件的需求,PageOffice支持提取Word文档数据区域中的内容为一个Word文件流,在服务器端创建PageOffice的WordReader命名空间中的WordDocument对象并获取到DataRegion对象,再调用DataRegion对象的FileBytes属性就可以得到这个子Word文件流。

注意

PageOffice获取Word文档中指定位置的数据,是通过调用PageOffice获取数据区域的功能,实现此目的。在PageOffice的概念里提到的数据区域,本质上就是书签,但是只有"PO_"开头的书签才叫数据区域。

后端代码

在后端编写代码调用webOpen方法以表单提交模式docSubmitForm打开文件,设置数据区域SubmitAsFile属性为true,并设置接收处理PageOffice客户端控件提交数据的服务器端后台方法为:saveData,如果用户在线编辑文档保存时,数据区域中的内容就会被抽取为Word文件流,并提交到服务器端后台方法saveData,保存为子文件即可。

java 复制代码
    PageOfficeCtrl poCtrl = new PageOfficeCtrl(request);

    WordDocument wordDoc = new WordDocument();
    //打开数据区域,openDataRegion方法的参数代表Word文档中的书签名称
    DataRegion dataRegion1 = wordDoc.openDataRegion("PO_Sub1");
    dataRegion1.setSubmitAsFile(true);
    DataRegion dataRegion2 = wordDoc.openDataRegion("PO_Sub2");
    dataRegion2.setSubmitAsFile(true);
    dataRegion2.setEditing(true);
    DataRegion dataRegion3 = wordDoc.openDataRegion("PO_Sub3");
    dataRegion3.setSubmitAsFile(true);

    poCtrl.setWriter(wordDoc);//此行必须
    poCtrl.setSaveDataPage("saveData");
    //webOpen的第一个参数支持能够输出下载文件的Url相对地址或者文件在服务器上的磁盘路径两种方式
    poCtrl.webOpen("D:\\documents\\test.docx", OpenModeType.docSubmitForm, "张三");

在服务器端后台方法saveData中,创建com.zhuozhengsoft.pageoffice.wordreader命名空间中的WordDocument对象,提取各数据区域中的子文档。

java 复制代码
    WordDocument doc = new WordDocument(request, response);
    byte[] bWord;

    DataRegion dr1 = doc.openDataRegion("PO_Sub1");
    bWord = dr1.getFileBytes();
    FileOutputStream fos1 = new FileOutputStream("D:\\documents\\sub1.doc");
    fos1.write(bWord);
    fos1.flush();
    fos1.close();

    DataRegion dr2 = doc.openDataRegion("PO_Sub2");
    bWord = dr2.getFileBytes();
    FileOutputStream fos2 = new FileOutputStream("D:\\documents\\sub2.doc");
    fos2.write(bWord);
    fos2.flush();
    fos2.close();

    DataRegion dr3 = doc.openDataRegion("PO_Sub3");
    bWord = dr3.getFileBytes();
    FileOutputStream fos3 = new FileOutputStream("D:\\documents\\sub3.doc");
    fos3.write(bWord);
    fos3.flush();
    fos3.close();

    doc.close();

效果图:(高亮显示的为可编辑区域)

参考文档:提取数据区域为子文件(Word拆分) | PageOffice 开发者中心

相关推荐
努力努力再努力wz15 分钟前
【c++深入系列】:万字详解模版(下)
java·c++·redis
瓦特what?1 小时前
关于C++的#include的超超超详细讲解
java·开发语言·数据结构·c++·算法·信息可视化·数据挖掘
是乐谷2 小时前
阿里云杭州 AI 产品法务岗位信息分享(2025 年 8 月)
java·人工智能·阿里云·面试·职场和发展·机器人·云计算
Java水解2 小时前
Java中的四种引用类型详解:强引用、软引用、弱引用和虚引用
java·后端
lifallen2 小时前
JCTools 无锁并发队列基础:ConcurrentCircularArrayQueue
java·开发语言·数据结构·算法
一叶飘零_sweeeet3 小时前
IDEA 插件 Trae AI 全攻略
java·人工智能·intellij-idea
欧哈东哥3 小时前
【C++】标准库中用于组合多个值的数据结构pair、tuple、array...
java·数据结构·c++
python_1363 小时前
web请求和响应
java·spring·github
Eternity_GQM3 小时前
【Word VBA Zotero 引用宏错误分析与改正指南】【解决[21–23]参考文献格式插入超链接问题】
开发语言·c#·word