在一些特殊应用场合,客户但愿在服务器上生成文档的同时并填充数据,客户端的页面不显示打开文档。windows
目前服务器上生成文档第一种就是方案是采用Jacob, 可是局限于windows平台,每每许多Java程序运行于Linux等其余操做系统,在此不讨论该方案。服务器
第二是POI,可是服务器上生成文档对服务器压力很大,并且它的Excel处理勉强能够, Word模块还局限于读取Word的文本内容,写Word文件的功能就更弱;另外一个致命的问题是,处理doc格式和处理docx格式的类几乎彻底不一样,要分开针对不一样的格式写不一样的代码,这就意味着用户上传的docx格式文件若是使用了doc的扩展名,程序立刻崩溃。并且POI结构混,编码比较复杂,开发过程很是消耗时间和精力。架构
因此针对这一系列的问题,PageOffice开发出来了FileMakerCtrl组件,该组件彻底符合PageOffice的架构设计,FileMakerCtrl在客户端生成Office或PDF文档并上传到服务器,可是并不在Web网页里显示Office文档。jsp
FileMakerCtrl 类是PageOffice开发平台中的核心类。和PageOfficeCtrl控件不一样,FileMakerCtrl在Web网页里不显示Office文档,而是直接在线生成Office文档或将Office文档转换成PDF文档,或动态生成PDF文档。函数
注:如下代码以word为例编码
1.动态填充word文档并上传到服务器spa
请参考PageOffice产品开发包中Samples4的示例:
2、1三、FileMaker转换单个文档(以Word为例)(专业版、企业版)操作系统
FileMakerCtrl fmCtrl = new FileMakerCtrl(request); fmCtrl.setServerPage(request.getContextPath()+"/poserver.zz"); WordDocument doc = new WordDocument(); //给数据区域赋值,即把数据填充到模板中相应的位置 doc.openDataRegion("PO_company").setValue("北京卓正志远软件有限公司"); fmCtrl.setWriter(doc); fmCtrl.setSaveFilePage("SaveMaker.jsp"); //OnProgressComplete为回调函数,文档生成以后在页面里触发此js事件。 //若是您须要响应此事件,您须要在当前 JSP 页面里定义一个 JavaScript 函数。 fmCtrl.setJsFunction_OnProgressComplete("OnProgressComplete()"); fmCtrl.fillDocument("doc/template.doc", DocumentOpenType.Word);
OnProgressComplete的使用: 好比须要实现文件生成后弹出另存为对话框,让用户保存文件到本地电脑,那么js能够这样写:架构设计
function OnProgressComplete() { document.getElementById("FileMakerCtrl1").ShowDialog(2); //弹出另存对话框 }
2.动态将word文档转换为pdf文档并上传到服务器设计
请参考PageOffice产品开发包中Samples4的示例:
2、3四、FileMaker转换单个文档为PDF(以Word为例) (专业版、企业版)
FileMakerCtrl fmCtrl = new FileMakerCtrl(request); fmCtrl.setServerPage(request.getContextPath()+"/poserver.zz"); WordDocument doc = new WordDocument(); doc.openDataRegion("PO_company").setValue("北京卓正志远软件有限公司"); fmCtrl.setWriter(doc); fmCtrl.setSaveFilePage("SaveMaker.jsp"); fmCtrl.setJsFunction_OnProgressComplete("OnProgressComplete()"); fmCtrl.fillDocumentAsPDF("doc/template.doc",DocumentOpenType.Word, "a.pdf");
3.批量生成文档并上传到服务器
请参考PageOffice产品开发包中Samples4的示例:
3、一、FileMaker批量转换文档(以Word为例)(专业版、企业版)
批量生成文档就是基于FileMaker转换单个文档所使用的技术,在OnProgressComplete事件中执行js方法刷新页面中的iframe页面循环的加载生成不一样的文件。
FileMakerCtrl本质上就是一个没有界面的PageOfficeCtrl,也是调用客户端Office程序处理文件的,均可以实现对文档进行动态填充、动态转PDF等功能,惟一的区别就是FileMakerCtrl在线打开填充和转换文档的时候客户端页面不显示打开的文档内容,而PageOfficeCtrl显示打开的文档内容。