`
冰云
  • 浏览: 142670 次
  • 性别: Icon_minigender_1
最近访客 更多访客>>
社区版块
存档分类
最新评论

WEB报表至WORD,打印工具类库

阅读更多

前些日子做了一个WEB报表工具类库,功能是在Word中定制表格。下文是设计文档。这个工具不大,而且有重新发明轮子的嫌疑,唉!不过既然已经做出来了,总不能扔掉吧。如有兴趣可以下载试试看。共同进步!

 

下载地址:http://icecloud.51.net/soft/ireport.rar

 

iReporter包设计文档

冰云 2004.1.5

版权所有 (C) 冰云

 

1 目标功能

    目前项目中的报表等方面都是直接通过IE打印。将数据转换成一个长字符串,然后经过JavaScript分割并填充到表格中。这种方法效率低并且难以进行格式定制。

    有的客户希望能够通过Word来打印,并且能够定制表头等方面。在每页都要显示固定的表头。并且支持多个表格打印在同一文件中。

    系统需要一个通用的模块来完成这项任务。

    本模块就是为了这一目标来设计。

 

2 用例说明

A 可通过一个模版来定制一份报表

B 用户输入若干List数据,可以将每个List转换成一个表格

  C 可定制页面头脚

  D 可定制多个表格的头,并且表头固定于每一页

  E 多个表格之间要进行分页

  F 模版中可以定义表格样式

  G 可以通过一个URL生成一份报表

 

3 关键技术

  A Doc文件的生成:

    DOC文件格式是微软专利,用Java很难直接生成doc文件。经过讨论与试验,发现IE可以将任意一个后缀名为docHTML文档当作Word来打开。因此,采用生成HTML的方式来取代word生成。待生成doc文件格式不是难题的时候,可以通过修改实现来完成。

 

 B 固定表头

    经过试验,在Word中固定表头可以通过<THEAD>标签来完成。而将<Caption>标签放入<THEAD>,可以实现每页都显示表名在顶部。

 

 C 表间分页

    表间分页在Word中是通过一个样式来指定的。<P style=”page-break:always”>

 

  D 对任意List生成表格

    对任意List生成表格,要求List中的对象必须是标准的JavaBean对象,即只有getset方法的对象。生成表格将依照模版中对该JavaBean的属性名称的引用而成。如getName(),则在模版中写#name#。这项功能通过jakartacommons-beanutils包来实现。

 

 E XML模版

    定制模版采用XML文件,其格式参见下文。XML解析通过DOM4J来实现。这个包的特点是灵活易用,速度比JDOM要快。

 

4 接口设计

    本包主要由ReportReportBuilderTemplateParser三个接口组成。其中Report是最终返回给用户的结果。ReportBuilderFactory是建立ReportBuilder的工厂。ReportFacade是提供给调用者的代理方法。本包主要异常为ReportException,是Unchecked Exception

 

   

5 使用方式

    使用实例请参见DemoServlet.java

  A 通过模版建立文档报表

PrintWriter out = response.getWriter();

 

// 建立新的DocumentBuilder,工厂方法,现在仅支持Word参数

ReportBuilder builder = ReportBuilderFactory.getBuilder("Word");

 

// Template建立InputStream

InputStream is =

    new FileInputStream(new File("d:\\template.xml"));

 

// isbuilder

builder.setTemplate(is);

 

// 建造List

List list = new ArrayList();

 

// 构造数据,其中的数据必须是JavaBean形式

... list.add(JavaBean) ...

 

// simpletable应改与模版中的表格名称一致,如id="simpletable"

builder.addData(list1, "simpletable");

builder.addData(list2, "styledtable");

 

// 构造并返回内容,默认将采用ISO-8859-1编码

Report doc = builder.buildReport();

 

// 输出或保存

doc.save(new File("d:\\a.doc"), "ISO-8859-1");

doc.print(out);

 

 

 

  B 通过URL建立文档

 

// 建立新的DocumentBuilder,工厂方法,现在仅支持Word参数

ReportBuilder builder = ReportBuilderFactory.getBuilder("Word");

 

// 构造report

Report report = builder.buildReport(new URL("http://www.hjsm.net"));

 

// 输出

report.print(System.out);

 

 

6 设计类图

com.zotn.util.report.wordimpl是上述接口的Word/XHTML实现。其主要是运用DOM4J解析模版,将数据与模版拼装,生成最终XHTML代码的过程。

Tree用于构建一个树形结构,保存模版生成的节点信息。XMLTree是其实现类

TreeNode,保存每个模版节点,XMLTreeNode是其实现类

NodeVisitor,遍历每个节点的Visitor,每个功能对应一个NodeVisitor

GenericXMLParser,是TemplateParser的实现类,用于分析模版

DataHolder,用于保存原始输入数据

ReportHandler,实现了DataHandler,用于处理输出结果并构造Report

WordTableReportBuilderReportBuilder的实现类

 

下图是实现的简图。

7 已知缺陷

    A 当前版本无法处理动态页码的问题。

    B 不支持其他格式的输出

    C 对于URL的解析,无法处理相对路径的图片,样式表等。

 

8 第三方库

Dom4J; 用于xml解析

    Jakarta Commons Logging; 用于记录日志

    Jakarta Commons Lang; 用于字符串共用方法

    Jakarta Commons BeanUtils; 用于处理JavaBean

    Jakarta Commons Collections; BeanUtils需要

    Jakarta ORO; 处理正则表达式

   

9 相关软件

    在主提供能已经完成的后,我偶然注意到了JasperReport这个开源项目。它是一个专业报表库,可将数据转换为HTML,XML,PDF,XLS等格式报表。也是通过定义一个模版来定制格式。因此,很不幸,我重新发明了轮子,而且还是个不圆的轮子。

 

模版文件

 

<?xml version='1.0' encoding='ISO-8859-1'?>

<!-- 默认采用ISO-8859-1编码 -->

<!-- ROOT元素,一般不需要变 -->

<word>

    <!-- 页面头,内容可以写任意HTML,但尖括号应用&lt;&gt;代替 -->

    <header><![CDATA[

    <P align="center">页头</P>

    ]]></header>

    <!-- 第一个表格,表格别名用id表示 -->

    <table id="simpletable">

       <!-- 表格数据 -->

       <tbody>

           <!-- 每个TD单元格内,写 #属性名# name属性表示表头-->

           <td name="名称">#name#</td>

           <td name="颜色">#color#</td>

           <td name="颜色">#price#</td>

       </tbody>

    </table>

    <!-- 第二个表格,表格参数(与HTML相同)可作为属性或节点添加 -->

    <table id="styledtable" width="600">

       <!-- 表格的样式,如边框宽度等可当作节点 -->

       <style>color:blue;border:1px solid black</style>

       <!-- 复杂表头表格,TR表示行,TH表示单元表格 -->

       <thead>

       <!-- 固定表格头 -->

           <caption style="color:red"><![CDATA[

           <font size="+2">固定表格头</font>

           ]]></caption>

           <tr><th colspan="2" style="color:green">属性</th><th>价值</th></tr>

           <tr><th colspan="2">属性2</th><th>价值2</th></tr>

       </thead>

       <!-- 数据 -->

       <tbody>

           <td name="名称" style="color:red">#name#</td>

           <td name="颜色" width="12">#color#</td>

           <td name="价格" width="10%">#price#</td>

       </tbody>

    </table>

    <!-- 页面脚 -->

    <footer><![CDATA[

    <p>页脚</P>

    ]]></footer>

</word>



分享到:
评论
1 楼 小女墙 2010-05-24  
谢谢LZ分享经验,支持一下

相关推荐

    Java实现Web报表打印功能.

    ### Java实现Web报表打印功能:基于iText组件的实践 #### 概述 在Web应用领域,打印功能一直是开发者面临的挑战之一。由于Web应用本质上属于瘦客户端架构,直接操作客户端设备(如打印机)存在限制。这促使业界...

    导出Excel、Word类库

    在IT行业中,导出Excel和Word是常见的数据呈现与交互需求,尤其在数据分析、报表生成、文档管理和Web应用中。本篇文章将详细讲解C#、Java和PHP这三种编程语言如何实现Excel和Word的导出功能,同时关注样式设置和处理...

    phpoffice类库 phpoffice.zip

    在Web开发领域,PHP是一种广泛应用的服务器端脚本语言,而PHPOffice类库则是PHP开发者处理各种办公文档(如Microsoft Office格式的Word、Excel和PowerPoint)的重要工具。PHPOffice类库为PHP开发者提供了一套完整的...

    rResReportDemo.rar_VC word_c# 报表_word VC_打印 VC_报表控件

    总结来说,"rResReportDemo"是一个为VC++和C#开发者设计的报表解决方案,它的核心价值在于提供了一个强大的工具,用于创建Word风格的报表,支持图像嵌入、预览和打印功能,而且调用简单,有助于提升开发效率。...

    报表工具(FastReport net) FastReport.Net扩展类库

    FastReport.Net是一款强大的报表设计和生成工具,专为.NET Framework平台设计。它允许开发者在Windows Forms、ASP.NET、WPF以及MVC等环境下创建复杂的报表。FastReport.Net扩展类库进一步增强了其功能,提供了更多的...

    基于JavaReport的Web报表开发

    其主要特点是支持实时、动态的Web报表,丰富的API接口,以及对图表的强大支持。JavaReport能够根据实时数据生成报表,并且能够动态地创建各种图表,包括柱状图、饼图和折线图等,适应于需要实时统计的应用系统。 ...

    NPOI(开源的.NET读写Excel、WORD等文档的类库)的使用教程

    ### NPOI(开源的.NET读写Excel、WORD等文档的类库)的使用教程 #### 一、NPOI简介 NPOI是.NET平台下的一款强大的文档处理类库,它允许开发者在无需安装微软Office的情况下读写Office 97-2003格式的文件,包括.xls...

    基于JavaReport的Web报表开发.doc

    JavaReport是一款强大的Web报表开发工具,尤其适用于需要实时、动态统计报表的互联网应用。其主要特点包括: 1. **实时动态报表**:JavaReport能够展示实时数据,无论是数据还是图表都能动态生成,适应实时统计需求...

    水晶报表10_5独立安装包

    安装完成后,开发者可以在Visual Studio中使用水晶报表设计工具,或者在代码中引用水晶报表的类库。 总结,水晶报表10_5独立安装包为C#开发者提供了一个全面的报表解决方案,涵盖了从报表设计到数据绑定、参数处理...

    iReport+jasperreports生成各种格式的报表

    在信息技术领域,数据的呈现方式至关重要,报表作为数据可视化的重要工具,能够帮助我们快速理解复杂的信息。本文将深入探讨iReport与JasperReports这两个强大的开源工具,它们是Java环境下生成各种格式报表的理想...

    CrystalReport打印

    综上所述,Crystal Report打印涉及了数据的获取、报表设计、打印控制等多个方面,它是一个强大而灵活的工具,可以帮助开发者创建满足各种需求的报表,并进行有效的打印处理。`CrystalReportPrintLibrary`这样的类库...

    ActiveReports 官方报表设计器

    DataDynamics.ActiveReports.ToolBoxClassLib.dll 文件是 ActiveReports 的工具箱类库组件,它包含了用于报表设计的控件和类,例如表格、图表、图像、文本框等元素。这些控件可以在报表设计器中直接使用,以创建各种...

    水晶报表2008.DOTNET组件.CrystalDecisions

    3. **水晶报表.NET SDK**:软件开发工具包,提供了丰富的API和类库,使得.NET开发者能够轻松地在代码中控制报表的生成、分发和显示。开发者可以通过编程方式设置报表参数、数据源连接、导出格式等。 4. **数据连接...

    Asp.Net C#水晶报表例子

    5. **导出和打印**:水晶报表支持多种导出格式,如PDF、Excel、Word等,同时也可以直接打印报表。 6. **交互式功能**:在Asp.Net Web应用中,用户可以与报表进行交互,如钻取详情、过滤数据、排序等。 7. **部署和...

    C#office类库

    使用这个库,开发者可以编写出与Office文件交互的应用程序,例如报表生成器、数据分析工具或者自动化办公系统。 总的来说,C# Office类库是C#开发中不可或缺的一部分,它极大地扩展了C#在办公自动化和数据处理领域...

    水晶报表中文帮助手册

    1. **水晶报表简介**:水晶报表是一款强大的报表设计工具,广泛应用于商业智能领域,能够从各种数据源中提取数据,创建定制化的报表,满足企业对数据分析和信息展示的需求。 2. **数据源管理**:手册会详细讲解如何...

    C#Crystal Report 报表编程实例

    2. **.NET Framework**:.NET框架是微软提供的一个开发平台,它包含了大量的类库和工具,用于构建各种类型的Windows应用程序,包括Web应用程序和桌面应用程序。C#与.NET框架的结合为报表开发提供了强大的后盾。 3. ...

    C#打印操作实例--批量打印学生证实例源码【201903】

    在C#编程环境中,打印操作是一项常见的任务,特别是在企业级应用中,如批量打印报表、证书等。这个“C#打印操作实例--批量打印学生证实例源码【201903】”是一个示例项目,旨在帮助开发者了解如何在C#中实现批量打印...

Global site tag (gtag.js) - Google Analytics