PageOffice 开发者中心 PageOffice 开发者中心
首页
文档
  • 后端Java手册 (opens new window)
  • 后端.netcore手册 (opens new window)
  • 前端JavaScript手册 (opens new window)
下载
购买 (opens new window)
首页
文档
  • 后端Java手册 (opens new window)
  • 后端.netcore手册 (opens new window)
  • 前端JavaScript手册 (opens new window)
下载
购买 (opens new window)
  • 开始

  • 通用控制

  • Word

    • 常用控制

    • 动态填充

    • 用户输入提交

      • 提取数据区域中文本
      • 提取数据区域中图片
      • 提取数据区域为子文件(Word拆分)
        • 提取数据区域中表格
      • JS控制

    • Excel

    • PDF

    • FileMaker

    • PPT

    • 更多

    目录

    提取数据区域为子文件(Word拆分)

    # 提取数据区域为子文件(Word拆分)

    • 查看本示例演示效果
    • 本示例关键代码的编写位置,请参考“开始 - 快速上手”里您所使用的开发语言框架的最简集成代码

    注意

    本文中展示的代码均为关键代码,复制粘贴到您的项目中,按照实际的情况,例如文档路径,用户名等做适当修改即可使用。

    在实际的开发过程中,有时会遇到希望提取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, "张三");
      
      PageOfficeNetCore.PageOfficeCtrl poCtrl = new PageOfficeNetCore.PageOfficeCtrl(Request);
      
      PageOfficeNetCore.Word.WordDocumentWriter wordDoc = new PageOfficeNetCore.Word.WordDocumentWriter();
      //打开数据区域,openDataRegion方法的参数代表Word文档中的书签名称
      PageOfficeNetCore.Word.DataRegionWriter dataRegion1 = wordDoc.OpenDataRegion("PO_test1");
      dataRegion1.SubmitAsFile = true;
      PageOfficeNetCore.Word.DataRegionWriter dataRegion2 = wordDoc.OpenDataRegion("PO_test2");
      dataRegion2.SubmitAsFile = true;
      dataRegion2.Editing = true;
      PageOfficeNetCore.Word.DataRegionWriter dataRegion3 = wordDoc.OpenDataRegion("PO_test3");
      dataRegion3.SubmitAsFile = true;
      
      poCtrl.SetWriter(wordDoc);//此行必须
      poCtrl.SaveDataPage = "SaveData";
      //webOpen的第一个参数支持能够输出下载文件的Url相对地址或者文件在服务器上的磁盘路径两种方式
      poCtrl.WebOpen("D:\\documents\\test.docx", PageOfficeNetCore.OpenModeType.docSubmitForm, "tom");
      
      // Make sure to add code blocks to your code group

      在服务器端后台方法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();
        
        PageOfficeNetCore.Word.WordDocumentReader doc = new PageOfficeNetCore.Word.WordDocumentReader(Request, Response);
        await doc.LoadAsync();
        Byte[] bWord;
        
        // 读取数据区域PO_test1中的内容,保存为一个新的word文档:test1.doc
        PageOfficeNetCore.Word.DataRegionReader dr1 = doc.OpenDataRegion("PO_test1");
        bWord = dr1.FileBytes;
        Stream s1 = new FileStream("D:\\documents\\test1.doc", System.IO.FileMode.Create);
        s1.Write(bWord, 0, bWord.Length);
        s1.Close();
        
        // 读取数据区域PO_test2中的内容,保存为一个新的word文档:test2.doc
        PageOfficeNetCore.Word.DataRegionReader dr2 = doc.OpenDataRegion("PO_test2");
        bWord = dr2.FileBytes;
        Stream s2 = new FileStream("D:\\documents\\test2.doc", System.IO.FileMode.Create);
        s2.Write(bWord, 0, bWord.Length);
        s2.Close();
        
        // 读取数据区域PO_test3中的内容,保存为一个新的word文档:test3.doc
        PageOfficeNetCore.Word.DataRegionReader dr3 = doc.OpenDataRegion("PO_test3");
        bWord = dr3.FileBytes;
        Stream s3 = new FileStream("D:\\documents\\test3.doc", FileMode.Create);
        s3.Write(bWord, 0, bWord.Length);
        s3.Close();
        
        doc.Close();
        
        // Make sure to add code blocks to your code group

        # 前端代码

        本示例无前端关键代码。

        上次更新: 2025/07/21, 15:21:36
        PageOffice | Copyright © 2013-2026 卓正软件 京ICP备12010902号-2 京公网安备 11010502019270号
        • 跟随系统
        • 浅色模式
        • 深色模式
        • 阅读模式