1、 需求背景windows
在一些特殊应用场合,客户但愿在服务器上生成文档的同时并填充数据,客户端的页面不显示打开文档,可是服务器上生成文档对服务器压力很大,目前服务器上生成文档第一种就是方式是jacob, 可是局限于windows平台,每每许多JAVA程序运行于其余操做系统,在此不讨论该方案。二是POI。 可是它的excel处理还凑合, word模块还局限于读取word的文本内容,写word文件的功能就更弱;还有一个要命的地方,处理doc格式和处理docx格式的类几乎彻底不一样,要分开针对不一样的格式写不一样的代码,这就意味着用户上传的docx格式文件若是使用了doc的扩展名,程序立刻崩溃。并且我的认为poi结构混乱,编码比较复杂,开发过程很是消耗时间和精力。PageOffice提供了FileMakerCtrl组件,FileMakerCtrl是在客户端生成文档并上传到服务器,可是不会在Web网页里显示word文档,所以采用FileMakerCtrl生成word文件有两个优势:1. 在客户端生成word文档,不会对服务器形成任何压力;2. 生成的文档属于标准的word文档格式。服务器
2、 核心代码app
1.制做模板,打开word模板文件,在文件中插入书签:PO_company、PO_year、PO_number,以下图所示:编码
2. 动态填充word文档并上传到服务器操作系统
FileMakerCtrl fmCtrl = new FileMakerCtrl(request); //设置PageOffice的服务页面 fmCtrl.setServerPage(request.getContextPath()+"/poserver.zz"); WordDocument doc = new WordDocument(); //给数据区域赋值,即把数据填充到模板中相应的位置 doc.openDataRegion("PO_company").setValue("北京某某软件有限公司 "); doc.openDataRegion("PO_year").setValue("2018"); doc.openDataRegion("PO_number").setValue("008"); fmCtrl.setWriter(doc); //设置用来接收生成的文档的action方法或RequestMapping方法 fmCtrl.setSaveFilePage("/SaveFile"); fmCtrl.fillDocument("doc/template.doc", DocumentOpenType.Word);
3. 编写SaveFilePage指向的action或RequestMapping方法的代码,接收客户端上传的文件流excel
FileSaver fs = new FileSaver(request, response); String fileName = "myfile.doc" ; fs.saveToFile(request.getSession().getServletContext().getRealPath("/") +"/"+ fileName); fs.close();
4. 生成的word文件效果。server
3、 相关下载blog
访问下面的地址下载PageOffice for Java 开发包,部署Samples4示例以后参考示例:2、1三、FileMaker转换单个文档(以Word为例)开发
http://www.zhuozhengsoft.com/dowm/文档