zoukankan      html  css  js  c++  java
  • [转载]Java动态填充word文档并上传到服务器

     

    一、 需求背景

     

      在一些特殊应用场合,客户希望在服务器上生成文档的同时并填充数据,客户端的页面不显示打开文档,但是服务器上生成文档对服务器压力很大,目前服务器上生成文档第一种就是方式是jacob, 但是局限于windows平台,往往许多JAVA程序运行于其他操作系统,在此不讨论该方案。二是POI。 但是它的excel处理还凑合, word模块还局限于读取word的文本内容,写word文件的功能就更弱;还有一个要命的地方,处理doc格式和处理docx格式的类几乎完全不同,要分开针对不同的格式写不同的代码,这就意味着用户上传的docx格式文件如果使用了doc的扩展名,程序马上崩溃。而且个人认为poi结构混乱,编码比较复杂,开发过程非常消耗时间和精力。PageOffice提供了FileMakerCtrl组件,FileMakerCtrl是在客户端生成文档并上传到服务器,但是不会在Web网页里显示word文档,因此采用FileMakerCtrl生成word文件有两个优点:1. 在客户端生成word文档,不会对服务器造成任何压力;2. 生成的文档属于标准的word文档格式。

     

    二、 核心代码

     

      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方法的代码,接收客户端上传的文件流

     

        FileSaver fs = new FileSaver(request, response);
        String fileName = "myfile.doc" ;
        fs.saveToFile(request.getSession().getServletContext().getRealPath("/") +"/"+ fileName);
        fs.close();

     

      4. 生成的word文件效果。

     

      

     

    三、 相关下载

     

      访问下面的地址下载PageOffice for Java 开发包,部署Samples4示例之后参考示例:二、13、FileMaker转换单个文档(以Word为例)

     

      http://www.zhuozhengsoft.com/dowm/

     

  • 相关阅读:
    获取图片的大小(宽高):BytesIO
    python中url解析 or url的base64编码
    [extjs5学习笔记]第三十七节 Extjs6预览版都有神马新东西
    【翻译】Ext JS 6早期访问版本发布
    【翻译】Ext JS 6有什么新东西?
    【Java二十周年】Delphi转行java的一些小感触
    Cursor类取出数据
    通过服务修改widgetUI
    安卓笔记--Style的继承
    [ExtJS5学习笔记]第三十六节 报表组件mzPivotGrid
  • 原文地址:https://www.cnblogs.com/qq742655/p/9006844.html
Copyright © 2011-2022 走看看