转载:pageOffice控件实现 office word文档在线填充指定数据
pageOffice控件实现 office word文档在线填充指定数据
应用场景
OA办公中,经常要在文档的指定位置,填充后端指定数据。
如合同中, 姓名位置,金额位置,住址位置,要填充后端指定数据。合同其它的内容模板是统一的,不用改变。
怎么把后端的关键数据,填充到文档中呢?
实现方法
PageOffice可以实现在文档中标记的位置处动态填充内容
实现过程
以java的springboot框架为例
1 集成pageOffice
https://www.zhuozhengsoft.com/dowm/
从pageOffice官网
下载页面,找到springboot的集成示例,按照里面的集成明说,可以集成到自己的springboot项目中。
2 文档中设置数据区域方法
数据区域的技巧
https://www.kancloud.cn/pageoffice_course_group/pageoffice_course/663125
模板中如何指定位置(PageOffice中的“数据区域”)
模板中必须标记好数据要插入的位置,这样才可以实现用程序插入数据到文件的相应位置,就是说要想生成文件,数据的位置必须用某种元素来标记出来。使用PageOffice开发,常用的是Word书签来标记要插入数据的位置。
一般的开发人员使用Word比较少,可能不清楚Word书签是怎样插入的,下面简单的介绍一下插入书签的方法。
第一种方法:把光标定位到需要标记数据位置的地方,点Word菜单中的“插入”-“书签”,就会弹出一个标题为“书签”的对话框(如下图所示),输入新书签的名称,注意:书签名必须以字母、汉字、中文标点等开头,可以包含数字但中间不能有空格(用PageOffice开发的时候不推荐使用中文命名书签名)。点右侧的“添加”按钮,新的书签名将出现在下面的列表中。
第二种方法:选择几个文字、或一段文字、或者选择一段包含表格和图片的内容,为选中的内容指定书签的对象,然后执行第一种方法的同样操作,“插入”→“书签”……
注意:如果新插入位置或新对象采用的是已有的书签名,原有的书签将自动取消。
PageOffice示例代码中的模板在制作的时候,多采用第二中方法定义书签,插入书签之前会先写一个标示性的词语用中括号括起来,比如:[姓名],然后选中“[姓名]”,再插入书签。这样做的目的是便于在查看或编辑模板数据位置的时候一目了然。
3 设置数据区域 注意事项
方便显示书签可以设置如下
在使用PageOffice开发的过程中,为了避免出现与用户自己定义的书签出现冲突,要求插入的书签名称必须以“PO_”开头。注意是字母O,不是数字0。在PageOffice的概念里提到的数据区域,本质上就是书签,但是只有“PO_”开头的书签才叫数据区域,请大家注意这点。
模板的制作方法
制作模板的过程,实际上就是插入数据区域也就是插入“po_”开头的书签,标记在生成文件的时各个数据在文件查插入的位置,但是鉴于Word书签的特点:书签可以相互包含、相邻的书签会互相干扰,插入数据区域的时候需要一些技巧和注意事项,在这里一并介绍一下。
① 插入数据区域前选择的文本内容如果不是故意要跨段的话,不要选择段落末尾的回车换行符“┙”。
② 如果说“[姓名]”就是要插入的数据区域的文本标示,那么请在“[”前和“]”后分别插入一个空格变成“ [姓名] ”,但是选择的数据区域标示的时候不要选择中括号前后的空格,只选择“[姓名]”,然后点Word菜单中的“插入”-“书签”,命名为:PO_name。
③ 插入的任意的两个数据区域不能首尾相连。不允许前面的数据区域的末尾后面紧接着就是后一个数据区域的开始,中间连空格都没有,这是不允许的。
④ 插入的数据区域不要互相包含。不推荐一个数据区域中完整的包含了另一个数据区域,这样做在程序生成文件的时候,不会出现错误,但是没意义,除了造成使用的混乱之外没有好处。
在生成文件的时候,数据区域的标示会被程序中设置的值自动替换掉。
4 通过代码写入数据
设置好模板后。如图
@RequestMapping(value = "Word", method = RequestMethod.GET)
public ModelAndView showWord(HttpServletRequest request, Map<String, Object> map) {
PageOfficeCtrl poCtrl = new PageOfficeCtrl(request);
poCtrl.setServerPage(request.getContextPath() + "/poserver.zz");//设置服务页面WordDocument doc = new WordDocument();
//打开数据区域
DataRegion dataRegion1 = doc.openDataRegion("PO_userName");
//给数据区域赋值
dataRegion1.setValue("张三");DataRegion dataRegion2 = doc.openDataRegion("PO_deptName");
dataRegion2.setValue("销售部");poCtrl.setWriter(doc);//隐藏菜单栏
poCtrl.setMenubar(false);
//隐藏工具栏
poCtrl.setCustomToolbar(false);//打开Word文档poCtrl.webOpen("/doc/DataRegionFill/test.doc", OpenModeType.docNormalEdit, "张三");
map.put("pageoffice", poCtrl.getHtmlCode("PageOfficeCtrl1"));
ModelAndView mv = new ModelAndView("DataRegionFill/Word");
return mv;
}
通过以上代码,可以将数据库中的 张三 和 销售部写到文档中。
代码打开后的效果
5 总结
通过pageOffice插件,可以简单的实现 word文档在线填充指定数据