一. 功能描述
文档导出模块提供一种通用的文档导出解决方案,通过事先订制好的模板,结合模板引擎和输出引擎的应用,简化文档导出的工作、完成复杂报表格式文件的生成。本版提供输出到Word和Excel的服务。
二. 用户使用流程
流程图如下所示:
图1. 用户使用流程图
对很多业务模块来说,复杂报表的输出向来是件麻烦的事情,文档导出模块的主要设计思想就是“模板+数据”,将具有复杂格式的文件通过办公软件事先制作好模板,提交到服务器上;其他业务模块通过调用打印服务接口,即可导出相应格式的文件。
三. 模块设计
文档导出模块部署的上下文关系图如下所示。大多数业务系统部署在Linux应用服务器上,文档导出模块需要部署在基于Windows的服务器上。
图2. 上下文关系图
业务系统的报表等文件如要输出,首先通过HttpClient封装请求,将参数传递到文档导出模块,文档导出模块调用事先服务器端的模板文件,结合获取的页面请求参数,输出到Word或Excel文件。
文档导出模块的设计如下图所示:
图3. 功能结构图
主要分为模板引擎和输出引擎。这里说明了GenerateDoc的操作是如何完成的。模板引擎采用Velocity,其首先接收输入的数据是打印请求的参数(包括报表所需输出的Data和模板文件的名称TemplateName),首先根据获取的参数计算MD5值,和服务器端缓存文件的相应MD5值进行对比,如果相同则读取缓存的文件,不同则继续执行通常的处理流程,根据TemplateName查找并载入模板文件(模板文件是Word或Excel 的xml格式,通过Office Word 或 Excel 2003版本以上打开编辑并另存为此格式)。Velocity模板引擎对数据和模板文件进行处理,将数据填充到模板的相应位置,Merge生成完整的待输出的文件(xml格式),再经由输出引擎,输出Word或者Excel文件。
Java对word的操作不易处理,此处的输出引擎主要是采用Jacob来完成xml文件到 Doc 或者 Xls 格式的转换。(Jacob 是Java-COM Bridge的缩写,它在Java与微软的COM组件之间构建一座桥梁。使用Jacob自带的DLL动态链接库,并通过JNI的方式实现了在Java平台上对COM程序的调用。)
图4. 处理时序图
具体步骤解释如下:
-
页面点击打印“提交”按钮后,系统先用HttpClient对请求的数据进行封装。此时提交请求的页面显示系统提示信息如“文件正在生成中,请稍等”;
-
HttpClient使用Post方法将封装后的请求发送到文档导出模块,Post的参数包括报表数据&模板文件名称;
-
当文档导出模块接收到HttpClient Post过来的请求后,首先计算参数的MD5值,和缓存中文具的MD5值比对,如有相同则返回相应缓存文件,否则解析参数并存储到数据库(队列)。数据库表会保存请求数据参数及计算的MD5值,同时获取该条记录的主键作为下载码(SeedID)返回。GetSeedID()就是执行这样的操作;
-
下载码生成后返回给所发送请求的页面;
-
文档导出模块执行核心的生成文件操作GenerateDoc();
-
当提交请求的页面收到返回的下载码后,定时发送查询消息,看文件是否已经生成完毕 IsGenerateOK(SeedID);
-
如果文件已经生成完毕,返回查询结果为True,请求页面随即将等待生成的提示消息取消,显示下载文件的链接;
-
点击下载链接,发送下载文件请求;
-
文档导出模块收到请求后,将文件以流的方式输出。
四. 设计要点:
-
客户端封装
采用HttpClient来对客户端进行封装处理。
- 表单参数的命名需要和模板文件中的变量值对应起来,这个工作是由有文档导出应用的业务模块来提供的,文档导出模块只负责对模板和获取到的参数进行处理,生成一定格式的文件。
- 客户端在用HttpClient封装时,除了需要填入要输出的表单域参数外,还有一个必要的参数是使用模板的名称(TemplateName),以便服务器端能够根据该请求参数选择模板文件进行处理;
2. 缓存文件生成
缓存文件的目的是为了避免相同文件的重复生成操作。解决办法是文档导出模块在接收到打印请求的参数后,计算其MD5值,同缓存文件的MD5值比对,如有相同,并且其对应的文件还存在于缓存中,就可以跳过生成文件的操作,直接从缓存中读取数据返回给客户端。
3. Office应用对象池
4. 清除残留进程
Excel程序打开后,在关闭时会有个20多兆的进程驻留在内存中。所以在应用服务重新启动会存在残留进程的问题,久而久之会对服务器的性能造成影响。解决的思路是每次在文档导出模块停止服务时(而非启动时),对残留的进程进行清理的操作。用C++做成动态链接库由Java通过JNI调用。
- 大小: 36.8 KB
- 大小: 15.4 KB
- 大小: 17.9 KB
- 大小: 17.7 KB
分享到:
相关推荐
- 调用模块函数:模块可能提供了如`导出数据到Excel`、`创建工作簿`等函数,根据模块文档使用它们。 - 错误处理:在调用模块函数时,需要进行错误处理,确保程序的健壮性。 6. 示例代码: ```易语言 .声明 ...
9. **文档说明**:一个成熟的模块通常会配备详尽的使用说明,指导用户如何安装、配置和使用,以便更好地利用模块功能。 综上所述,《易语言模块导出数据1.1》是一个针对易语言开发者的实用工具,其核心在于简化数据...
对于使用Vtiger CRM管理销售流程的企业来说,这个模块尤其有用,因为它使得销售团队可以快速地将重要的业务文件如报价单、销售订单等导出为PDF,便于与客户进行正式的书面交流,同时也方便内部审核和记录保存。...
这个“excel文件导入导出模块纯静版源码”提供了无依赖、轻量级的解决方案,使得开发者能够在自己的项目中轻松处理Excel文件。以下是关于这个模块的一些关键知识点和相关技术细节: 1. **文件格式理解**:Excel文件...
6. **PowerShell**:另一种方法是使用PowerShell,它提供了丰富的SQL Server模块,可以调用SQL命令行工具(如sqlcmd或bcp)来导出数据,然后通过PowerShell脚本控制Word文档的操作。 7. **Third-party Tools**:...
"Advanced Export PDF" 是一个专为处理PDF文档导出功能的高级模块,它提供了一系列的高级选项和定制化设置,以满足用户在PDF文件转换和输出时的复杂需求。PDF(Portable Document Format)是一种广泛使用的文件格式...
"Excel-VBA宏编程实例源代码-自动导入或导出模块.zip"这个压缩包包含了用于自动导入和导出模块的源代码,这对于提高工作效率和简化重复性工作具有重要意义。 1. **VBA宏**:VBA宏是录制或手动编写的一系列指令,...
在实际应用中,这个模块可以被用于各种场景,比如数据分析、报表生成、数据导入导出等。例如,你可以使用这个模块来读取一个Excel文件,然后将数据存储到数据库中,或者根据这些数据生成图表和报表。此外,结合其他...
Excel 导入、导出、模板生成公共模块整理 Excel 导入、导出、模板生成公共模块整理是指使用 Microsoft.Office.Interop.Excel.dll 库来实现 Excel 文件的导入、导出和模板生成操作。该模块提供了一个单例类 ...
易语言ACCESS对象导入与导出XML模块是一种编程技术,主要用于在易语言环境下处理ACCESS数据库对象,并将这些数据转换成XML格式进行存储或传输。在本文中,我们将深入探讨这一技术的关键概念、工作原理以及实现方法。...
模块描述符是在每个模块的`module-info.java`文件中定义的,其中声明了模块的名称、导出的包、依赖的其他模块等信息。模块图则是在运行时或构建时确定的,描述了所有模块间的依赖关系。 在Java 9中,使用模块化有...
数据库表导出CHM文件是一项实用的技术...总之,"数据库表导出CHM文件"是一个将数据库内容转化为易于管理和分享的文档格式的过程,通过提供的工具和组件,用户可以方便地完成这一转换,提升数据库信息的可读性和易用性。
本篇文章将详细讲解如何将Oracle数据表导出为Word文档,以满足软件开发和报告撰写的需求。 首先,理解Oracle数据表的基本概念。在Oracle数据库中,数据表是存储数据的主要结构,由一系列行和列组成,每一行代表一个...
入库少,可以很快把简单的工作干了这是第一个版本的功能,后来慢慢用的人多了,也就功能慢慢丰富了,现在包含了Excel的导入导出,Word的导出,PDF的导出,Excel Charts的导出, Html的导出5个功能模块,重点还是Excel,毕竟...
从给出的文件内容来看,本文主要讨论了飞控总线试飞数据处理导出模块的改进问题。以下是对该文档内容的知识点梳理: 1. **飞控总线试飞数据处理的重要性**:在验证某型直升机飞行控制系统功能的过程中,必须对采集...
导入导出源码,可以直接使用,项目导入导出的小模块摘要
CRM系统需求文档-客户管理模块 本文档主要描述了CRM系统的客户管理模块的要求和功能。该模块旨在记录和管理客户信息,提供了客户管理的主要功能,包括客户信息的录入、查询、编辑和删除等操作。 客户管理模块的...
而数据导入导出功能(DataLoad)是PTC Windchill中关键的功能模块之一,它允许用户通过标准化的格式在Windchill和外部系统之间高效地交换数据。 文档中提及了版权法、用户和培训文档的版权保护、许可协议对文档复制...