国产linux系统(银河麒麟,统信uos)使用 PageOffice 国产版提取word文档指定位置内容保存为子文件
PageOffice 国产版 :支持信创系统,支持银河麒麟V10和统信UOS,支持X86(intel、兆芯、海光等)、ARM(飞腾、鲲鹏、麒麟等)、龙芯longarch芯片架构。
- 本示例关键代码的编写位置,请参考“开始 - 快速上手”里您所使用的开发语言框架的最简集成代码
注意
本文中展示的代码均为关键代码,复制粘贴到您的项目中,按照实际的情况,例如文档路径,用户名等做适当修改即可使用。
在实际的开发过程中,有时会遇到希望提取Word文档中部分内容保存为子文件的需求,PageOffice支持提取Word文档数据区域中的内容为一个Word文件流,在服务器端创建PageOffice的Word命名空间中的WordDocumentReader对象并获取到DataRegion对象,再调用DataRegion对象的FileBytes属性就可以得到这个子Word文件流。
注意
PageOffice获取Word文档中指定位置的数据,是通过调用PageOffice获取数据区域的功能,实现此目的。在PageOffice的概念里提到的数据区域,本质上就是书签,但是只有“PO_”开头的书签才叫数据区域。
后端代码
在后端编写代码调用webOpen方法以表单提交模式docSubmitForm打开文件,设置数据区域SubmitAsFile属性为true,并设置接收处理PageOffice客户端控件提交数据的服务器端后台方法为:saveData,如果用户在线编辑文档保存时,数据区域中的内容就会被抽取为Word文件流,并提交到服务器端后台方法saveData,保存为子文件即可。
PageOfficeCtrl poCtrl = new PageOfficeCtrl(request);
WordDocumentWriter wordDoc = new WordDocumentWriter();
//打开数据区域,openDataRegion方法的参数代表Word文档中的书签名称
DataRegionWriter dataRegion1 = wordDoc.openDataRegion("PO_Sub1");
dataRegion1.setSubmitAsFile(true);
DataRegionWriter dataRegion2 = wordDoc.openDataRegion("PO_Sub2");
dataRegion2.setSubmitAsFile(true);
dataRegion2.setEditing(true);
DataRegionWriter 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.word命名空间中的WordDocumentReader对象,提取各数据区域中的子文档。
WordDocumentReader doc = new WordDocumentReader(request, response);
byte[] bWord;
DataRegionReader dr1 = doc.openDataRegion("PO_Sub1");
bWord = dr1.getFileBytes();
FileOutputStream fos1 = new FileOutputStream("D:\\documents\\sub1.doc");
fos1.write(bWord);
fos1.flush();
fos1.close();
DataRegionReader dr2 = doc.openDataRegion("PO_Sub2");
bWord = dr2.getFileBytes();
FileOutputStream fos2 = new FileOutputStream("D:\\documents\\sub2.doc");
fos2.write(bWord);
fos2.flush();
fos2.close();
DataRegionReader 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拆分)