zoukankan      html  css  js  c++  java
  • Word文档生成

    非常多的时候,都需要在程序当中生成一些文档,这些文档可能是csv,word,pdf,PPT,xls等文件格式。  生成csv还是比较简单的,但是要生成word,excel就麻烦多了。 
    当然,Tiny框架也面临这个问题,如何才能帮助开发人员快速生成这些文档呢? 
    一般来说,现在用java生成Word有如下方式: 
    POI,iText,当然还有Xml形式。 
    对于采用POI,iText来说,要生成复杂的Doc文件,其实并不容易。而采用Xml结构生成,去把一个文档生成xml文件,看看里面的内容,估计也会是满头是汗。 
    Tiny构建者,认为,生成Doc,Xls,PDF等文档类型是管理系统绕不过去的坑,那既然没有办法绕过,那就是说无论如何都要过了? 
    随便百度Google一下,发现这种方案其实许多人已经做过了,比如在下面的连接中,作者已经有了良好的实践:http://developer.51cto.com/art/201106/270815.htm 
    本文的解决方案,与之存在类似之处--都是采用模板语言结合xml来生成xml格式Word文件,但是实现模式还是不一样的,本文提供的方案更具有通用性、易用性,易用到像做网站一样生成Word文档。 

    为此,Tiny框架对于生成文本格式文件的内容进行了抽象,只要是生成文本格式的文件,都可以通过Tiny框架的文档生成框架进行扩展,使得开发人员可以方便快捷的生成文本类型的文档。 
    由于Office文档已经有了xml格式的存储方式,由于pdf可以通过xml生成,因此,最常用的office文档和pdf文档都可以通过本框架快速生成,当然,有一些基础性工作还是要自己做的(偷偷的透露一下:常用的模板框架中都会包含的)。 
    角色分配   文档生成框架扩展 文档生成框架扩展是非常简单的,你不用编写代码,只要编写配置文件即可 
    1.编写Bean文件 

    1
    2
    3
    4
    5
    6
    7
    <bean id="docTemplateFileProcessor" scope="singleton" class="org.tinygroup.docgen.fileresolver.TemplateFileProcessor">
        <property name="fileExtName" value=".doctemplate"></property> 
        <property name="documentType" value="doc"></property> 
    < /bean>
    注意:
    fileExtName属性是指模板文件的扩展名
    documentType属性是指文档类型



    宏文件编写 
    文档生成框架本身并不能直接生成各种文档,需要高级开发人员进行模板编写。
    这部分主要是定义Velocity模板文件了。
    比如:定义下面的宏,可以用来生成word文件中的链接 

    1
    2
    3
    4
    #macro(link $url)
    $bodyContent
    < /w:hlink
    #end



    文档模板编写 普通开发利用高级开发人员编写的宏文件,就可以简单快捷的编写文档模板了。 
    比如下面的代码就可以生成新浪网的链接地址: 
    #link("http://www.sina.com.cn/") #p("新浪网") #end
    是不是不用知道Word文档格式,也可以方便快速的编写Word文档了? 
    示例 编写下面的模板文件 
    #@wordDocument()#@body()#h("Tiny Framework" 1)#h("Tiny Framework" 2)#h("Tiny Framework" 3)#h("Tiny Framework" 4)#h("Tiny Framework" 5)#end#end 
    编写下面的java代码: 
    DocumentGeneraterManager manager = SpringUtil.getBean(DocumentGeneraterManager.MANAGER_BEAN_NAME);File file=new File("test.xml");FileOutputStream outputStream=new FileOutputStream(file);manager.getFileGenerater("doc").generate("/test.docpage", new ContextImpl(), new OutputStreamWriter(outputStream));outputStream.close();
    运行用Word打开生成的test.xml的结果: 

    155452_E5li_1245989.jpg (46.96 KB, 下载次数: 0)

    下载附件

    2015-5-27 21:08 上传

      
    当然,框架中已经定义了Word中大量的元素,也就是说大部分都可以像上面的方式来添加表格,样式,等等元素。再结合上各种数据获取,生成各种类型文档都是手到捻来。在Tiny框架就有大量的运行时数据,比如:服务定义,组件定义,插件定义等等,都是直接通过文档生成框架即时生成,保证了文档的可用性及有效性。 
    当然,不仅仅可以且来生成Word,所有以文本格式的存储的文件都可以通过上述方式生成。

  • 相关阅读:
    PLSQL学习笔记 wm_concat
    Oracle ERP 公司间往来的解决方案(转载)
    Excel单元格设成只读
    PLSQL笔记 存在性检查
    PL/SQL编程技巧
    查看Oracle EBS克隆Clone时间
    用wm_concat合并行及merge into更新
    商务英语900句
    外企公司常用英文缩写
    ASP.NET 2.0 XML 系列(5):用XmlReader读取XML文档
  • 原文地址:https://www.cnblogs.com/j2eetop/p/4610544.html
Copyright © 2011-2022 走看看