CN117076410B - 一种pdf文件生成方法、处理方法、装置及存储介质 - Google Patents

一种pdf文件生成方法、处理方法、装置及存储介质 Download PDF

Info

Publication number
CN117076410B
CN117076410B CN202311334138.0A CN202311334138A CN117076410B CN 117076410 B CN117076410 B CN 117076410B CN 202311334138 A CN202311334138 A CN 202311334138A CN 117076410 B CN117076410 B CN 117076410B
Authority
CN
China
Prior art keywords
html
data
target
pdf
file
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202311334138.0A
Other languages
English (en)
Other versions
CN117076410A (zh
Inventor
施玉清
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Jiangsu Renjia Information Technology Co ltd
Original Assignee
Jiangsu Renjia Information Technology Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Jiangsu Renjia Information Technology Co ltd filed Critical Jiangsu Renjia Information Technology Co ltd
Priority to CN202311334138.0A priority Critical patent/CN117076410B/zh
Publication of CN117076410A publication Critical patent/CN117076410A/zh
Application granted granted Critical
Publication of CN117076410B publication Critical patent/CN117076410B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/17Details of further file system functions
    • G06F16/178Techniques for file synchronisation in file systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/25Integrating or interfacing systems involving database management systems
    • G06F16/258Data format conversion from or to a database

Landscapes

  • Engineering & Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明提供了一种PDF文件生成方法、处理方法、装置及存储介质。该PDF文件生成方法包括如下步骤:获取PDF模板;利用Java技术和Freemarker库将PDF模板转换为HTML模板;在所述HTML模板中添加用于指示目标数据插入位置的标签和/或占位符;利用所述Freemarker库将所述目标数据填充至所述HTML模板的对应的所述标签和/或所述占位符处,得到目标HTML文件;利用iText和HtmlConverter库将所述目标HTML文件转换为PDF文件。本发明方案可以保证各个文件转换的样式、布局的一致性。

Description

一种PDF文件生成方法、处理方法、装置及存储介质
技术领域
本申请涉及计算机技术领域,尤其涉及一种PDF文件生成方法、处理方法、装置及存储介质。
背景技术
随着对文档严谨性、美观度等的需求增加,用户通常期望生成的PDF文件能够与预设的PDF模板保持完全一致,为了实现该目标,可以直接将PDF文件中的元素填充至PDF模板。这种方式可以确保最终生成的PDF文件与PDF模板的样式和布局保持完全一致,并且具有较高的转换效率。但是,这种方式也具有灵活性有限、编辑困难等缺点。
并且,在诸如报告、合同和其他文档的生成过程中也通常涉及到HTML文档与PDF文件之间的各种转换。在各种转换过程中也避免不了存在HTML文档和PDF文件之间转换的样式、布局的一致性需求。
发明内容
有鉴于此,本申请实施例致力于提供一种PDF文件生成方法、处理方法、装置及存储介质,用于解决HTML文档与PDF文件之间的各种转换过程中存在的HTML文档和PDF文件之间转换的样式、布局的一致性需求问题,以及进一步解决解决现有技术中将数据直接填充至PDF模板中以生成PDF文件存在的灵活性有限、编辑困难以及难以对PDF文件进行信息溯源的问题。
根据本发明的第一方面,本发明提供了一种PDF文件生成方法,包括如下步骤:
获取PDF模板;
利用Java技术和Freemarker库将PDF模板转换为HTML模板;
在所述HTML模板中添加用于指示目标数据插入位置的标签和/或占位符;
利用所述Freemarker库将所述目标数据填充至所述HTML模板的对应的所述标签和/或所述占位符处,得到目标HTML文件;
利用iText和HtmlConverter库将所述目标HTML文件转换为PDF文件。
可选地,所述利用所述Freemarker库将所述目标数据填充至所述HTML模板的对应的所述标签和/或所述占位符处,得到HTML文件,包括如下步骤:
将所述目标数据全部填充至所述HTML模板中,得到第一HTML文件;
将所述目标数据进行分组或分类,得到多个数据组,每个所述数据组包括一组数据;
将每个所述数据组中的数据分别填充至所述HTML模板中,得到多个拆解HTML文件,每个所述拆解HTML文件中的数据均不相同;
将所述多个拆解HTML文件合并成第二HTML文件;
将所述第二HTML文件和第一HTML文件进行比较,以确定是否需要对所述多个拆解HTML文件进行修改;
在确定无需对所述多个拆解HTML文件进行修改后,保存所述多个拆解HTML文件,并将所述多个拆解HTML文件作为多个目标拆解HTML文件;
在确定需要对所述多个拆解HTML文件进行修改后,修改所述多个拆解HTML文件中的至少一个,并保存修改后的多个拆解HTML文件,并将修改后的所述多个拆解HTML文件作为多个目标拆解HTML文件。
可选地,所述将所述第二HTML文件和第一HTML文件进行比较,以确定是否需要对所述多个HTML文件进行修改,包括如下步骤:
对所述第一HTML文件进行解析,得到第一DOM树结构,并对所述第二HTML文件进行解析,得到第二DOM树结构;
利用Resemble.js库加载所述第一HTML文件和所述第二HTML文件,并比较所述第一HTML文件和所述第二HTML文件的屏幕截图;
在所述第一DOM树结构和所述第二DOM树结构存在差异,和/或所述第一HTML文件和所述第二HTML文件的屏幕截图的相似度差异值大于预设差异值时,确定需要对所述多个拆解HTML文件进行修改,否则无需修改。
可选地,所述利用iText和HtmlConverter库将所述HTML文件转换为PDF文件,包括如下步骤:
创建Freemarker模板,所述Freemarker模板包含有用于表示所述多个目标拆解HTML文件的插入点的多个Freemarker标记;
将所述多个目标拆解HTML文件插入所述Freemarker模板中;
利用HtmlConverter将插入有所述多个目标拆解HTML文件的所述Freemarker模板转换为所述PDF文件。
可选地,所述目标数据包括目标区块链数据、目标溯源信息和目标元素数据,所述目标元素数据包括待生成PDF文件的文本内容、图像内容和图表内容;
所述利用所述Freemarker库将所述目标数据填充至所述HTML模板的对应的所述标签和/或所述占位符处,得到HTML文件,包括如下步骤:
根据所述目标区块链数据利用区块链技术生成唯一标识的目标区块链哈希值;
利用所述Freemarker库将所述目标区块链哈希值、所述目标溯源信息和所述目标元素数据分别填充至所述HTML模板的对应的所述标签和/或所述占位符处,得到HTML文件。
可选地,所述PDF文件生成方法还包括如下步骤:
利用区块链技术生成所述目标元素数据对应的区块链哈希值;
将所述目标元素数据对应的区块链哈希值和目标溯源信息嵌入所述PDF文件的元数据中。
特别地,本发明还提供了一种PDF文件处理方法,包括如下步骤:
加载由前述的PDF文件生成方法生成的PDF文件;
响应于对所述PDF文件进行点击的用户触发事件,以捕捉所述用户触发事件中用户的点击位置;
将所述点击位置与PDF文件的目标点击区域进行匹配,从而获取所述目标点击区域的溯源信息;
对所述溯源信息进行篡改验证,以验证所述溯源信息是否被篡改;
将验证通过后的未被篡改的溯源信息显示在用户界面中。
可选地,所述对所述溯源信息进行篡改验证,以验证所述溯源信息是否被篡改,包括如下步骤:
获取所述PDF文件的所述目标元素的原始数据以及所述PDF文件的元数据中与所述目标元素对应的第二哈希值;
对所述原始数据进行规范化处理,得到合规数据;
利用哈希算法对所述合规数据进行哈希计算,得到第一哈希值;
将所述第一哈希值与所述第二哈希值进行对比;
在所述第一哈希值和所述第二哈希值不匹配时确定所述溯源信息被篡改,否则确定所述溯源信息未被篡改。
根据本发明的第三方面,本发明还提供了一种装置,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;
所述存储器用于存放至少一个可执行指令,所述可执行指令使所述处理器执行如前述的PDF文件生成方法对应的操作以及执行如前述的PDF文件处理方法对应的操作。
根据本发明的第四方面,本发明还提供了一种存储介质,所述存储介质上存储有PDF文件生成程序和PDF处理程序;
所述PDF文件生成程序被处理器执行时实现如前述的PDF文件生成方法的步骤;
所述PDF文件处理程序被处理器执行时实现如前述的PDF文件处理方法的步骤。
根据本发明的第一方面,通过将PDF模板转换为HTML模板,再将HTML模板转换为PDF文件,从而解决了现有技术中直接将数据填充至PDF模板得到PDF文件的方案存在的灵活性有限、编辑困难的问题。并且,通过利用Java技术和Freemarker库将PDF模板转换为HTML模板,并利用iText和HtmlConverter库将HTML文件转换为PDF文件,由此可以实现PDF模板、HTML和PDF文件之间各种转换的布局、样式的完全一致性。
进一步地,通过将区块链技术融合至前述PDF文件生成过程中实现了PDF文件的信息溯源目的。
根据本发明的第二方面,通过捕捉用户触发事件中用户的点击位置,获取点击位置对应的目标点击区域内的溯源信息,将验证通过后的未被篡改的溯源信息显示在用户界面中,由此可以易于用户操作和理解,使用户可以轻松地获取有关PDF文件中数据的溯源信息。该方法充分利用了区块链的不可篡改性和分散性,提供了更高级别的数据安全性。并且,通过与区块链数据进行匹配并进行篡改验证,该方法可以有效验证PDF文件中的目标元素的数据是否经过篡改,这有助于确保数据的完整性,防止未经授权的修改。
附图说明
图1示出了根据本发明一个实施例的PDF文件生成方法的示意性流程图;
图2示出了根据本发明一个实施例的利用Java技术和Freemarker库将PDF模板转换为HTML模板的方法的示意性流程图;
图3示出了深度学习模型的获取方法的示意性流程图;
图4示出了图2所示步骤S230中目标CSS样式的确定方法的示意性流程图;
图5示出了图2所示步骤S230中在修正PDF数据包含有PDF图表数据时对初始HTML骨架的处理方法的示意性流程图;
图6示出了图1所示步骤S400中获得目标HTML文件的方法的示意性流程图;
图7示出了图6所示步骤S450中确定是否需要对多个HTML文件进行修改的方法的示意性流程图;
图8示出了图1所示步骤S500的转换PDF文件的方法的示意性流程图;
图9示出了根据本发明另一个实施例的PDF文件生成方法的示意性流程图;
图10示出了根据本发明一个实施例的PDF文件处理方法的示意性流程图;
图11示出了图10所示步骤S140的验证溯源信息是否被篡改的方法的示意性流程图;
图12示出了根据本发明一个实施例的装置的示意性结构图;
图中:10-装置,110-处理器,120-存储器。
具体实施方式
为使本申请的上述目的、特征和优点能够更为明显易懂,下面结合附图,对本申请的具体实施方式做详细的说明。可以理解的是,此处所描述的具体实施例仅用于解释本申请,而非对本申请的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本申请相关的部分而非全部结构。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。
本申请中的术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。
在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
图1示出了本发明一个实施例的PDF文件生成方法的示意性流程图。如图1所示,该PDF文件生成方法包括:
步骤S100,获取PDF模板;
步骤S200,利用Java技术和Freemarker库将PDF模板转换为HTML模板;
步骤S300,在HTML模板中添加用于指示目标数据插入位置的标签和/或占位符;
步骤S400,利用Freemarker库将目标数据填充至HTML模板的对应的标签和/或占位符处,得到目标HTML文件;
步骤S500,利用iText和HtmlConverter库将目标HTML文件转换为PDF文件。
根据本发明实施例的方案,通过将PDF模板转换为HTML模板,再将HTML模板转换为PDF文件,从而解决了现有技术中直接将数据填充至PDF模板得到PDF文件的方案存在的灵活性有限、编辑困难的问题。并且,通过利用Java技术和Freemarker库将PDF模板转换为HTML模板,并利用iText和HtmlConverter库将HTML文件转换为PDF文件,由此可以实现PDF模板、HTML和PDF文件之间各种转换的布局、样式的完全一致性。
在步骤S100中,可以从模板数据库中获取PDF模板,该模板数据库中存储有多个PDF模板,用户可以根据需求选择PDF模板。在一个优选的实施例中,每个PDF模板均具有用户标签,该用户标签反映有用户信息、模板的内容、主题、适用领域等。从模板数据库中获取PDF模板的过程可以包括如下步骤:响应于用户的访问请求,以获取用户信息;获取所述用户的搜索条件;根据所述用户信息和所述搜索条件向所述用户推荐PDF模板,其中推荐的PDF模板除包括带有用户标签的PDF模板外,可能还包括其他PDF模板,可以理解的是,推荐PDF模板时推荐顺序为带有用户标签的PDF模板的序号在前;响应于所述用户对推荐的PDF模板的选择操作,以确定出用户选择出的PDF模板。由此,可以较为精准地为用户推荐符合用户需求的PDF模板,节约用户选择PDF模板的时间。
图2示出了根据本发明一个实施例的利用Java技术和Freemarker库将PDF模板转换为HTML模板的方法的示意性流程图。如图2所示,该步骤S200包括:
步骤S210,利用iText库对PDF模板进行解析,以得到PDF模板的初始PDF数据;
步骤S220,对初始PDF数据进行修正,以得到修正PDF数据;
步骤S230,根据修正PDF数据创建HTML骨架,使用目标CSS样式定义HTML骨架的样式,利用Freemarker模板引擎嵌入动态数据,以得到HTML模板。该动态数据包括前述目标数据。
该步骤S210中,PDF模板的初始PDF数据是后续PDF文件是否与PDF模板一致的关键性数据。因此需要保证该初始PDF数据的精确度,PDF数据的精确度影响因素有多种,利用一般的PDF解析工具或库可以解决大部分影响因素带来的问题,但是对于复杂文档结构、复杂图像以及复杂图表等的解析,一般的PDF解析工具或库很难或无法实现精确解析。可以按照如下所示的方法:响应于解析PDF模板的请求,利用iText库提取该PDF模板数据,并将该数据输入至训练好的深度学习模型中,从而得到PDF模板的初始PDF数据。该深度学习模型的获取方法包括如图3所示的步骤S211至步骤S213。
该步骤S211为利用iText库提取PDF模板样本集中PDF模板样本的数据。该数据包括PDF模板的结构、布局、样式、文本、图像以及图表等,该PDF模板样本的数量越多越好,并且要涵盖各种复杂文档结构、复杂图像以及复杂图表等。
该步骤S212为对PDF模板样本集中的PDF模板样本进行提特征提取。
该步骤S213为创建深度学习模型,并利用PDF模板样本对深度学习模型进行训练。该深度学习模型例如为循环神经网络(RNN)、卷积神经网络(CNN)或其组合。训练好的深度学习模型会集成到PDF解析流中。
该步骤S220中,对初始PDF数据进行修正时可以仅修正错误数据。在一个实施例中,除修正错误数据外还结合用户偏好进行修正。
仅修正错误数据时,首先对初始PDF数据进行检测,其次将检测出的错误数据如错位的文本、缺失的内容等进行标记,最后利用iText库对标记为错误的PDF数据进行修正,从而得到修正PDF数据。
再结合用户偏好对数据进行修正的实施例中,除前述对错误数据进行修正的步骤外,还包括根据用户的偏好选项调整PDF数据,再将根据用户偏好调整后的PDF数据与前述仅修正错误数据的实施例中得到的修正PDF数据融合,得到该实施例的修正PDF数据。该偏好选项包括用户的颜色偏好、字体偏好。需要说明的是,该偏好选项并不会涉及对PDF模板的结构、布局、格式等偏好设置,仅涉及颜色、字体的偏好设置。由此可以避免初始PDF数据错误带来的后续生成PDF文件时的错误,并且在一个实施例中也可以结合用户偏好来修正初始PDF数据,使得后续生成的PDF文件在保持与PDF模板其他信息完全一致的情况下更加符合用户偏好。
图4示出了图2所示步骤S230中目标CSS样式的确定方法的示意性流程图。如图4所示,该确定方法包括:
步骤S231,根据修正PDF数据的PDF结构确定用于选择HTML元素的选择器;
步骤S232,将PDF结构的样式映射到CSS属性中;
步骤S233,根据选择器、CSS属性以及HTML输出需求确定出目标CSS样式。
该步骤S231中,遍历PDF结构,为每个HTML元素确定选择器。例如,对于一个标题文本,选择器可以是“h1”,而对于一个特定表格中的单元格,选择器可以是“table#myTabletd:nth-child(2)”。
该步骤S232中,将PDF结构中的元素样式属性,如字体、颜色、大小、间距等映射到CSS属性中。例如,将PDF中的字体映射到CSS的“font-family”属性,颜色映射到“color”属性,文本大小映射到“font-size”属性。
该步骤S233中,HTML输出需求与用户预期有关。例如如果用户希望一个特定的标题文本在HTML中具有特定的样式,可以编写如下的CSS规则:
h1 {
font-family: Arial, sans-serif;
font-size: 24px;
color: #333;
}
HTML输出需求是指用户期望的HTML模板需要满足的样式、布局等要求,此处,HTML输出需求为与PDF模板保持一致。需要解释的是,即便可能需要对初始PDF数据进行修正,但这仅是修正明显的错误数据和/或增加用户偏好设置,并不涉及对PDF模板的结构、布局、样式等的修改,因此,此处需理解为,即便对初始PDF数据进行修正,但不影响需要与PDF模板保持一致。
在该实施例中,使用目标CSS样式定义HTML骨架的样式相对于其他定义HTML固定样式的方式具有诸多优势。例如使用目标CSS样式可以更精确地匹配PDF模板的样式,确保生成的HTML文件与PDF模板在视觉上一致,这可以保证高的样式一致性。又如目标CSS样式通常会根据PDF数据的内容进行动态生成,因此可以根据不同的数据填充生成不同样式的HTML文件,这意味着生成的HTML可以适应不同的数据输入,而不需要事先定义固定的样式。又如使用目标CSS样式的方法更加灵活,允许根据具体的数据和需求来动态生成样式,这可以在生成不同类型的文档时提供更多的自定义选项。又如由于目标CSS样式是基于PDF模板和PDF数据生成的,所以更容易维护,如果需要更新样式,只需更新模板和样式生成的逻辑,而不必修改大量HTML或CSS代码。非常重要的是,使用目标CSS样式可以更精确地匹配PDF模板的布局和样式,因此在保持布局和样式准确性方面具有优势。
图5示出了图2所示步骤S230中在修正PDF数据包含有PDF图表数据时对HTML骨架的处理方法的示意性流程图。如图5所示,该处理方法包括:
步骤S231’,将JavaScript图表库集成到HTML骨架中;
步骤S232’,将PDF图表数据导入JavaScript图表库中;
步骤S233’,从JavaScript图表库调用与PDF图表数据最接近的第一目标图表;
步骤S234’,根据PDF图表数据调整第一目标图表的图表元素,得到与PDF图表数据完全一致的第二目标图表。
该步骤234’ 包括如下步骤:将图表元素中的初始数据格式依据PDF图表数据中的数据格式进行数据重组,得到与PDF图表数据的数据格式一致的目标数据格式;和/或将图表元素中的数据进行数值、单位或格式的转换,得到与PDF图表数据一致的第一目标数据;和/或对图表元素中数据进行数学计算,得到与PDF图表数据一致的第二目标数据;和/或对图表元素中数据进行数据填充,得到与PDF图表数据一致的第三目标数据;和/或对图表元素中数据进行标准化处理,以消除与PDF图表数据之间的尺度差异。
该处理方法中将JavaScript图表库集成到HTML骨架中并结合PDF图表数据,由此可以实现如下效果,即动态生成、适应性强、数据一致性高、准确性高的图表生成,减少样式调整工作。具体来说,通过将JavaScript图表库集成到HTML骨架中,可以在HTML生成阶段动态生成图表,这意味着图表可以根据PDF图表数据以及其他动态数据生成,从而实现高度的灵活性。使用JavaScript图表库可以根据不同的PDF图表数据生成不同类型的图表,而无需为每种情况都定义固定的图表样式,这提供了对多种图表类型的支持。通过将PDF图表数据导入JavaScript图表库,确保了图表数据的一致性,这可以减少数据错误和不匹配的可能性。通过根据PDF图表数据调整图表元素,可以实现与PDF图表数据的完全一致性,这确保了图表在生成PDF文件时具有高度的精确性和准确性。由于图表是动态生成的,可以在生成阶段根据目标CSS样式对其进行调整,而无需事后样式修正,这可以减少样式调试的工作量。
该步骤S300中,该目标数据包括目标区块链数据、目标溯源信息和目标元素数据。该目标区块链数据为要存储、验证或记录在区块链上的数据。该目标溯源信息为与数据的来源、历史或处理过程有关的信息,这些信息可以包括数据的创立时间、创建者、传输历史、修改历史等。该目标区块链数据和目标溯源信息与目标元素数据关联。该目标元素数据包括待生成PDF文件的文本内容、图像内容和图表内容等。在一个实施例中,该PDF模板被划分为多个区域,该HTML模板与PDF模板保持一致,同样被划分为多个区域,每个区域内会添加用于指示目标数据插入位置的标签和/或占位符。在后续转换为PDF文件的过程中,由于PDF文件是由HTML模板转换而成,PDF文件自然也是被划分区域的,不同区域内填充有不同目标元素数据。由于目标元素数据是与目标区块链数据和目标溯源信息是相关联的,在对目标元素数据进行溯源时,点击该目标元素数据对应的区域就可以显示出与其关联的隐藏的溯源信息。后续有详细说明。该目标元素数据例如为药企销售人员输入的数据,该数据可以包括销售客户、销售药物、药物销售数量等。该目标元素数据例如也可以为药企销售人员当月销售药物种类以及对应药物销售数量一一对应的图表内容。该目标元素数据被存储到单独的数据库中,在药企销售人员输入数据时,会将对应数据自动存储到数据库中,当生成的PDF需要包含该药企销售人员输入的数据时,从该数据库中调用即可。可以理解的是,数据库中会存储有对应数据的输入时间、输入人员、修改时间等溯源信息。
该步骤S300具体可以为在HTML模板中添加用于指示区块链数据、用于指示溯源信息和目标元素数据插入位置的标签和/或占位符。以下展示创建用于指示区块链数据、用于指示溯源信息和目标元素数据插入位置的占位符的示例HTML模板片段:
<html>
<head>
<title>药企归档报告</title>
<style>
/* 样式定义 */
body {
font-family: Arial, sans-serif;
}
.report-section {
margin-bottom: 20px;
}
</style>
</head>
<body>
<header>
<h1>药企归档报告</h1>
</header>
<!-- 产品信息部分 -->
<section class="report-section">
<h2>产品信息</h2>
<p>产品名称:${product.name}</p>
<p>批次号:${product.batchNumber}</p>
<p>制造日期:${product.manufactureDate}</p>
</section>
<!-- 区块链数据部分 -->
<section class="report-section">
<h2>区块链数据</h2>
<div>${blockchainData}</div>
</section>
<!-- 溯源信息部分 -->
<section class="report-section">
<h2>溯源信息</h2>
<div>${traceabilityInfo}</div>
</section>
<!-- 报告内容部分 -->
<section class="report-section">
<h2>报告内容</h2>
<p>报告摘要:${report.summary}</p>
<p>详细分析:${report.analysis}</p>
</section>
<footer>
<p>© 2023 Your Pharmaceutical Company</p>
</footer>
</body>
</html>
又如,可以创建自定义的标签,如创建用于表示目标区块链数据插入位置的HTML标签,以下展示创建该HTML标签的示例HTML模板片段:
<div>
<h1>Document Title</h1>
<p>This is some content.</p>
<blockchain-data></blockchain-data> <!-- 自定义HTML标签表示区块链数据位置 -->
<p>More content here.</p>
</div>
该自定义的HTML标签能够容易被识别。
又如,可以创建自定义的标签或占位符来表示要替换的目标元素数据的位置。例如使用像{{text_data}}、<img src="{{image_url}}" />、<div id="chart">{{chart_data}}</div>等标签或占位符。以下为示例HTML模板片段:
html
Copy code
<h1>Document Title</h1>
<p>{{text_data}}</p> <!-- 使用占位符表示文本内容位置 -->
<img src="{{image_url}}" /> <!-- 使用占位符表示图像位置 -->
<div id="chart">{{chart_data}}</div> <!-- 使用占位符表示图表位置 -->
为了将目标区块链数据、目标溯源信息和目标元素数据关联起来,需要在java的后端代码中创建数据模型,将目标区块链数据、目标溯源信息和目标元素数据以键值对的形式添加到该数据模型中,该数据模型后续被传递至HTML模板。该后端代码的任务是将数据模型中的目标区块链数据、目标溯源信息和目标元素数据填充到HTML模板中,然后将生成的HTML文件转换为PDF文件。由此可以实现对PDF文件的溯源。以下为示例Java代码:
Configuration cfg = new Configuration(Configuration.VERSION_2_3_ 30);
cfg.setClassForTemplateLoading(getClass(), "/templates"); // 设置模板加载路径
Template template = cfg.getTemplate("template.html"); // 加载HTML模板
Map<String, Object> dataModel = new HashMap<>();
dataModel.put("text_data", "This is the text data.");
dataModel.put("image_data", "/images/sample.jpg"); // 图像URL
dataModel.put("chart_data", "<svg>...</svg>"); // 图表数据
dataModel.put("blockchain_data", "Blockchain data goes here."); // 区块链数据
StringWriter writer = new StringWriter();
template.process(dataModel, writer);
String htmlOutput = writer.toString();
该步骤S400包括如下步骤:根据目标区块链数据利用区块链技术生成唯一标识的目标区块链哈希值;利用Freemarker库将目标区块链哈希值、目标溯源数据和目标元素数据分别填充至HTML模板的对应的标签和/或占位符处,得到目标HTML文件。需要注意的是,该插入的目标溯源信息是通过CSS属性的方式隐藏,以确保其在未被触发时是不可见的。
在一个实施例中,将目标区域块链数据输入哈希算法中来计算目标区块链哈希值,该哈希算法例如可以为SHA-256算法。以下示例利用java编程语言中的MessageDigest类来计算目标区块链哈希值:
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.nio.charset.StandardCharsets;
public static String calculateSHA256Hash(String data) throwsNoSuchAlgorithmException {
MessageDigest digest = MessageDigest.getInstance("SHA-256");
byte[] hash = digest.digest(data.getBytes(StandardCharsets.UTF_8));
// Convert the byte array to a hexadecimal string representation
StringBuilder hexString = new StringBuilder(2 * hash.length);
for (byte b : hash) {
String hex = Integer.toHexString(0xff & b);
if (hex.length() == 1) {
hexString.append('0');
}
hexString.append(hex);
}
return hexString.toString();
}
该目标区块链哈希值根据输入数据的不同而产生唯一的结果,因此它可以用作目标区块链数据的唯一标识。
图6示出了图1所示步骤S400中获得目标HTML文件的方法的示意性流程图。如图6所示,该目标HTML文件的获得方法包括:
步骤S410,将目标数据的目标区块链哈希值、目标溯源信息和目标元素数据全部填充至HTML模板中,得到第一HTML文件,可以理解的是,该填充的目标溯源信息是通过CSS属性的方式隐藏,以确保其在未被触发时是不可见的;
步骤S420,将目标数据进行分组或分类,得到多个数据组,每个数据组包括一组数据;其中,对目标数据进行分组或分类时,对目标元素数据进行分组或分类,被划分出的目标元素数据关联有目标区块链哈希值和目标溯源信息的,则将该目标区块链哈希值、目标溯源信息归类到该目标元素数据对应的一组或一类中;
步骤S430,将每个数据组中的数据分别填充至HTML模板中,得到多个拆解HTML文件,每个拆解HTML文件中的数据均不相同;
步骤S440,将多个拆解HTML文件合并成第二HTML文件;
步骤S450,将第二HTML文件和第一HTML文件进行比较,以确定是否需要对多个拆解HTML文件进行修改;
步骤S460,在确定无需对多个拆解HTML文件进行修改后,保存多个拆解HTML文件,并将多个拆解HTML文件作为多个目标拆解HTML文件;
步骤S470,在确定需要对多个拆解HTML文件进行修改后,修改多个拆解HTML文件中的至少一个,并保存修改后的多个拆解HTML文件,并将修改后的多个拆解HTML文件作为多个目标拆解HTML文件。该目标拆解HTML文件合并在一起可以形成目标HTML文件。但是,在该实施例中,无需将多个目标拆解HTML文件合并,后续将各个目标拆解HTML文件转换为拆解PDF文件,最后将各个拆解PDF文件合并成PDF文件即可。后文详细介绍。
该HTML文件的获得方法中,由于将目标区块链哈希值、目标溯源信息和目标元素数据全部填充至HTML模板可以得到第一HTML文件,将目标元素数据分组或分类后将每个数据组的数据分别填充至HTML模板中,可以得到拆解HTML文件,将分组后的数据对应的多个拆解HTML文件合并成第二HTML文件,对第一HTML文件和第二HTML文件比较,以确定是否对拆解HTML文件进行修改,以便于后续根据目标拆解HTML文件转换为拆解PDF文件,再合并拆解PDF文件,以生成PDF文件。这种流程分割和模块化的优势在于提高了可维护性、灵活性和处理效率,特别适用于本发明实施例中需要处理大规模数据和复杂PDF模板的情况。具体为,可以根据需要添加更多的数据组和目标元素数据,而无需修改整个流程,这使得系统更加灵活,可以适应不同的数据和模板。并且,拆解PDF生成过程为多个步骤,每个步骤都有一个特定的任务,使得代码更易于管理和维护,如果需要对某个步骤进行修改或优化,可以专注于该步骤而不会影响整个流程。并且,还可以并行处理多个拆解HTML文件,从而提高生成速度,这对于本发明实施例的大规模数据处理非常有用。此外,如果某个拆解HTML文件在比较过程中显示错误,只需要重新生成特定的拆解HTML文件,而不必重新生成整个PDF文件。同时可以避免采用将整个HTML文件转成整个PDF文件的方法所遇到的生成耗时问题。同时,该目标溯源信息是被隐藏的,只有在需要显示时才被显示出,后文有详细描述。
该步骤S420中,例如可以根据目标元素的不同特征或属性,将目标数据划分为不同的数据组,例如可以按照前述划分出的区域进行数据组的划分,属于同一区域的数据被划分至同一组。
该步骤S430中,可以使用Java代码来实现,遍历每个数据组,将其中的数据填充到HTML模板的相应位置。
该步骤S440中,可以是将多个拆解HTML文件的内容逐一读取,并将它们按照一定的顺序拼接起来,生成第二HTML文件。
该步骤S450中,可以逐行或逐个标签地比较第一HTML文件和第二HTML文件的内容。在比较结果为一致时确定无需对多个HTML文件进行修改,在比较结果为不一致时确定需要对多个HTML文件进行修改。
图7示出了图6所示步骤S450中确定是否需要对多个HTML文件进行修改的方法的示意性流程图。如图7所示,该方法包括:
步骤S451,对第一HTML文件进行解析,得到第一DOM树结构,并对第二HTML文件进行解析,得到第二DOM树结构;
步骤S452,利用Resemble.js库加载第一HTML文件和第二HTML文件,并比较第一HTML文件和第二HTML文件的屏幕截图;
步骤S453,在第一DOM树结构和第二DOM树结构存在差异,和/或第一HTML文件和第二HTML文件的屏幕截图的相似度差异值大于预设差异值时,确定需要对多个HTML文件进行修改,否则无需修改。
该步骤S470中,如果确定需要修改拆解HTML文件,则可以根据不一致之处对拆解HTML文件进行更新,这包括替换、添加或删除特定的HTML标签和内容,以使其与第一HTML文件一致。
图8示出了图1所示步骤S500的转换PDF文件的方法的示意性流程图。如图8所示,该步骤S500包括:
步骤S510,创建Freemarker模板,Freemarker模板包含有用于表示多个目标拆解HTML文件的插入点的多个Freemarker标记;
步骤S520,将多个目标拆解HTML文件插入Freemarker模板中;
步骤S530,利用HtmlConverter将插入有多个目标拆解HTML文件的Freemarker模板转换为PDF文件。
该步骤S520和步骤S530中,使用Java代码加载Freemarker模板并将多个目标拆解HTML文件插入模板中,然后使用HtmlConverter将Freemarker模板转换为PDF文件。以下为示例Java代码:
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map;
import com.itextpdf.html2pdf.HtmlConverter;
public class MergeHTMLToPDF {
public static void main(String[] args) throws IOException,TemplateException {
// 配置Freemarker模板引擎
Configuration cfg = new Configuration(Configuration.
VERSION_2_3_31);
cfg.setClassForTemplateLoading(MergeHTMLToPDF.class, "/");
Template template = cfg.getTemplate("template.ftl");
// 准备数据模型
Map<String, String> dataModel = new HashMap<>();
dataModel.put("htmlFile1", "file1.html");
dataModel.put("htmlFile2", "file2.html");
// 添加更多HTML文件到数据模型
// 渲染模板并生成HTML内容
Writer htmlWriter = new OutputStreamWriter(new FileOutputStream("output.html"), "UTF-8");
template.process(dataModel, htmlWriter);
htmlWriter.close();
// 使用HtmlConverter将HTML转换为PDF
HtmlConverter.convertToPdf(new File("output.html"), newFileOutputStream("merged.pdf"));
}
}
运行Java代码,以加载HTML文件、将HTML文件插入Freemarker模板,然后将整个模板转换为一个PDF文件(merged.pdf)。
承接前述步骤S410至步骤S470,该步骤S510至步骤S530同样具有更高的灵活性、可维护性和可测试性,其中,可测试性即为分开管理每个拆解HTML文件和Freemarker模板使得单独测试和验证它们的正确性变得更容易,这有助于减少错误和问题的发生。
该步骤S530中,在转换为PDF文件的过程中,利用iText库添加页码、创建文字水印或图像水印;遍历PDF文件的内容,记录章节标题、页码和链接信息,以构建目录条目,并将目录条目插入到目录页中。
图9示出了根据本发明另一个实施例的PDF文件生成方法的示意性流程图。该实施例中,该PDF文件生成方法除包含前述步骤S100至步骤S500之外,还包括:
步骤S600,利用区块链技术生成目标元素数据对应的区块链哈希值和溯源信息;
步骤S700,将目标元素数据对应的区块链哈希值和溯源信息嵌入PDF文件的元数据中。该溯源信息是作为隐藏的元数据项。
通过在PDF文件的元数据中嵌入区块链哈希值,可以轻松验证PDF文件的完整性。任何尝试篡改文件内容的行为都会导致哈希值不匹配,从而提供了强大的数据完整性验证机制。嵌入区块链哈希值可以追踪PDF文件中的数据来源,由此处对于待确定数据的来源以及确保数据的可信度和真实性的情况非常有用。通过嵌入的溯源信息可以追溯文档的创建和修改历史,提供了更多的透明度和可追溯性。在PDF文件中并不能直接显示出该溯源信息,只有在点击事件触发时才在PDF文件中显示出溯源信息。
在一个实施例中,同时包含步骤S410至步骤S470,以及步骤S600至步骤S700。因此,该实施例中,HTML模板中本身添加用于指示目标区块链数据和目标溯源信息插入位置的标签和/或占位符,且目标拆解HTML文件中也存在,那么转换为PDF文件时就能够溯源,便于溯源信息的可视化以及易于阅读性。同时,在PDF文件的元数据中嵌入区块链哈希值和溯源信息,如此可以提供数据的验证、完整性以及可追溯性。也就是说HTML模板中具有用于指示目标溯源信息插入位置的标签和/或占位符,且PDF文件的元数据中也嵌入有溯源信息,且HTML模板中的目标溯源信息以及PDF文件元数据中的溯源信息均为隐藏状态,只有在被触发时才显示。HTML模板中的目标溯源信息以及PDF文件元数据中的溯源信息是相同的,以确保数据的一致性和溯源性。如此,可以确保数据的完整性和可信度。
以下详细介绍步骤S410中目标溯源信息正常处于隐藏状态,只有在被触发时才显示出的方法。该方法涉及步骤S400中对HTML模板的处理,以及涉及步骤S500中生成PDF文件时的处理,涉及步骤S400中对HTML模板的处理包括如下步骤1至步骤2。
步骤1:在HTML模板中,将用于指示目标溯源信息的插入位置的占位符所在区域标记为可点击区域。具体为使用 <a> 元素来创建链接或在元素上添加JavaScript事件处理程序。示例代码如下:
<a href="https://example.com">点击此处</a>
<!-- 或者 -->
<div onclick="showSourceInfo()">点击此区域显示溯源信息</div>
上述代码中,第一个示例创建了一个简单的超链接,而第二个示例在 <div> 元素上添加了一个点击事件。
步骤2:使用Freemarker,将包括链接或事件处理程序的相关信息的数据填充到HTML模板中。确保生成的目标HTML文件包含了完整的链接或事件代码。
涉及步骤S500中生成PDF文件时的处理包括步骤1’至步骤2’。
步骤1’:确定待生成PDF文件的需要添加链接或事件处理程序的待点击区域;
步骤2’:将目标HTML文件中的链接或事件处理程序添加到该待点击区域。该待点击区域例如可以为前面被划分的区域,对应于PDF文件的目标元素所在区域。当对应于PDF文件的目标元素时,可以对目标元素进行溯源。例如目标元素为图片、图表等时,可以对图片、图表等进行溯源。可以理解的是,用户点击时通常点击的位置是位于一个区域内的,所以,需要将用户点击位置与点击区域进行匹配,即确定该点击位置归属于哪个点击区域内,从而获取点击区域内的溯源信息。只有在用户点击PDF文件的待点击区域时才可以显示出溯源信息。该溯源信息的显示例如可以为显示溯源信息的弹出窗口。
如此设置,可以请求生成PDF文件后生成未显示有溯源信息的PDF文件,在需要获取PDF文件的溯源信息后,可以通过点击PDF文件的待点击区域,从而获知其溯源信息。
在生成PDF文件后,会涉及到利用不同的PDF阅读器以及操作系统来运行该PDF文件的情况,在这种情况下,需要保证在不同的PDF阅读器和操作系统上都能正常运行在用户点击PDF文件的待点击区域时显示出溯源信息的操作。因此,在HTML模板中使用的JavaScript代码是标准的,是遵循ECMAScript规范的,避免使用特定于某个PDF阅读器的JavaScript扩展。但是即便在HTML模板中使用的JavaScript代码是标准的,也会出现后续使用某个无法执行JavaScript的PDF阅读器时的情况,此时,需要使用本申请前述步骤1’至步骤S2’的方案。由于步骤1’至步骤S2’的方案是在PDF文件中添加的链接或事件处理程序,因此,可以使得用户通过点击链接跳转到包含溯源信息的特定页面。这适用于溯源信息是静态生成的。对于溯源信息是动态生成的例如根据用户输入或外部数据源动态生成的内容的情况,由于需要面对动态内容、多平台兼容的挑战,确保在不同PDF阅读器和和操作系统上正常工作会变得更加困难。在这个场景下,发明人提出了一种解决方案,具体如下。
该解决方案可以替代掉上述步骤1至步骤2,以及步骤1’至步骤S2’的方案:
步骤1)在HTML模板中创建包含所有可能溯源信息的多个静态HTML页面。该静态HTML页面是一个独立的、完整的HTML文件,不依赖于JavaScript加载或渲染动态内容。
步骤2)在PDF文件中的不同区域对应的预设位置添加内部链接,将该内部链接指向多个静态TML页面中的目标静态HTML页面,每个静态TML页面中包含有不同的溯源信息。该预设位置标记为可点击区域位置。
可以理解的是,在用户点击PDF文件的内部链接时,PDF阅读器就会跳转到包含有相关溯源信息的目标静态HTML页面。由于上述方案中,HTML文件不依赖于JavaScript加载或渲染动态内容,而是依赖PDF文件的链接,因此,即便PDF阅读器无法执行JavaScript,也对动态生成的溯源信息的读取不产生影响。这种方法将动态内容的生成和呈现移动到HTML页面上,同时保持PDF文档的兼容性,以及在不同操作系统上的兼容性。
以上技术方案可以实现大部分动态生成的溯源信息的获取,但是对于频繁动态生成的溯源信息仍然是无法有效实现对溯源信息的获取。为了解决该问题,本申请的发明人提供了一种新的方法,该方法包括:
步骤一、在得到目标HTML文件之前创建数据库表来存储目标溯源信息、目标区块链数据和对应的目标元素数据;
步骤二、使用后端服务器框架创建后端应用程序,并在后端应用程序中创建API端点,该API端点用于接受用户的请求,并根据请求生成或检索目标溯源信息,其中API端点时需要进行身份验证和授权的,以确保只有授权用户可以访问数据;
步骤三、根据用户的点击操作调用目标API端点来触发对应的数据库查询,以生成或检索目标溯源信息;
步骤四、根据查询结果和用户操作动态生成HTML内容,将该HTML内容填充至HTML模板内。
上述方案可以有效呈现频繁动态变化的溯源信息。
图10示出了根据本发明一个实施例的PDF文件处理方法的示意性流程图。如图10所示,该PDF文件处理方法包括如下步骤:
步骤S111,加载由前述的PDF文件生成方法生成的PDF文件;
步骤S112,响应于对PDF文件进行点击的用户触发事件,以捕捉用户触发事件中用户的点击位置;
步骤S113,将点击位置与PDF文件的目标点击区域进行匹配,从而获取目标点击区域的溯源信息;
步骤S114,对溯源信息进行篡改验证,以验证溯源信息是否被篡改;
步骤S115,将验证通过后的未被篡改的溯源信息显示在用户界面中。
根据本发明的第二方面,通过捕捉用户触发事件中用户的点击位置,获取点击位置处目标元素的溯源信息,将验证通过后的未被篡改的溯源信息显示在用户界面中,由此可以易于用户操作和理解,使用户可以轻松地获取有关PDF文件中数据的溯源信息。该方法充分利用了区块链的不可篡改性和分散性,提供了更高级别的数据安全性。并且,通过与区块链数据进行匹配并进行篡改验证,该方法可以有效验证PDF文件中的目标元素的数据是否经过篡改,这有助于确保数据的完整性,防止未经授权的修改。
图11示出了图10所示步骤S140的验证溯源信息是否被篡改的方法的示意性流程图。如图11所示,该步骤S114包括如下步骤:
步骤S1141,获取PDF文件的目标元素的原始数据以及PDF文件的元数据中与目标元素对应的第二哈希值;
步骤S1142,对原始数据进行规范化处理,得到合规数据;
步骤S1143,利用哈希算法对合规数据进行哈希计算,得到第一哈希值;
步骤S1144,将第一哈希值与第二哈希值进行对比;
步骤S1145,在第一哈希值和第二哈希值不匹配时确定溯源信息被篡改,否则确定溯源信息未被篡改。
通过比较原始数据的第一哈希值和PDF文件元数据中的第二哈希值,可以检测目标元素的原始数据是否在PDF文件创建后被篡改,这有助于确保数据的完整性。并且,该方法不涉及复杂的操作,只需要比较两个哈希值,验证过程方便快捷。此外,规范化可以消除潜在的数据格式问题,进一步增强了验证的准确性。
前述实施例提供的方案,可以对电子档的PDF文件进行溯源,但是本申请的发明人同时提供了可以实现对纸质版的PDF文件进行溯源的方案,具体方案包括:
步骤10,根据目标HTML文件中的溯源信息或嵌入至PDF文件中的溯源信息(原则上两者是相同的)生成包含有该溯源信息的二维码图像;
步骤20,对该二维码图像进行处理,使其在肉眼观察下不可见,以形成隐藏二维码,并将隐藏二维码添加至目标HTML文件中,并使得PDF文件同样存在该隐藏二维码;
步骤30,将包含隐藏二维码的PDF文件打印成纸质版;
步骤40,将点读设备悬停在打印成纸质版的PDF文件的特定区域处,该特定区域包含隐藏二维码的区域;
步骤50,利用点数设备扫描并识别隐藏二维码,并解码为溯源信息。
在一个实施例中,该点读设备具有语音播报模块和/或显示屏,在点读设备解码出溯源信息后播报该溯源信息和/或将溯源信息显示在显示屏上。在点读设备不具有显示屏时,也可以将点读设备与移动终端连接,将溯源信息传输至移动终端,并最终在移动终端显示出。
该步骤20中,例如可以通过将二维码图像的颜色与周围背景融合,或者通过将二维码图像缩小到微小的尺寸来实现。例如,具体可以是使用图像处理工具(例如AdobePhotoshop、GIMP等)来对生成的二维码图像进行减小亮度、模糊处理、减小尺寸、噪点添加、色彩调整等处理。
减小亮度处理方式为降低二维码图像的亮度,使其与背景更接近。您以调整图像的亮度和对比度来达到这一目的。模糊处理方式为对二维码图像应用轻微的模糊效果,以减少其清晰度。模糊处理可以使用高斯模糊、均值模糊或其他模糊滤镜来实现。减小尺寸处理方式为将二维码图像的尺寸缩小到微小的尺寸,以减少其可见性。噪点添加方式为向二维码图像中添加一些微小的噪点或纹理,以混淆图像并增加肉眼观察时的混淆度。色彩调整为调整二维码图像的颜色,使其与周围背景相匹配。通常,将二维码的颜色与周围背景融合可以使其更难被察觉。
该步骤S40中,点读设备配备有摄像头或图像扫描仪。该点读设备具有图像捕捉能力,允许用户扫描文本或图像以获取相关信息。需要将设备悬停在目标区域附近,以确保摄像头能够捕捉到隐藏的二维码。该步骤50中,用户使用点读设备的触摸或按键等控制,触发摄像头或扫描仪来扫描打印文档上的隐藏二维码。设备会捕捉图像,并将其传输到内部处理单元。内部处理单元将捕捉到的图像解码为文本或数据,这涉及到使用特定的解码算法来识别和还原二维码中的信息。该特定的解码算法可以是本领域常见的解码二维码的特定算法或方法,例如Reed-Solomon编码,又如位图扫描和解析法即扫描二维码图像的位图数据,并解析其中的黑白模块以确定二维码的位置和布局,还如识别二维码使用的数据编码方式(例如,数字、字母、字节或Kanji字符集),以正确解析数据等方法。此处不再赘述。
根据第三方面,本发明实施例提供了一种装置,如图12所示,装置10包括一个或多个处理器110以及存储器120。图12中以一个处理器110为例进行介绍,处理器110和存储器120可以通过总线或者其他方式连接,图12中以通过总线连接为例。
处理器110用于完成装置10的各种控制逻辑,其可以为通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)、单片机、ARM(AcornRISCMachine)或其它可编程逻辑器件、分立门或晶体管逻辑、分立的硬件组件或者这些部件的任何组合。还有,处理器110还可以是任何传统处理器、微处理器或状态机。处理器110也可以被实现为计算设备的组合,例如,DSP和微处理器的组合、多个微处理器、一个或多个微处理器结合DSP和/或任何其它这种配置。
存储器120作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块,如本发明实施例中的动态PDF文档的生成方法对应的程序指令。处理器110通过运行存储在存储器120中的非易失性软件程序、指令以及单元,从而执行装置10的各种功能应用以及数据处理,即实现上述方法实施例中的PDF文件生成方法以及PDF文件处理方法。
存储器120可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储根据装置10使用所创建的数据等。此外,存储器120可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,存储器120可选包括相对于处理器110远程设置的存储器,这些远程存储器可以通过网络连接至装置10。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
一个或者多个单元存储在存储器120中,当被一个或者多个处理器110执行时,实现以下步骤:
获取PDF模板;
利用Java技术和Freemarker库将PDF模板转换为HTML模板;
在所述HTML模板中添加用于指示目标数据插入位置的标签和/或占位符;
利用所述Freemarker库将所述目标数据填充至所述HTML模板的对应的所述标签和/或所述占位符处,得到目标HTML文件;
利用iText和HtmlConverter库将所述目标HTML文件转换为PDF文件。
或者,当被一个或者多个处理器110执行时,实现以下步骤:
加载由前述PDF文件生成方法生成的PDF文件;
响应于对所述PDF文件进行点击的用户触发事件,以捕捉所述用户触发事件中用户的点击位置;
将所述点击位置与PDF文件的目标点击区域进行匹配,从而获取所述目标点击区域的溯源信息;
对溯源信息进行篡改验证,以验证溯源信息是否被篡改;
将验证通过后的未被篡改的溯源信息显示在用户界面中。
根据第四方面,本发明实施例提供了一种非易失性计算机可读存储介质,存储介质存储有计算机可执行指令,该计算机可执行指令被一个或多个处理器执行,例如,执行以上描述的图1中的方法步骤S100至步骤S500,又如执行以上描述的图10中的方法步骤S110至步骤S150。
作为示例,非易失性存储介质能够包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦ROM(EEPROM)或闪速存储器。易失性存储器能够包括作为外部高速缓存存储器的随机存取存储器(RAM)。通过说明而非限制,RAM可以以诸如同步RAM(SRAM)、动态RAM、(DRAM)、同步DRAM(SDRAM)、双数据速率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、Synchlink DRAM(SLDRAM)以及直接Rambus(兰巴斯)RAM(DRRAM)之类的许多形式得到。本文中所描述的操作环境的所公开的存储器组件或存储器旨在包括这些和/或任何其他适合类型的存储器中的一个或多个。
当然,本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关硬件(如处理器,控制器等)来完成,所述的计算机程序可存储于一非易失性计算机可读取的存储介质中,该计算机程序在执行时可包括如上述各方法实施例的流程。其中所述的存储介质可为存储器、磁碟、软盘、闪存、光存储器等。
上述仅为本申请的一些具体实施方式,其它基于本申请构思的前提下做出的任何改进都视为本申请的保护范围。

Claims (8)

1.一种PDF文件生成方法,其特征在于,包括如下步骤:
获取PDF模板;
利用Java技术和Freemarker库将PDF模板转换为HTML模板;
在所述HTML模板中添加用于指示目标数据插入位置的标签和/或占位符;
利用所述Freemarker库将所述目标数据填充至所述HTML模板的对应的所述标签和/或所述占位符处,得到目标HTML文件;
利用iText和HtmlConverter库将所述目标HTML文件转换为PDF文件;
所述利用所述Freemarker库将所述目标数据填充至所述HTML模板的对应的所述标签和/或所述占位符处,得到HTML文件,包括如下步骤:
将所述目标数据全部填充至所述HTML模板中,得到第一HTML文件;
将所述目标数据进行分组或分类,得到多个数据组,每个所述数据组包括一组数据;
将每个所述数据组中的数据分别填充至所述HTML模板中,得到多个拆解HTML文件,每个所述拆解HTML文件中的数据均不相同;
将所述多个拆解HTML文件合并成第二HTML文件;
将所述第二HTML文件和第一HTML文件进行比较,以确定是否需要对所述多个拆解HTML文件进行修改;
在确定无需对所述多个拆解HTML文件进行修改后,保存所述多个拆解HTML文件,并将所述多个拆解HTML文件作为多个目标拆解HTML文件;
在确定需要对所述多个拆解HTML文件进行修改后,修改所述多个拆解HTML文件中的至少一个,并保存修改后的多个拆解HTML文件,并将修改后的所述多个拆解HTML文件作为多个目标拆解HTML文件。
2.根据权利要求1所述的PDF文件生成方法,其特征在于,所述将所述第二HTML文件和第一HTML文件进行比较,以确定是否需要对所述多个拆解HTML文件进行修改,包括如下步骤:
对所述第一HTML文件进行解析,得到第一DOM树结构,并对所述第二HTML文件进行解析,得到第二DOM树结构;
利用Resemble.js库加载所述第一HTML文件和所述第二HTML文件,并比较所述第一HTML文件和所述第二HTML文件的屏幕截图;
在所述第一DOM树结构和所述第二DOM树结构存在差异,和/或所述第一HTML文件和所述第二HTML文件的屏幕截图的相似度差异值大于预设差异值时,确定需要对所述多个拆解HTML文件进行修改,否则无需修改。
3.根据权利要求2所述的PDF文件生成方法,其特征在于,所述利用iText和HtmlConverter库将所述HTML文件转换为PDF文件,包括如下步骤:
创建Freemarker模板,所述Freemarker模板包含有用于表示所述多个目标拆解HTML文件的插入点的多个Freemarker标记;
将所述多个目标拆解HTML文件插入所述Freemarker模板中;
利用HtmlConverter将插入有所述多个目标拆解HTML文件的所述Freemarker模板转换为所述PDF文件。
4.根据权利要求1-3中任一项所述的PDF文件生成方法,其特征在于,所述目标数据包括目标区块链数据、目标溯源信息和目标元素数据,所述目标元素数据包括待生成PDF文件的文本内容、图像内容和图表内容;
所述利用所述Freemarker库将所述目标数据填充至所述HTML模板的对应的所述标签和/或所述占位符处,得到HTML文件,包括如下步骤:
根据所述目标区块链数据利用区块链技术生成唯一标识的目标区块链哈希值;
利用所述Freemarker库将所述目标区块链哈希值、所述目标溯源信息和所述目标元素数据分别填充至所述HTML模板的对应的所述标签和/或所述占位符处,得到HTML文件。
5.根据权利要求4所述的PDF文件生成方法,其特征在于,还包括如下步骤:
利用区块链技术生成所述目标元素数据对应的区块链哈希值;
将所述目标元素数据对应的区块链哈希值和目标溯源信息嵌入所述PDF文件的元数据中。
6.一种PDF文件处理方法,其特征在于,包括如下步骤:
加载由权利要求1-5中任一项所述的PDF文件生成方法生成的PDF文件;
响应于对所述PDF文件进行点击的用户触发事件,以捕捉所述用户触发事件中用户的点击位置;
将所述点击位置与PDF文件的目标点击区域进行匹配,从而获取所述目标点击区域的溯源信息;
对所述溯源信息进行篡改验证,以验证所述溯源信息是否被篡改;
将验证通过后的未被篡改的溯源信息显示在用户界面中;
所述对所述溯源信息进行篡改验证,以验证所述溯源信息是否被篡改,包括如下步骤:
获取所述PDF文件的目标元素的原始数据以及所述PDF文件的元数据中与所述目标元素对应的第二哈希值;
对所述原始数据进行规范化处理,得到合规数据;
利用哈希算法对所述合规数据进行哈希计算,得到第一哈希值;
将所述第一哈希值与所述第二哈希值进行对比;
在所述第一哈希值和所述第二哈希值不匹配时确定所述溯源信息被篡改,否则确定所述溯源信息未被篡改。
7.一种装置,其特征在于,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;
所述存储器用于存放至少一个可执行指令,所述可执行指令使所述处理器执行如权利要求1-5中任一项所述的PDF文件生成方法对应的操作以及执行如权利要求6所述的PDF文件处理方法对应的操作。
8.一种存储介质,其特征在于,所述存储介质上存储有PDF文件生成程序和PDF处理程序;
所述PDF文件生成程序被处理器执行时实现如权利要求1-5中任一项所述的PDF文件生成方法的步骤;
所述PDF文件处理程序被处理器执行时实现如权利要求6所述的PDF文件处理方法的步骤。
CN202311334138.0A 2023-10-16 2023-10-16 一种pdf文件生成方法、处理方法、装置及存储介质 Active CN117076410B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311334138.0A CN117076410B (zh) 2023-10-16 2023-10-16 一种pdf文件生成方法、处理方法、装置及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311334138.0A CN117076410B (zh) 2023-10-16 2023-10-16 一种pdf文件生成方法、处理方法、装置及存储介质

Publications (2)

Publication Number Publication Date
CN117076410A CN117076410A (zh) 2023-11-17
CN117076410B true CN117076410B (zh) 2024-01-26

Family

ID=88717576

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311334138.0A Active CN117076410B (zh) 2023-10-16 2023-10-16 一种pdf文件生成方法、处理方法、装置及存储介质

Country Status (1)

Country Link
CN (1) CN117076410B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117436429B (zh) * 2023-12-22 2024-05-17 珠海格力电器股份有限公司 文档导出方法、装置、计算机设备和存储介质

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109657215A (zh) * 2018-09-27 2019-04-19 深圳壹账通智能科技有限公司 基于模板的文档生成方法、设备、存储介质及装置

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9268761B2 (en) * 2009-06-05 2016-02-23 Microsoft Technology Licensing, Llc In-line dynamic text with variable formatting

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109657215A (zh) * 2018-09-27 2019-04-19 深圳壹账通智能科技有限公司 基于模板的文档生成方法、设备、存储介质及装置

Also Published As

Publication number Publication date
CN117076410A (zh) 2023-11-17

Similar Documents

Publication Publication Date Title
Choudhary et al. WEBDIFF: Automated identification of cross-browser issues in web applications
Villán Mastering OpenCV 4 with Python: a practical guide covering topics from image processing, augmented reality to deep learning with OpenCV 4 and Python 3.7
US10915788B2 (en) Optical character recognition using end-to-end deep learning
US10261984B2 (en) Browser and operating system compatibility
CN110532811B (zh) 一种pdf签章方法及pdf签章系统
US9418315B1 (en) Systems, methods, and computer readable media for extracting data from portable document format (PDF) files
US20110264705A1 (en) Method and system for interactive generation of presentations
US7844898B2 (en) Exporting a document in multiple formats
US10489645B2 (en) System and method for automatic detection and verification of optical character recognition data
US20080170785A1 (en) Converting Text
US20060285746A1 (en) Computer assisted document analysis
CN117076410B (zh) 一种pdf文件生成方法、处理方法、装置及存储介质
US9195653B2 (en) Identification of in-context resources that are not fully localized
KR101950126B1 (ko) 수학공식 처리방법, 장치, 설비 및 컴퓨터 저장 매체
IL226027A (en) Two-way text checker and method
US20150161160A1 (en) Application Localization
CN112131837A (zh) 业务报告配置方法、装置、计算机设备和存储介质
CN112418813A (zh) 基于智能解析识别的aeo资质智能评级管理系统、方法及存储介质
CN113467781B (zh) 一种冗余文件的确定方法、装置和设备
CN114661286A (zh) 一种大屏可视化代码生成方法、系统及存储介质
CN117709317A (zh) 报表文件的处理方法、装置及电子设备
CN113033177B (zh) 一种电子病历数据的解析方法及装置
RU2398276C2 (ru) Альтернативы анализа в контекстных деревьях
Ling et al. Document domain randomization for deep learning document layout extraction
CN110457659B (zh) 条款文档生成方法及终端设备

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant