`
commando
  • 浏览: 77845 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

文档导出模块

    博客分类:
  • Java
阅读更多

           一. 功能描述

 

    文档导出模块提供一种通用的文档导出解决方案,通过事先订制好的模板,结合模板引擎和输出引擎的应用,简化文档导出的工作、完成复杂报表格式文件的生成。本版提供输出到WordExcel的服务。

 

二. 用户使用流程

 

    流程图如下所示:

用户使用流程图

图1. 用户使用流程图

 

    对很多业务模块来说,复杂报表的输出向来是件麻烦的事情,文档导出模块的主要设计思想就是“模板+数据”,将具有复杂格式的文件通过办公软件事先制作好模板,提交到服务器上;其他业务模块通过调用打印服务接口,即可导出相应格式的文件。

 

三. 模块设计

 

    文档导出模块部署的上下文关系图如下所示。大多数业务系统部署在Linux应用服务器上,文档导出模块需要部署在基于Windows的服务器上。

 

 

上下文关系图

图2. 上下文关系图

 

    业务系统的报表等文件如要输出,首先通过HttpClient封装请求,将参数传递到文档导出模块,文档导出模块调用事先服务器端的模板文件,结合获取的页面请求参数,输出到WordExcel文件。 

 

 

     文档导出模块的设计如下图所示: 

 

功能结构图

图3. 功能结构图

 

 

    主要分为模板引擎和输出引擎。这里说明了GenerateDoc的操作是如何完成的。模板引擎采用Velocity,其首先接收输入的数据是打印请求的参数(包括报表所需输出的Data和模板文件的名称TemplateName),首先根据获取的参数计算MD5值,和服务器端缓存文件的相应MD5值进行对比,如果相同则读取缓存的文件,不同则继续执行通常的处理流程,根据TemplateName查找并载入模板文件(模板文件是WordExcel xml格式,通过Office Word Excel 2003版本以上打开编辑并另存为此格式)。Velocity模板引擎对数据和模板文件进行处理,将数据填充到模板的相应位置,Merge生成完整的待输出的文件(xml格式),再经由输出引擎,输出Word或者Excel文件。

     Javaword的操作不易处理,此处的输出引擎主要是采用Jacob来完成xml文件到 Doc 或者 Xls 格式的转换。Jacob Java-COM Bridge的缩写,它在Java与微软的COM组件之间构建一座桥梁。使用Jacob自带的DLL动态链接库,并通过JNI的方式实现了在Java平台上对COM程序的调用。)

 

时序图

 

图4. 处理时序图

 

 

具体步骤解释如下:

  1. 页面点击打印“提交”按钮后,系统先用HttpClient对请求的数据进行封装。此时提交请求的页面显示系统提示信息如“文件正在生成中,请稍等”;
  2.  HttpClient使用Post方法将封装后的请求发送到文档导出模块,Post的参数包括报表数据&模板文件名称;
  3. 当文档导出模块接收到HttpClient Post过来的请求后,首先计算参数的MD5值,和缓存中文具的MD5值比对,如有相同则返回相应缓存文件,否则解析参数并存储到数据库(队列)。数据库表会保存请求数据参数及计算的MD5值,同时获取该条记录的主键作为下载码(SeedID)返回。GetSeedID()就是执行这样的操作;
  4. 下载码生成后返回给所发送请求的页面;
  5. 文档导出模块执行核心的生成文件操作GenerateDoc();
  6. 当提交请求的页面收到返回的下载码后,定时发送查询消息,看文件是否已经生成完毕 IsGenerateOK(SeedID)
  7. 如果文件已经生成完毕,返回查询结果为True,请求页面随即将等待生成的提示消息取消,显示下载文件的链接;
  8. 点击下载链接,发送下载文件请求;
  9. 文档导出模块收到请求后,将文件以流的方式输出。

四. 设计要点:

  1.  客户端封装  

    采用HttpClient来对客户端进行封装处理。

  • 表单参数的命名需要和模板文件中的变量值对应起来,这个工作是由有文档导出应用的业务模块来提供的,文档导出模块只负责对模板和获取到的参数进行处理,生成一定格式的文件。
  • 客户端在用HttpClient封装时,除了需要填入要输出的表单域参数外,还有一个必要的参数是使用模板的名称(TemplateName),以便服务器端能够根据该请求参数选择模板文件进行处理;

    2.  缓存文件生成

 

    缓存文件的目的是为了避免相同文件的重复生成操作。解决办法是文档导出模块在接收到打印请求的参数后,计算其MD5值,同缓存文件的MD5值比对,如有相同,并且其对应的文件还存在于缓存中,就可以跳过生成文件的操作,直接从缓存中读取数据返回给客户端。

  • 服务器端在获取到输入参数后,需要对参数进行排序(固定的排序算法)再作MD5运算,目的是确保同样一个表单请求参数的MD5值是一样的;
  • 缓存文件放到硬盘上,将文件名称及起对应的参数MD5值存储到数据库,以便对比和提取。缓存文件需定期清除,可以考虑Quartz定时任务来执行。

      3. Office应用对象池

    输出引擎会调用Office Word 或者Excel应用程序来处理事件,这些应用程序都是比较消耗资源的,所以文档导出模块在初始化时会建立一个Office的应用对象池,来提供相应的服务,以免因为请求打印服务的数量过于集中而导致服务器性能下降乃至崩溃。

      4. 清除残留进程

 

    Excel程序打开后,在关闭时会有个20多兆的进程驻留在内存中。所以在应用服务重新启动会存在残留进程的问题,久而久之会对服务器的性能造成影响。解决的思路是每次在文档导出模块停止服务时(而非启动时),对残留的进程进行清理的操作。C++做成动态链接库由Java通过JNI调用。

 

 

 

  • 大小: 36.8 KB
  • 大小: 15.4 KB
  • 大小: 17.9 KB
  • 大小: 17.7 KB
0
0
分享到:
评论

相关推荐

    易语言导出EXCEL模块实例

    - 调用模块函数:模块可能提供了如`导出数据到Excel`、`创建工作簿`等函数,根据模块文档使用它们。 - 错误处理:在调用模块函数时,需要进行错误处理,确保程序的健壮性。 6. 示例代码: ```易语言 .声明 ...

    易语言模块导出数据1.1.rar

    9. **文档说明**:一个成熟的模块通常会配备详尽的使用说明,指导用户如何安装、配置和使用,以便更好地利用模块功能。 综上所述,《易语言模块导出数据1.1》是一个针对易语言开发者的实用工具,其核心在于简化数据...

    vtiger crm PDF maker PDF导出模块

    对于使用Vtiger CRM管理销售流程的企业来说,这个模块尤其有用,因为它使得销售团队可以快速地将重要的业务文件如报价单、销售订单等导出为PDF,便于与客户进行正式的书面交流,同时也方便内部审核和记录保存。...

    excel文件导入导出模块纯静版源码

    这个“excel文件导入导出模块纯静版源码”提供了无依赖、轻量级的解决方案,使得开发者能够在自己的项目中轻松处理Excel文件。以下是关于这个模块的一些关键知识点和相关技术细节: 1. **文件格式理解**:Excel文件...

    SQL SERVER自动导出Word数据库文档

    6. **PowerShell**:另一种方法是使用PowerShell,它提供了丰富的SQL Server模块,可以调用SQL命令行工具(如sqlcmd或bcp)来导出数据,然后通过PowerShell脚本控制Word文档的操作。 7. **Third-party Tools**:...

    Advanced export pdf,pdf导出模块

    "Advanced Export PDF" 是一个专为处理PDF文档导出功能的高级模块,它提供了一系列的高级选项和定制化设置,以满足用户在PDF文件转换和输出时的复杂需求。PDF(Portable Document Format)是一种广泛使用的文件格式...

    Excel-VBA宏编程实例源代码-自动导入或导出模块.zip

    "Excel-VBA宏编程实例源代码-自动导入或导出模块.zip"这个压缩包包含了用于自动导入和导出模块的源代码,这对于提高工作效率和简化重复性工作具有重要意义。 1. **VBA宏**:VBA宏是录制或手动编写的一系列指令,...

    易语言test2源码,易语言读入Excel文档模块

    在实际应用中,这个模块可以被用于各种场景,比如数据分析、报表生成、数据导入导出等。例如,你可以使用这个模块来读取一个Excel文件,然后将数据存储到数据库中,或者根据这些数据生成图表和报表。此外,结合其他...

    Excel导入,导出,模板生成-公共模块整理

    Excel 导入、导出、模板生成公共模块整理 Excel 导入、导出、模板生成公共模块整理是指使用 Microsoft.Office.Interop.Excel.dll 库来实现 Excel 文件的导入、导出和模板生成操作。该模块提供了一个单例类 ...

    易语言ACCESS对象导入与导出XML模块

    易语言ACCESS对象导入与导出XML模块是一种编程技术,主要用于在易语言环境下处理ACCESS数据库对象,并将这些数据转换成XML格式进行存储或传输。在本文中,我们将深入探讨这一技术的关键概念、工作原理以及实现方法。...

    java9 模块化讲解文档

    模块描述符是在每个模块的`module-info.java`文件中定义的,其中声明了模块的名称、导出的包、依赖的其他模块等信息。模块图则是在运行时或构建时确定的,描述了所有模块间的依赖关系。 在Java 9中,使用模块化有...

    数据库表导出CHM文件

    数据库表导出CHM文件是一项实用的技术...总之,"数据库表导出CHM文件"是一个将数据库内容转化为易于管理和分享的文档格式的过程,通过提供的工具和组件,用户可以方便地完成这一转换,提升数据库信息的可读性和易用性。

    oracle数据表导出为word文档

    本篇文章将详细讲解如何将Oracle数据表导出为Word文档,以满足软件开发和报告撰写的需求。 首先,理解Oracle数据表的基本概念。在Oracle数据库中,数据表是存储数据的主要结构,由一系列行和列组成,每一行代表一个...

    这是一个easyPoi的文档

    入库少,可以很快把简单的工作干了这是第一个版本的功能,后来慢慢用的人多了,也就功能慢慢丰富了,现在包含了Excel的导入导出,Word的导出,PDF的导出,Excel Charts的导出, Html的导出5个功能模块,重点还是Excel,毕竟...

    飞控总线试飞数据处理导出模块改进.pdf

    从给出的文件内容来看,本文主要讨论了飞控总线试飞数据处理导出模块的改进问题。以下是对该文档内容的知识点梳理: 1. **飞控总线试飞数据处理的重要性**:在验证某型直升机飞行控制系统功能的过程中,必须对采集...

    导入导出源码文档

    导入导出源码,可以直接使用,项目导入导出的小模块摘要

    CRM系统需求文档-客户管理模块.pdf

    CRM系统需求文档-客户管理模块 本文档主要描述了CRM系统的客户管理模块的要求和功能。该模块旨在记录和管理客户信息,提供了客户管理的主要功能,包括客户信息的录入、查询、编辑和删除等操作。 客户管理模块的...

    Windchill数据导入导出(DataLoad)中文

    而数据导入导出功能(DataLoad)是PTC Windchill中关键的功能模块之一,它允许用户通过标准化的格式在Windchill和外部系统之间高效地交换数据。 文档中提及了版权法、用户和培训文档的版权保护、许可协议对文档复制...

Global site tag (gtag.js) - Google Analytics