Java应用生成Word文档方法、装置、设备及介质
技术领域
本申请涉及到数据处理
技术领域
,特别是涉及到一种Java应用生成Word文档方法、装置、设备及介质。背景技术
采用Java(面向对象编程语言)技术开发的Java应用得到广泛使用,从而使根据Java应用打开的网页生成Word文档的需要越来越多。因微软没有对Java开放读写Microsoft Office(办公软件套装)格式的文档的接口,传统采用ApachePOI(Apache软件基金会的开放源码函式库)根据Java应用打开的网页生成Word(办公软件)文档,但是这种方式只支持简单Word文档的生成,当需要生成的Word文档比较复杂时,因包含各种类型的图表、图片,需要大量进行编码、调试样式,当样式较复杂时,很难调试到符合要求的样式。
发明内容
本申请的主要目的为提供一种Java应用生成Word文档方法、装置、设备及介质,旨在解决现有技术采用ApachePOI根据Java应用打开的网页生成Word文档,对比较复杂的Word文档需要大量进行编码、调试样式,调试样式困难的技术问题。
为了实现上述发明目的,本申请提出一种Java应用生成Word文档方法,所述方法适用于Java应用,所述Java应用中集成FreeMarker框架,所述方法包括:
获取Word文档生成请求,所述Word文档生成请求携带有目标FreeMarker模板标识集合和目标位置配置数据;
从所述目标FreeMarker模板标识集合对应的模板中获取占位符,得到待处理的占位符集合;
对所述待处理的占位符集合中的所述占位符按占位符类型进行划分,得到纯文本占位符集合和非纯文本占位符集合;
获取业务数据库,根据所述业务数据库,分别针对所述纯文本占位符集合中的每个所述占位符依次进行业务数据查找和KV数据对组装,得到第一KV数据对集合;
获取图片数据库,根据所述图片数据库,分别针对所述非纯文本占位符集合中的每个所述占位符依次进行图片标识查找和KV数据对组装,得到第二KV数据对集合;
基于所述FreeMarker框架,根据所述图片数据库、所述目标FreeMarker模板标识集合、所述目标位置配置数据、所述第一KV数据对集合和所述第二KV数据对集合进行Word文档生成,得到目标Word文档。
进一步的,所述获取Word文档生成请求的步骤之前,包括:
获取模板生成请求;
响应所述模板生成请求,获取待添加的FreeMarker模板标识、待添加的Word框架数据、待添加的Word样式数据、待添加的占位符集合和待处理的模板对象位置数据集合,其中,所述待添加的Word框架数据是基于Html得到的Word框架数据,所述待添加的Word样式数据是基于CSS得到的Word样式数据;
根据所述待添加的FreeMarker模板标识、所述待添加的Word框架数据、所述待添加的Word样式数据、所述待添加的占位符集合和所述待处理的模板对象位置数据集合进行静态页面生成,得到待转换的静态页面;
对所述待转换的静态页面进行flt文件格式转换,得到待存储的FreeMarker模板;
根据所述待存储的FreeMarker模板更新FreeMarker模板库。
进一步的,所述获取图片数据库的步骤,包括:
从所述非纯文本占位符集合中获取图表占位符,得到图表占位符集合;
根据所述业务数据库,分别针对所述图表占位符集合中的每个所述图表占位符依次进行图表生成及图片转换,得到待存储的图片集合;
获取所述图片数据库,根据所述待存储的图片集合更新所述图片数据库。
进一步的,所述基于所述FreeMarker框架,根据所述图片数据库、所述目标FreeMarker模板标识集合、所述目标位置配置数据、所述第一KV数据对集合和所述第二KV数据对集合进行Word文档生成,得到目标Word文档的步骤,包括:
基于所述FreeMarker框架,获取FreeMarker模板库,根据所述FreeMarker模板库、所述目标FreeMarker模板标识集合和所述目标位置配置数据进行文档框架搭建,得到待替换的flt文件;
基于所述FreeMarker框架,根据所述待替换的flt文件、所述图片数据库、所述第一KV数据对集合和所述第二KV数据对集合进行Word文档生成,得到所述目标Word文档。
进一步的,所述基于所述FreeMarker框架,根据所述待替换的flt文件、所述图片数据库、所述第一KV数据对集合和所述第二KV数据对集合进行Word文档生成,得到所述目标Word文档的步骤,包括:
基于所述FreeMarker框架,根据所述图片数据库、所述第一KV数据对集合和所述第二KV数据对集合,对所述待替换的flt文件中的所述占位符进行替换,得到待转换的flt文件;
基于所述FreeMarker框架,对所述待转换的flt文件进行Word文档格式转换,得到所述目标Word文档。
进一步的,所述Java应用中集成Word转PDF插件,所述Word转PDF插件是基于OpenOffice得到的插件;
所述基于所述FreeMarker框架,根据所述图片数据库、所述目标FreeMarker模板标识集合、所述目标位置配置数据、所述第一KV数据对集合和所述第二KV数据对集合进行Word文档生成,得到目标Word文档的步骤之后,还包括:
获取转换PDF请求;
响应所述转换PDF请求,将所述目标Word文档发送给所述Word转PDF插件;
基于所述Word转PDF插件,对所述目标Word文档进行PDF文件格式转换,得到目标PDF文档。
进一步的,所述基于所述Word转PDF插件,对所述目标Word文档进行PDF文件格式转换,得到目标PDF文档的步骤,包括:
获取预设的存储地址;
采用所述Word转PDF插件的Office文档转换器,对所述目标Word文档进行PDF文件格式转换,得到所述目标PDF文档;
将所述目标PDF文档存储到所述预设的存储地址对应的文件夹中。
本申请还提出了一种Java应用生成Word文档装置,所述装置适用于Java应用,所述Java应用中集成FreeMarker框架,所述装置包括:
请求获取模块,用于获取Word文档生成请求,所述Word文档生成请求携带有目标FreeMarker模板标识集合和目标位置配置数据;
待处理的占位符集合确定模块,用于从所述目标FreeMarker模板标识集合对应的模板中获取占位符,得到待处理的占位符集合;
占位符划分模块,用于对所述待处理的占位符集合中的所述占位符按占位符类型进行划分,得到纯文本占位符集合和非纯文本占位符集合;
第一KV数据对集合确定模块,用于获取业务数据库,根据所述业务数据库,分别针对所述纯文本占位符集合中的每个所述占位符依次进行业务数据查找和KV数据对组装,得到第一KV数据对集合;
第二KV数据对集合确定模块,用于获取图片数据库,根据所述图片数据库,分别针对所述非纯文本占位符集合中的每个所述占位符依次进行图片标识查找和KV数据对组装,得到第二KV数据对集合;
目标Word文档确定模块,用于基于所述FreeMarker框架,根据所述图片数据库、所述目标FreeMarker模板标识集合、所述目标位置配置数据、所述第一KV数据对集合和所述第二KV数据对集合进行Word文档生成,得到目标Word文档。
本申请还提出了一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现上述任一项所述方法的步骤。
本申请还提出了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述任一项所述的方法的步骤。
本申请的Java应用生成Word文档方法、装置、设备及介质,该方法适用于Java应用,Java应用中集成FreeMarker框架,方法包括:获取Word文档生成请求,Word文档生成请求携带有目标FreeMarker模板标识集合和目标位置配置数据;从目标FreeMarker模板标识集合对应的模板中获取占位符,得到待处理的占位符集合;对待处理的占位符集合中的占位符按占位符类型进行划分,得到纯文本占位符集合和非纯文本占位符集合;获取业务数据库,根据业务数据库,分别针对纯文本占位符集合中的每个占位符依次进行业务数据查找和KV数据对组装,得到第一KV数据对集合;获取图片数据库,根据图片数据库,分别针对非纯文本占位符集合中的每个占位符依次进行图片标识查找和KV数据对组装,得到第二KV数据对集合;基于FreeMarker框架,根据图片数据库、目标FreeMarker模板标识集合、目标位置配置数据、第一KV数据对集合和第二KV数据对集合进行Word文档生成,得到目标Word文档,从而实现了基于FreeMarker模板和FreeMarker框架进行Word文档生成,不需要针对具体内容大量进行编码,也不需要针对具体内容调整样式,而且使模板和业务数据及图片解耦合,使本申请能更好的适应需求的变动。
附图说明
图1为本申请一实施例的Java应用生成Word文档方法的流程示意图;
图2为本申请一实施例的Java应用生成Word文档装置的结构示意框图;
图3为本申请一实施例的计算机设备的结构示意框图。
本申请目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
参照图1,本申请实施例中提供一种Java应用生成Word文档方法,所述方法适用于Java应用,所述Java应用中集成FreeMarker框架,所述方法包括:
S1:获取Word文档生成请求,所述Word文档生成请求携带有目标FreeMarker模板标识集合和目标位置配置数据;
S2:从所述目标FreeMarker模板标识集合对应的模板中获取占位符,得到待处理的占位符集合;
S3:对所述待处理的占位符集合中的所述占位符按占位符类型进行划分,得到纯文本占位符集合和非纯文本占位符集合;
S4:获取业务数据库,根据所述业务数据库,分别针对所述纯文本占位符集合中的每个所述占位符依次进行业务数据查找和KV数据对组装,得到第一KV数据对集合;
S5:获取图片数据库,根据所述图片数据库,分别针对所述非纯文本占位符集合中的每个所述占位符依次进行图片标识查找和KV数据对组装,得到第二KV数据对集合;
S6:基于所述FreeMarker框架,根据所述图片数据库、所述目标FreeMarker模板标识集合、所述目标位置配置数据、所述第一KV数据对集合和所述第二KV数据对集合进行Word文档生成,得到目标Word文档。
本实施例方法适用于Java应用,Java应用中集成FreeMarker框架,方法包括:获取Word文档生成请求,Word文档生成请求携带有目标FreeMarker模板标识集合和目标位置配置数据;从目标FreeMarker模板标识集合对应的模板中获取占位符,得到待处理的占位符集合;对待处理的占位符集合中的占位符按占位符类型进行划分,得到纯文本占位符集合和非纯文本占位符集合;获取业务数据库,根据业务数据库,分别针对纯文本占位符集合中的每个占位符依次进行业务数据查找和KV数据对组装,得到第一KV数据对集合;获取图片数据库,根据图片数据库,分别针对非纯文本占位符集合中的每个占位符依次进行图片标识查找和KV数据对组装,得到第二KV数据对集合;基于FreeMarker框架,根据图片数据库、目标FreeMarker模板标识集合、目标位置配置数据、第一KV数据对集合和第二KV数据对集合进行Word文档生成,得到目标Word文档,从而实现了基于FreeMarker模板和FreeMarker框架进行Word文档生成,不需要针对具体内容大量进行编码,也不需要针对具体内容调整样式,而且使模板和业务数据及图片解耦合,使本申请能更好的适应需求的变动。
FreeMarker,是模板引擎,也就是一种基于模板和要改变的数据,并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。
其中,所述Java应用中集成FreeMarker框架,从而使该Java应用可以使用FreeMarker框架的模板引擎。
对于S1,可以获取用户输入的Word文档生成请求,也可以获取第三方应用系统发送的Word文档生成请求,还可以是实现本申请的应用程序根据预设条件触发的Word文档生成请求。比如,所述预设条件是每天7点,在此举例不做具体限定。
Word文档生成请求,是将Java应用中的网页生成Word文档的请求。
所述目标FreeMarker模板标识集合,是Word文档生成请求用于生成Word文档的FreeMarker模板的FreeMarker模板标识的集合。所述目标FreeMarker模板标识集合中包括一个或多个FreeMarker模板标识。FreeMarker模板标识包括模板名称、模板ID等唯一标识一个FreeMarker模板的数据。
所述目标位置配置数据,是在生成Word文档时,所述目标FreeMarker模板标识集合中的各个FreeMarker模板标识对应的FreeMarker模板的位置数据。
所述目标位置配置数据包括:FreeMarker模板标识、位置数据,每个所述FreeMarker模板标识对应一个位置数据。
可以理解的是,所述目标位置配置数据可以为非空值,也可以为空值。
可选的,当所述目标位置配置数据为空值,所述目标FreeMarker模板标识集合中包括多个FreeMarker模板标识时,所述目标FreeMarker模板标识集合中的FreeMarker模板标识的排列顺序作为生成Word文档时所述目标FreeMarker模板标识集合中的各个FreeMarker模板标识对应的FreeMarker模板的位置数据。
对于S2,从所述目标FreeMarker模板标识集合对应的每个FreeMarker模板中获取占位符,将获取的所有占位符作为待处理的占位符集合。
对于S3,占位符类型包括:纯文本占位符和非纯文本占位符。非纯文本占位符包括:图片占位符和图表占位符。
其中,纯文本占位符对应的位置需要替换成纯文本数据。图片占位符对应的位置需要替换成图片。图表占位符对应的位置需要替换成表格或者表格生成的图片。
对所述待处理的占位符集合中的所述占位符按占位符类型进行划分,将所有纯文本占位符作为纯文本占位符集合,将所有非纯文本占位符作为非纯文本占位符集合。
对于S4,可以从数据库中获取业务数据库,也可以从第三方应用系统中获取业务数据库。
业务数据库包括:业务数据标识和业务数据。业务数据标识可以是业务数据ID,用于唯一标识一个业务数据。业务数据可以是一个字段的值,一个是多个字段的值。
KV数据对,也就是Key-Value数据格式。
可选的,从所述纯文本占位符集合中提取一个占位符作为第一待查找的纯文本占位符;将第一待查找的纯文本占位符在所述目标FreeMarker模板标识集合对应的FreeMarker模板中的预设数据标识,在所述业务数据库中进行查找,将在所述业务数据库中查找到的预设数据标识对应的业务数据标识对应的业务数据作为第一待拼接的业务数据;根据所述第一待查找的纯文本占位符和所述第一待拼接的业务数据进行KV数据对组装,得到所述第一待查找的纯文本占位符对应的第一待处理的KV数据对,其中,将所述第一待查找的纯文本占位符作为所述第一待处理的KV数据对的Key,以及将所述第一待拼接的业务数据作为所述第一待处理的KV数据对的Value;重复执行所述从所述纯文本占位符集合中提取一个占位符作为第一待查找的纯文本占位符的步骤,直至完成所述纯文本占位符集合中的占位符的提取;将所有所述第一待处理的KV数据对作为所述第一KV数据对集合。
可选的,获取占位符配置数据;从所述纯文本占位符集合中提取一个占位符作为第二待查找的纯文本占位符;将所述第二待查找的纯文本占位符在所述占位符配置数据中进行查找,得到第一个性化配置查找结果;当所述第一个性化配置查找结果为成功时,将所述第二待查找的纯文本占位符在所述占位符配置数据中的占位符标识对应的配置数据标识作为第一待查找的数据标识;当所述第一个性化配置查找结果为失败时,将所述第二待查找的纯文本占位符在所述目标FreeMarker模板标识集合对应的FreeMarker模板中的预设数据标识作为所述第一待查找的数据标识;将所述第一待查找的数据标识在所述业务数据库中进行查找,将在所述业务数据库中查找到的业务数据标识对应的业务数据作为第二待拼接的业务数据;根据所述第二待查找的纯文本占位符和所述第二待拼接的业务数据进行KV数据对组装,得到所述第二待查找的纯文本占位符对应的第一待分析的KV数据对,其中,将所述第二待查找的纯文本占位符作为所述第一待分析的KV数据对的Key,以及将所述第二待拼接的业务数据作为所述第一待分析的KV数据对的Value;重复执行所述从所述纯文本占位符集合中提取一个占位符作为第二待查找的纯文本占位符的步骤,直至完成所述纯文本占位符集合中的占位符的提取;将所有所述第一待分析的KV数据对作为所述第一KV数据对集合。
占位符配置数据包括:占位符标识和配置数据标识,其中,每个占位符标识对应一个配置数据标识。占位符标识可以是占位符名称、占位符ID等唯一标识一个占位符的数据。配置数据标识可以是业务数据标识,也可以是图片标识。图片标识可以是图片名称、图片ID等唯一标识一个图片的数据。
对于S5,可以从数据库中获取图片数据库,也可以从第三方应用系统中获取图片数据库。
图片数据库包括:图片标识和图片,每个图片标识对应一个图片。
可选的,从所述非纯文本占位符集合中提取一个占位符作为第一待查找的非纯文本占位符;将第一待查找的非纯文本占位符在所述目标FreeMarker模板标识集合对应的FreeMarker模板中的预设数据标识,在所述图片数据库中进行查找,将在所述图片数据库中查找到的预设数据标识对应的图片标识作为第一待拼接的图片标识;根据所述第一待查找的非纯文本占位符和所述第一待拼接的图片标识进行KV数据对组装,得到所述第一待查找的非纯文本占位符对应的第二待处理的KV数据对,其中,将所述第一待查找的非纯文本占位符作为所述第二待处理的KV数据对的Key,以及将所述第一待拼接的图片标识作为所述第二待处理的KV数据对的Value;重复执行所述从所述非纯文本占位符集合中提取一个占位符作为第一待查找的非纯文本占位符的步骤,直至完成所述非纯文本占位符集合中的占位符的提取;将所有所述第二待处理的KV数据对作为所述第二KV数据对集合。
可选的,获取占位符配置数据;从所述非纯文本占位符集合中提取一个占位符作为第二待查找的非纯文本占位符;将所述第二待查找的非纯文本占位符在所述占位符配置数据中进行查找,得到第二个性化配置查找结果;当所述第二个性化配置查找结果为成功时,将所述第二待查找的非纯文本占位符在所述占位符配置数据中的占位符标识对应的配置数据标识作为第二待查找的数据标识;当所述第二个性化配置查找结果为失败时,将所述第二待查找的非纯文本占位符在所述目标FreeMarker模板标识集合对应的FreeMarker模板中的预设数据标识作为所述第二待查找的数据标识;将所述第二待查找的数据标识在所述图片数据库中进行查找,将在所述图片数据库中查找到的图片标识作为第二待拼接的图片标识;根据所述第二待查找的非纯文本占位符和所述第二待拼接的图片标识进行KV数据对组装,得到所述第二待查找的非纯文本占位符对应的第二待分析的KV数据对,其中,将所述第二待查找的非纯文本占位符作为所述第二待分析的KV数据对的Key,以及将所述第二待拼接的图片标识作为所述第二待分析的KV数据对的Value;重复执行所述从所述非纯文本占位符集合中提取一个占位符作为第二待查找的非纯文本占位符的步骤,直至完成所述非纯文本占位符集合中的占位符的提取;将所有所述第二待分析的KV数据对作为所述第二KV数据对集合。
对于S6,基于所述FreeMarker框架对应的模板引擎,根据所述图片数据库、所述目标FreeMarker模板标识集合、所述目标位置配置数据、所述第一KV数据对集合和所述第二KV数据对集合进行占位符替换和Word文档生成,将生成的Word文档作为所述目标Word文档。
在一个实施例中,上述获取Word文档生成请求的步骤之前,包括:
S11:获取模板生成请求;
S12:响应所述模板生成请求,获取待添加的FreeMarker模板标识、待添加的Word框架数据、待添加的Word样式数据、待添加的占位符集合和待处理的模板对象位置数据集合,其中,所述待添加的Word框架数据是基于Html得到的Word框架数据,所述待添加的Word样式数据是基于CSS得到的Word样式数据;
S13:根据所述待添加的FreeMarker模板标识、所述待添加的Word框架数据、所述待添加的Word样式数据、所述待添加的占位符集合和所述待处理的模板对象位置数据集合进行静态页面生成,得到待转换的静态页面;
S14:对所述待转换的静态页面进行flt文件格式转换,得到待存储的FreeMarker模板;
S15:根据所述待存储的FreeMarker模板更新FreeMarker模板库。
本实施例通过先进行静态页面生成,然后对静态页面进行flt文件格式转换,将转换得到的flt文件格式的文件作为待存储的FreeMarker模板,从而实现了基于Html和CSS生成FreeMarker模板,为实现了基于FreeMarker模板和FreeMarker框架进行Word文档生成提供了基础;通过在FreeMarker模板设置占位符,使模板和业务数据及图片解耦合,使本申请能更好的适应需求的变动。
对于S11,可以获取用户输入的模板生成请求,也可以获取第三方应用系统发送的模板生成请求。
模板生成请求,也就是生成FreeMarker模板的请求。
对于S12,响应所述模板生成请求,可以获取用户输入的待添加的FreeMarker模板标识、待添加的Word框架数据、待添加的Word样式数据、待添加的占位符集合和待处理的模板对象位置数据集合,也可以从第三方应用系统中获取待添加的FreeMarker模板标识、待添加的Word框架数据、待添加的Word样式数据、待添加的占位符集合和待处理的模板对象位置数据集合。
其中,所述待添加的Word框架数据是采用Html(超文本标记语言)开发得到的Word框架数据。Word框架数据包括:文本块和文本块配置数据。文本块中可以添加文本内容,也可以添加图片。文本块配置数据,是每个文本块的内容数据,该内容数据不包括占位符。
所述待添加的Word样式数据是采用CSS(层叠样式表)开发得到的Word样式数据。Word样式数据包括但不限于:文本样式和图片样式。文本样式包括但不限于:文本大纲级别、文本对齐方式、文本字体和文本背景色。图片样式包括但不限于:图片对齐方式、是否包括图片边框、图片高度、图片宽度。
待添加的FreeMarker模板标识,也就是FreeMarker模板标识。
待添加的占位符集合中包括一个或多个占位符。占位符的具体字符可以根据需要设置,在此不做限定。
待处理的模板对象位置数据集合,是待添加的Word框架数据、待添加的Word样式数据、待添加的占位符集合中的各个对象的位置数据。比如,一个文本块可以为一个对象。
对于S13,采用所述待处理的模板对象位置数据集合,根据所述待添加的Word框架数据、所述待添加的Word样式数据和所述待添加的占位符集合进行静态页面生成,将生成的静态页面作为所述待转换的静态页面,将所述待添加的FreeMarker模板标识作为所述待转换的静态页面的页面标识。
对于S14,对所述待转换的静态页面进行flt文件格式转换,将转换得到的flt文件格式的文件作为待存储的FreeMarker模板。
flt文件格式,是VEGA prime的openflight文件,是用来生成地形的文件。
对于S15,根据所述待存储的FreeMarker模板对应的所述待添加的FreeMarker模板标识,将所述待存储的FreeMarker模板更新到FreeMarker模板库中。
FreeMarker模板库包括:FreeMarker模板标识集合和FreeMarker模板集合。
在一个实施例中,上述获取图片数据库的步骤,包括:
S51:从所述非纯文本占位符集合中获取图表占位符,得到图表占位符集合;
S52:根据所述业务数据库,分别针对所述图表占位符集合中的每个所述图表占位符依次进行图表生成及图片转换,得到待存储的图片集合;
S53:获取所述图片数据库,根据所述待存储的图片集合更新所述图片数据库。
本实施例实现了对图表占位符依次进行图表生成及图片转换,从而为后续采用图片生成Word文档提供了支持。
对于S51,从所述非纯文本占位符集合中获取图表占位符,将获取的所有图表占位符作为图表占位符集合。
对于S52,从所述图表占位符集合中提取一个占位符作为第一待查找的图表占位符;将第一待查找的图表占位符在所述目标FreeMarker模板标识集合对应的FreeMarker模板中的预设数据标识,在所述业务数据库中进行查找,将在所述业务数据库中查找到的业务数据标识对应的业务数据作为第一待生成图表的业务数据;采用图表生成插件,根据所述第一待生成图表的业务数据进行图表生成,得到第一待转换的图表;根据所述第一待转换的图表进行图片转换,得到第一待存储的图片;重复执行所述从所述图表占位符集合中提取一个占位符作为第一待查找的图表占位符的步骤,直至完成所述图表占位符集合中的占位符的提取;将所有所述第一待存储的图片作为所述待存储的图片集合。
可选的,获取占位符配置数据;从所述图表占位符集合中提取一个占位符作为第二待查找的图表占位符;将所述第二待查找的图表占位符在所述占位符配置数据中进行查找,得到第三个性化配置查找结果;当所述第三个性化配置查找结果为成功时,将所述第二待查找的图表占位符在所述占位符配置数据中的占位符标识对应的配置数据标识作为第三待查找的数据标识;当所述第三个性化配置查找结果为失败时,将所述第二待查找的图表占位符在所述目标FreeMarker模板标识集合对应的FreeMarker模板中的预设数据标识作为所述第三待查找的数据标识;将所述第三待查找的数据标识在所述业务数据库中进行查找,将在所述业务数据库中查找到的业务数据标识对应的业务数据作为第二待生成图表的业务数据;采用图表生成插件,根据所述第二待生成图表的业务数据进行图表生成,得到第二待转换的图表;根据所述第二待转换的图表进行图片转换,得到第二待存储的图片;重复执行所述从所述图表占位符集合中提取一个占位符作为第二待查找的图表占位符的步骤,直至完成所述图表占位符集合中的占位符的提取;将所有所述第二待存储的图片作为所述待存储的图片集合。
图表生成插件可以根据业务数据生成表格和图表,具体实现步骤在此不做赘述。
对于S53,获取所述图片数据库,将所述待存储的图片集合更新到所述图片数据库中。
在一个实施例中,上述基于所述FreeMarker框架,根据所述图片数据库、所述目标FreeMarker模板标识集合、所述目标位置配置数据、所述第一KV数据对集合和所述第二KV数据对集合进行Word文档生成,得到目标Word文档的步骤,包括:
S61:基于所述FreeMarker框架,获取FreeMarker模板库,根据所述FreeMarker模板库、所述目标FreeMarker模板标识集合和所述目标位置配置数据进行文档框架搭建,得到待替换的flt文件;
S62:基于所述FreeMarker框架,根据所述待替换的flt文件、所述图片数据库、所述第一KV数据对集合和所述第二KV数据对集合进行Word文档生成,得到所述目标Word文档。
本实施例实现了基于所述FreeMarker框架,先进行文档框架搭建,然后进行Word文档生成,从而实现了基于FreeMarker模板和FreeMarker框架进行Word文档生成,不需要针对具体内容大量进行编码,也不需要针对具体内容调整样式。
对于S61,基于所述FreeMarker框架,可以从数据库中获取FreeMarker模板库,也可以从第三方应用系统中获取FreeMarker模板库。
基于所述FreeMarker框架对应的模板引擎,采用所述目标位置配置数据,根据所述FreeMarker模板库和所述目标FreeMarker模板标识集合进行文档框架搭建,将搭建得到的flt文件格式的文件作为所述待替换的flt文件。
对于S62,基于所述FreeMarker框架对应的模板引擎,根据所述图片数据库、所述第一KV数据对集合和所述第二KV数据对集合,对所述待替换的flt文件中的占位符进行替换,将完成替换的所述待替换的flt文件进行Word文档格式转换,将转换得到的Word文档格式的文件作为所述目标Word文档。
Word文档格式包括:.DOC、.DOCX。
在一个实施例中,上述基于所述FreeMarker框架,根据所述待替换的flt文件、所述图片数据库、所述第一KV数据对集合和所述第二KV数据对集合进行Word文档生成,得到所述目标Word文档的步骤,包括:
S621:基于所述FreeMarker框架,根据所述图片数据库、所述第一KV数据对集合和所述第二KV数据对集合,对所述待替换的flt文件中的所述占位符进行替换,得到待转换的flt文件;
S622:基于所述FreeMarker框架,对所述待转换的flt文件进行Word文档格式转换,得到所述目标Word文档。
本实施例基于所述FreeMarker框架,根据所述第一KV数据对集合和所述第二KV数据对集合,对所述待替换的flt文件中的所述占位符进行替换和Word文档格式转换,从而实现了基于FreeMarker模板和FreeMarker框架进行Word文档生成,不需要针对具体内容大量进行编码,也不需要针对具体内容调整样式。
对于S621,基于所述FreeMarker框架对应的模板引擎的FreeMarker Template类(模板编写类),采用所述第一KV数据对集合的Value值对所述待替换的flt文件中的所述占位符进行替换,并且,采用所述第二KV数据对集合的Value值从所述图片数据库中获取图片,将获取的图片对所述待替换的flt文件中的所述占位符进行替换,将替换结束的所述待替换的flt文件作为所述待转换的flt文件。
对于S622,基于所述FreeMarker框架对应的模板引擎的template.process方法,对所述待转换的flt文件进行Word文档格式转换,将转换得到的Word文档格式的文件作为所述目标Word文档。
在一个实施例中,上述Java应用中集成Word转PDF插件,所述Word转PDF插件是基于OpenOffice得到的插件;
所述基于所述FreeMarker框架,根据所述图片数据库、所述目标FreeMarker模板标识集合、所述目标位置配置数据、所述第一KV数据对集合和所述第二KV数据对集合进行Word文档生成,得到目标Word文档的步骤之后,还包括:
S7:获取转换PDF请求;
S8:响应所述转换PDF请求,将所述目标Word文档发送给所述Word转PDF插件;
S9:基于所述Word转PDF插件,对所述目标Word文档进行PDF文件格式转换,得到目标PDF文档。
因微软没有针对Java开放Word文档格式转换成PDF文件格式的接口,采用ApachePOI根据Word文档进行转换时,会出现部分内容丢失、图片位置改变、图片与文字重叠,为了解决这些问题,本实施例通过采用基于OpenOffice得到的插件将Word文档转换成PDF文件格式,因OpenOffice对Word的解码与转码有优秀的支持,从而提高了PDF转换的准确性。
OpenOffice,是一套跨平台的办公室软件套件,能在Windows、Linux、MacOS X(X11)和Solaris等操作系统上执行。
对于S7,可以获取用户输入的转换PDF请求,也可以获取第三方应用系统发送的转换PDF请求。
转换PDF请求,也就是将Word文档格式转换成PDF文件格式的请求。
PDF,是Portable Document Format的简称,意为便携式文档格式。
对于S8,响应所述转换PDF请求,将所述目标Word文档转换为文件流,将转换得到的文件流发送给所述Word转PDF插件。
对于S9,基于所述Word转PDF插件,对所述目标Word文档进行解码,对解码得到的数据进行PDF文件格式的转码,将转码得到的PDF文件格式的文件作为所述目标PDF文档。
在一个实施例中,上述基于所述Word转PDF插件,对所述目标Word文档进行PDF文件格式转换,得到目标PDF文档的步骤,包括:
S91:获取预设的存储地址;
S92:采用所述Word转PDF插件的Office文档转换器,对所述目标Word文档进行PDF文件格式转换,得到所述目标PDF文档;
S93:将所述目标PDF文档存储到所述预设的存储地址对应的文件夹中。
本实施例采用所述Word转PDF插件的Office文档转换器进行PDF文件格式转换,因所述Word转PDF插件是基于OpenOffice得到的插件,OpenOffice对Word的解码与转码有优秀的支持,从而提高了PDF转换的准确性。
对于S91,可以获取用户输入的预设的存储地址。
预设的存储地址,是预设存储目标PDF文档的文件夹的链接地址。
对于S92,采用所述Word转PDF插件的Office文档转换器,对所述目标Word文档进行解码和PDF文件格式的转码,将转码得到的PDF文件格式作为所述目标PDF文档。
Office文档转换器,也就是Office DocumentConverter。
参照图2,本申请还提出了一种Java应用生成Word文档装置,所述装置适用于Java应用,所述Java应用中集成FreeMarker框架,所述装置包括:
请求获取模块100,用于获取Word文档生成请求,所述Word文档生成请求携带有目标FreeMarker模板标识集合和目标位置配置数据;
待处理的占位符集合确定模块200,用于从所述目标FreeMarker模板标识集合对应的模板中获取占位符,得到待处理的占位符集合;
占位符划分模块300,用于对所述待处理的占位符集合中的所述占位符按占位符类型进行划分,得到纯文本占位符集合和非纯文本占位符集合;
第一KV数据对集合确定模块400,用于获取业务数据库,根据所述业务数据库,分别针对所述纯文本占位符集合中的每个所述占位符依次进行业务数据查找和KV数据对组装,得到第一KV数据对集合;
第二KV数据对集合确定模块500,用于获取图片数据库,根据所述图片数据库,分别针对所述非纯文本占位符集合中的每个所述占位符依次进行图片标识查找和KV数据对组装,得到第二KV数据对集合;
目标Word文档确定模块600,用于基于所述FreeMarker框架,根据所述图片数据库、所述目标FreeMarker模板标识集合、所述目标位置配置数据、所述第一KV数据对集合和所述第二KV数据对集合进行Word文档生成,得到目标Word文档。
本实施例方法适用于Java应用,Java应用中集成FreeMarker框架,方法包括:获取Word文档生成请求,Word文档生成请求携带有目标FreeMarker模板标识集合和目标位置配置数据;从目标FreeMarker模板标识集合对应的模板中获取占位符,得到待处理的占位符集合;对待处理的占位符集合中的占位符按占位符类型进行划分,得到纯文本占位符集合和非纯文本占位符集合;获取业务数据库,根据业务数据库,分别针对纯文本占位符集合中的每个占位符依次进行业务数据查找和KV数据对组装,得到第一KV数据对集合;获取图片数据库,根据图片数据库,分别针对非纯文本占位符集合中的每个占位符依次进行图片标识查找和KV数据对组装,得到第二KV数据对集合;基于FreeMarker框架,根据图片数据库、目标FreeMarker模板标识集合、目标位置配置数据、第一KV数据对集合和第二KV数据对集合进行Word文档生成,得到目标Word文档,从而实现了基于FreeMarker模板和FreeMarker框架进行Word文档生成,不需要针对具体内容大量进行编码,也不需要针对具体内容调整样式,而且使模板和业务数据及图片解耦合,使本申请能更好的适应需求的变动。
参照图3,本申请实施例中还提供一种计算机设备,该计算机设备可以是服务器,其内部结构可以如图3所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设计的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于储存Java应用生成Word文档方法等数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种Java应用生成Word文档方法。所述Java应用生成Word文档方法,所述方法适用于Java应用,所述Java应用中集成FreeMarker框架,所述方法包括:获取Word文档生成请求,所述Word文档生成请求携带有目标FreeMarker模板标识集合和目标位置配置数据;从所述目标FreeMarker模板标识集合对应的模板中获取占位符,得到待处理的占位符集合;对所述待处理的占位符集合中的所述占位符按占位符类型进行划分,得到纯文本占位符集合和非纯文本占位符集合;获取业务数据库,根据所述业务数据库,分别针对所述纯文本占位符集合中的每个所述占位符依次进行业务数据查找和KV数据对组装,得到第一KV数据对集合;获取图片数据库,根据所述图片数据库,分别针对所述非纯文本占位符集合中的每个所述占位符依次进行图片标识查找和KV数据对组装,得到第二KV数据对集合;基于所述FreeMarker框架,根据所述图片数据库、所述目标FreeMarker模板标识集合、所述目标位置配置数据、所述第一KV数据对集合和所述第二KV数据对集合进行Word文档生成,得到目标Word文档。
本实施例方法适用于Java应用,Java应用中集成FreeMarker框架,方法包括:获取Word文档生成请求,Word文档生成请求携带有目标FreeMarker模板标识集合和目标位置配置数据;从目标FreeMarker模板标识集合对应的模板中获取占位符,得到待处理的占位符集合;对待处理的占位符集合中的占位符按占位符类型进行划分,得到纯文本占位符集合和非纯文本占位符集合;获取业务数据库,根据业务数据库,分别针对纯文本占位符集合中的每个占位符依次进行业务数据查找和KV数据对组装,得到第一KV数据对集合;获取图片数据库,根据图片数据库,分别针对非纯文本占位符集合中的每个占位符依次进行图片标识查找和KV数据对组装,得到第二KV数据对集合;基于FreeMarker框架,根据图片数据库、目标FreeMarker模板标识集合、目标位置配置数据、第一KV数据对集合和第二KV数据对集合进行Word文档生成,得到目标Word文档,从而实现了基于FreeMarker模板和FreeMarker框架进行Word文档生成,不需要针对具体内容大量进行编码,也不需要针对具体内容调整样式,而且使模板和业务数据及图片解耦合,使本申请能更好的适应需求的变动。
本申请一实施例还提供一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现一种Java应用生成Word文档方法,所述方法适用于Java应用,所述Java应用中集成FreeMarker框架,所述方法包括:获取Word文档生成请求,所述Word文档生成请求携带有目标FreeMarker模板标识集合和目标位置配置数据;从所述目标FreeMarker模板标识集合对应的模板中获取占位符,得到待处理的占位符集合;对所述待处理的占位符集合中的所述占位符按占位符类型进行划分,得到纯文本占位符集合和非纯文本占位符集合;获取业务数据库,根据所述业务数据库,分别针对所述纯文本占位符集合中的每个所述占位符依次进行业务数据查找和KV数据对组装,得到第一KV数据对集合;获取图片数据库,根据所述图片数据库,分别针对所述非纯文本占位符集合中的每个所述占位符依次进行图片标识查找和KV数据对组装,得到第二KV数据对集合;基于所述FreeMarker框架,根据所述图片数据库、所述目标FreeMarker模板标识集合、所述目标位置配置数据、所述第一KV数据对集合和所述第二KV数据对集合进行Word文档生成,得到目标Word文档。
上述执行的Java应用生成Word文档方法,该方法适用于Java应用,Java应用中集成FreeMarker框架,方法包括:获取Word文档生成请求,Word文档生成请求携带有目标FreeMarker模板标识集合和目标位置配置数据;从目标FreeMarker模板标识集合对应的模板中获取占位符,得到待处理的占位符集合;对待处理的占位符集合中的占位符按占位符类型进行划分,得到纯文本占位符集合和非纯文本占位符集合;获取业务数据库,根据业务数据库,分别针对纯文本占位符集合中的每个占位符依次进行业务数据查找和KV数据对组装,得到第一KV数据对集合;获取图片数据库,根据图片数据库,分别针对非纯文本占位符集合中的每个占位符依次进行图片标识查找和KV数据对组装,得到第二KV数据对集合;基于FreeMarker框架,根据图片数据库、目标FreeMarker模板标识集合、目标位置配置数据、第一KV数据对集合和第二KV数据对集合进行Word文档生成,得到目标Word文档,从而实现了基于FreeMarker模板和FreeMarker框架进行Word文档生成,不需要针对具体内容大量进行编码,也不需要针对具体内容调整样式,而且使模板和业务数据及图片解耦合,使本申请能更好的适应需求的变动。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的和实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可以包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双速据率SDRAM(SSRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、装置、物品或者方法不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、装置、物品或者方法所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、装置、物品或者方法中还存在另外的相同要素。
以上所述仅为本申请的优选实施例,并非因此限制本申请的专利范围,凡是利用本申请说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本申请的专利保护范围内。