单据分页打印方法、单据分页打印系统及计算机装置与流程

文档序号:14217702阅读:377来源:国知局
本发明涉及单据打印
技术领域
:,具体而言,涉及一种单据分页打印方法、单据分页打印系统、计算机装置及计算机可读存储介质。
背景技术
::随着企业应用互联网化和tob(tobusiness)业务创新化,现有企业使用的打印服务通常与应用或系统完全绑定,不仅难以满足企业用户多样化的打印场景需求,而且会让许多开发者疲于应对并发性能、插件安装、系统兼容等问题。其中,云打印作为一种paas(platformasaservice,平台即服务)公有云服务,面向企业级用户提供与打印相关的平台、应用、工具和服务,充分满足用户对单据的个性化定制打印需求。基于web的打印服务中,最大的难点在于如何按照定制的模板内容解析数据,从而生成个性化的打印单据,并实现精准的打印。在实际应用中,经常会遇到单据分页打印的场景,如批量打印报销单、采购明细单、人员信息表等,要求每个单据的内容在打印时独立成页。相关技术中基于web(worldwideweb,万维网)页面打印方案有很多:(1)使用浏览器自带的打印功能。该方案中,浏览器根据用户设置的页面大小和web内容的多少来自行决定分页位置,很难人为控制,而且不能连续打印多张单据。(2)使用pdf文件打印,即web前端从服务器下载pdf文件流,使用adobe插件打开并打印。该方案虽然可以基本满足要求,但是需要下载adobe插件。(3)基于第三方控件的方法,需要下载第三方控件,比较费时费力。并且在批量打印的应用场景下,打印服务web页面一次性获取到多张单据的数据,针对一个打印模板进行数据解析。相关技术中的打印服务在解析打印模板之后,将数据按照先后顺序,由上到下的逐行填入模板的相应位置,当一张纸被数据行(即实际的打印内容)填满后才进行分页,并不具备按单据分页的功能。然而现有的web端分页功能,大多都是使用空数据行填充的方式,通过计算并控制页面显示的尺寸来实现单据的分页。因此,现有的分页方法使用上灵活性差,不能满足用户的多样性需求。技术实现要素:本发明旨在至少解决现有技术或相关技术中存在的技术问题之一。为此,本发明的一个方面在于提出了一种单据分页打印方法。本发明的另一个方面在于提出了一种单据分页打印系统。本发明的再一个方面在于提出了一种计算机装置。本发明的又一个方面在于提出了一种计算机可读存储介质。有鉴于此,根据本发明的一个方面,提出了一种单据分页打印方法,包括:获取打印模板的数据区绑定的数据数组,数据数组中包括所有单据的数据;解析数据数组中每个单据的数据,对每个单据进行分页,获取页面缓存数组;将页面缓存数组在web页面上进行打印预览显示;向打印机发送打印指令,以控制打印机打印所有单据。本发明提供的单据分页打印方法,获取打印模板的数据区所绑定的数据数组,其中每个数据数组的元素为一个单据的全部数据,即数据数组包括了所有单据的数据,而数据区为打印模板的数据容器。对数据数组进行循环,解析每个单据的数据,进而对每个单据进行分页操作,生成一个待渲染的页面缓存数组,页面缓存数组中的每一个元素即为实际打印时一张打印纸的打印内容。进一步地将页面缓存数组在web页面上进行打印预览显示,在用户查看到打印预览内容并进行了确认后系统向打印机发送打印指令,以控制打印机打印所有单据。本发明针对单据批量打印的应用场景,无需下载第三方控件,使打印服务更加灵活,实现更加有效的单据数据分页打印,比较省时省力,满足用户对单据的个性化定制打印需求。根据本发明的上述单据分页打印方法,还可以具有以下技术特征:在上述技术方案中,优选地,解析数据数组中每个单据的数据,对每个所述单据进行分页,获取页面缓存数组的步骤,具体包括:获取打印模板的固定行数;获取任一单据的数据的索引值,计算索引值与固定行数的比值;将单据的数据添加至页面缓存数组的当前页;判断比值是否为整数;若比值为整数,则在页面缓存数组的当前页的内容后插入分页符作为打印模板的一张单据的打印内容。在该技术方案中,对每个单据进行分页操作的步骤具体包括:获取打印模板的固定行数,循环获取每一单据的数据的索引值,计算索引值与固定行数的比值,将单据的数据添加至页面缓存数组的当前页,如果该比值为整数,表明该单据的数据可以完整地填充在打印模板的完整的一页中,则通过css属性在页面缓存数组的当前页的内容后插入分页符作为打印模板的一张单据的打印内容,如果比值不为整数则停止当前循环,继续下次循环,即获取并添加该单据中的下一条数据再进行索引值的比较。直至数组数据中的单据是否全部完成解析并添加至页面缓存数组为止。使用css属性对存放打印内容的html进行精准的控制,不需要额外下载任何插件,不仅成本小,而且具有非常好的跨平台性。同时通过对单据进行固定行数分页,提高分页可控性,而且能够实现连续打印多张单据。在上述任一技术方案中,优选地,获取打印模板的固定行数的步骤,具体包括:获取打印纸张的高度;根据打印纸张的高度计算出打印纸张可容纳的数据条数,将数据条数作为固定行数。在该技术方案中,当设置了打印模板的打印纸张大小后,根据打印纸张高度和打印模板,可以计算出每张打印纸张可容纳的数据条数n(即行数,n>0),将计算所得的固定行数n作为一个属性值赋给数据区,能够精确地获取固定行数,进而实行按固定行数进行单据分页打印。在上述任一技术方案中,优选地,打印模板的数据区包括主数据区和子数据区,其中主数据区与多个子数据区关联;解析数据数组中每个单据的数据,对每个单据进行分页,获取页面缓存数组的步骤,具体包括:将任一单据的主表数据填入至主数据区中,形成打印模板的一条打印内容,添加至页面缓存数组的当前页;获取与主数据区关联的子数据区;解析出与主数据区关联的子数据区内的单据的数据的子表字段数据,将子表字段数据作为打印模板的一条打印内容,添加至页面缓存数组的当前页;在单据的数据全部添加至页面缓存数组后,在页面缓存数组的当前页的内容后插入分页符作为打印模板的一张单据的打印内容。在该技术方案中,打印模板至少包括一个主数据区以及关联该主数据区的若干子数据区,多个单据的数据数组包括了所有单据的数据,每条数据包含多个字段,其中子表字段包含多条子表数据。对每个单据进行分页操作的步骤还可以为:将任一单据的主表数据填入至主数据区中形成打印模板的一条打印内容,并将该条打印内容添加至页面缓存数组的当前页,进一步地获取与主数据区相关联的多个子数据区,解析出多个子数据区内的单据的数据的子表字段数据,将子表字段数据作为打印模板的一条打印内容,并逐条添加至页面缓存数组的当前页。判断一条单据的全部数据是否添加完毕(包括主、子数据区),如添加完毕,则通过css属性在页面缓存数组的当前页的内容后插入分页符作为打印模板的一张单据的打印内容。使用css属性对存放打印内容的html进行精准的控制,不需要额外下载任何插件,不仅成本小,而且具有非常好的跨平台性。同时能够更好的实现复杂模板的单据分页,使得单据分页更加灵活,应用性更强。在上述任一技术方案中,优选地,将页面缓存数组在web页面上进行打印预览显示的步骤,具体包括:将每页单据的打印内容作为table页签,插入至html页面中;将每页单据的打印内容的样式和内容解析为html字符串片段,并输入至预存缓存数据中;在所有单据的打印内容全部解析为html字符串片段后,将预存缓存数据中所有所述html字符串片段拼接成完整的html字符串;将完整的html字符串插入至web页面进行显示。在该技术方案中,当生成一个待渲染的页面缓存数组后,打印内容以table页签的形式插入到html页面中,每一页打印内容为一个单独的table,其中页面缓存数组的每一个元素即为实际打印时一张打印纸的打印内容。在对打印内容进行html输出时,创建一个预设缓存数组,按照打印内容顺序逐个单元格将其样式(如字号、字体、边框线等)和内容(文本、图片等)解析成html字符串片段,依次输出到预设缓存数组中。待打印内容全部转译成html片段之后,将字符串拼接成完整的html字符串,再插入到web页面中。通过以字符串输出代替频繁的dom操作,避免一次性渲染所有的数据造成浏览器卡顿甚至崩溃,使得等待时间较长。在上述任一技术方案中,优选地,将页面缓存数组在所述web页面上进行打印预览显示,具体包括:对任一页页面缓存数组中的单据的打印内容进行渲染,并将渲染后的单据的打印内容插入至web页面进行显示,直至所有单据的打印内容都插入至web页面进行显示。在该技术方案中,当生成一个待渲染的页面缓存数组后,还可以进行分页渲染,即逐页对解析后生成的打印内容进行渲染。具体地说,即在一页待打印内容全部转为dom元素插入到页面中之后,再进行下一页打印内容的渲染。这样可以避免浏览器在短时间内连续进行大量的循环操作,导致浏览器“假死”。根据本发明的另一个方面,提出了一种单据分页打印系统,包括:第一获取单元,用于获取打印模板的数据区绑定的数据数组,数据数组中包括所有单据的数据;分页单元,用于解析数据数组中每个单据的数据,对每个单据进行分页,获取页面缓存数组;预览显示单元,用于将页面缓存数组在web页面上进行打印预览显示;发送单元,用于向打印机发送打印指令,以控制打印机打印所有单据。本发明提供的单据分页打印系统,获取打印模板的数据区所绑定的数据数组,其中每个数据数组的元素为一个单据的全部数据,即数据数组包括了所有单据的数据,而数据区为打印模板的数据容器。对数据数组进行循环,解析每个单据的数据,进而对每个单据进行分页操作,生成一个待渲染的页面缓存数组,页面缓存数组中的每一个元素即为实际打印时一张打印纸的打印内容。进一步地将页面缓存数组在web页面上进行打印预览显示,在用户查看到打印预览内容并进行了确认后系统向打印机发送打印指令,以控制打印机打印所有单据。本发明针对单据批量打印的应用场景,无需下载第三方控件,使打印服务更加灵活,实现更加有效的单据数据分页打印,比较省时省力,满足用户对单据的个性化定制打印需求。根据本发明的上述单据分页打印系统,还可以具有以下技术特征:在上述技术方案中,优选地,分页单元,包括:第二获取单元,用于获取打印模板的固定行数;计算单元,用于获取任一单据的数据的索引值,计算所述索引值与固定行数的比值;添加单元,用于将单据的数据添加至页面缓存数组的当前页;判断单元,用于判断比值是否为整数;添加单元,还用于若比值为整数,则在页面缓存数组的当前页的内容后插入分页符作为打印模板的一张单据的打印内容。在该技术方案中,对每个单据进行分页操作的步骤具体包括:获取打印模板的固定行数,循环获取每一单据的数据的索引值,计算索引值与固定行数的比值,将单据的数据添加至页面缓存数组的当前页,如果该比值为整数,表明该单据的数据可以完整地填充在打印模板的完整的一页中,则通过css属性在页面缓存数组的当前页的内容后插入分页符作为打印模板的一张单据的打印内容,如果比值不为整数,则停止当前循环,继续下次循环,即获取并添加该单据中的下一条数据再进行索引值的比较。直至数组数据中的单据全部完成解析并添加至页面缓存数组为止。使用css属性对存放打印内容的html进行精准的控制,不需要额外下载任何插件,不仅成本小,而且具有非常好的跨平台性。同时通过对单据进行固定行数分页,提高分页可控性,而且能够实现连续打印多张单据。在上述任一技术方案中,优选地,第二获取单元,具体用于获取打印纸张的高度;根据打印纸张的高度计算出打印纸张可容纳的数据条数,将数据条数作为固定行数。在该技术方案中,当设置了打印模板的打印纸张大小后,根据打印纸张高度和打印模板,可以计算出每张打印纸张可容纳的数据条数n(即行数,n>0),将计算所得的固定行数n作为一个属性值赋给数据区,能够精确地获取固定行数,进而实行按固定行数进行单据分页打印。在上述任一技术方案中,优选地,打印模板的数据区包括主数据区和子数据区,其中主数据区与多个所述子数据区关联;分页单元,具体用于将任一单据的主表数据填入至主数据区中,形成打印模板的一条打印内容,添加至页面缓存数组的当前页;分页单元,还包括:第三获取单元,用于获取与主数据区关联的子数据区;添加单元,还用于解析出与主数据区关联的子数据区内的单据的数据的子表字段数据,将子表字段数据作为打印模板的一条打印内容,添加至页面缓存数组的当前页;在单据的数据全部添加至页面缓存数组后,在页面缓存数组的当前页的内容后插入分页符作为打印模板的一张单据的打印内容。在该技术方案中,打印模板至少包括一个主数据区以及关联该主数据区的若干子数据区,多个单据的数据数组包括了所有单据的数据,每条数据包含多个字段,其中子表字段包含多条子表数据。对每个单据进行分页操作的步骤还可以为:将任一单据的主表数据填入至主数据区中形成打印模板的一条打印内容,并将该条打印内容添加至页面缓存数组的当前页,进一步地获取与主数据区相关联的多个子数据区,解析出多个子数据区内的单据的数据的子表字段数据,将子表字段数据作为打印模板的一条打印内容,并逐条添加至页面缓存数组的当前页。判断一条单据的全部数据是否添加完毕(包括主、子数据区),如添加完毕,则通过css属性在页面缓存数组的当前页的内容后插入分页符作为打印模板的一张单据的打印内容。使用css属性对存放打印内容的html进行精准的控制,不需要额外下载任何插件,不仅成本小,而且具有非常好的跨平台性。同时能够更好的实现复杂模板的单据分页,使得单据分页更加灵活,应用性更强。在上述任一技术方案中,优选地,预览显示单元,具体用于将每页单据的打印内容作为table页签,插入至html页面中;将每页单据的打印内容的样式和内容解析为html字符串片段,并输入至预存缓存数据中;在所有单据的打印内容全部解析为html字符串片段后,将预存缓存数据中所有所述html字符串片段拼接成完整的html字符串;将完整的html字符串插入至web页面进行显示。在该技术方案中,当生成一个待渲染的页面缓存数组后,打印内容以table页签的形式插入到html页面中,每一页打印内容为一个单独的table,其中页面缓存数组的每一个元素即为实际打印时一张打印纸的打印内容。在对打印内容进行html输出时,创建一个预设缓存数组,按照打印内容顺序逐个单元格将其样式(如字号、字体、边框线等)和内容(文本、图片等)解析成html字符串片段,依次输出到预设缓存数组中。待打印内容全部转译成html片段之后,将字符串拼接成完整的html字符串,再插入到web页面中。通过以字符串输出代替频繁的dom操作,避免一次性渲染所有的数据造成浏览器卡顿甚至崩溃,使得等待时间较长。在上述任一技术方案中,优选地,预览显示单元,具体用于对任一页页面缓存数组中的单据的打印内容进行渲染,并将渲染后的单据的打印内容插入至web页面进行显示,直至所有单据的打印内容都插入至web页面进行显示。在该技术方案中,当生成一个待渲染的页面缓存数组后,还可以进行分页渲染,即逐页对解析后生成的打印内容进行渲染。具体地说,即在一页待打印内容全部转为dom元素插入到页面中之后,再进行下一页打印内容的渲染。这样可以避免浏览器在短时间内连续进行大量的循环操作,导致浏览器“假死”。根据本发明的再一个方面,提出了一种计算机装置,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现如上述任一项的单据分页打印方法的步骤。本发明提供的计算机装置,处理器执行计算机程序时实现上述单据分页打印方法的步骤,能够实现上述单据分页打印方法的技术效果,不再赘述。根据本发明的又一个方面,提出了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现如上述任一项的单据分页打印方法的步骤。本发明提供的计算机可读存储介质,计算机程序被处理器执行时实现上述单据分页打印方法的步骤,能够实现上述单据分页打印方法的技术效果,不再赘述。本发明的附加方面和优点将在下面的描述部分中变得明显,或通过本发明的实践了解到。附图说明本发明的上述和/或附加的方面和优点从结合下面附图对实施例的描述中将变得明显和容易理解,其中:图1示出了本发明的一个实施例的打印服务的示意图;图2示出了本发明的一个实施例的单据分页打印方法的流程示意图;图3示出了本发明的另一个实施例的单据分页打印方法的流程示意图;图4示出了本发明的再一个实施例的单据分页打印方法的流程示意图;图5示出了本发明的一个实施例的按照主子数据区进行单据分页打印过程的示意图;图6a示出了本发明的一个实施例的单据分页打印系统的示意框图;图6b示出了本发明的另一个实施例的单据分页打印系统的示意框图;图6c示出了本发明的再一个实施例的单据分页打印系统的示意框图。具体实施方式为了能够更清楚地理解本发明的上述目的、特征和优点,下面结合附图和具体实施方式对本发明进行进一步的详细描述。需要说明的是,在不冲突的情况下,本申请的实施例及实施例中的特征可以相互组合。在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是,本发明还可以采用其他不同于在此描述的其他方式来实施,因此,本发明的保护范围并不限于下面公开的具体实施例的限制。图1示出了本发明的一个实施例的打印服务的示意图。其中,对于用户发起的一次打印请求,打印服务的处理的过程如下:(1)服务端接收用户从终端发起的打印请求和打印数据,以及打印模板编码;(2)web页面获取用户数据的同时,从云端模板库中取出模板数据,如模板1、模板2......模板n,;(3)通过web前端对模板与数据进行解析,生成打印预览页,所见即所得;(4)浏览器向打印机发送打印任务,完成单据的打印。本发明第一方面的实施例,提出一种单据分页打印方法,图2示出了本发明的一个实施例的单据分页打印方法的流程示意图。其中,该方法包括:步骤202,获取打印模板的数据区绑定的数据数组,数据数组中包括所有单据的数据;步骤204,解析数据数组中每个单据的数据,对每个单据进行分页,获取页面缓存数组;步骤206,将页面缓存数组在web页面上进行打印预览显示;步骤208,向打印机发送打印指令,以控制打印机打印所有单据。本发明提供的单据分页打印方法,获取打印模板的数据区所绑定的数据数组,其中每个数据数组的元素为一个单据的全部数据,即数据数组包括了所有单据的数据,而数据区为打印模板的数据容器。对数据数组进行循环,解析每个单据的数据,进而对每个单据进行分页操作,生成一个待渲染的页面缓存数组,页面缓存数组中的每一个元素即为实际打印时一张打印纸的打印内容。进一步地将页面缓存数组在web页面上进行打印预览显示,在用户查看到打印预览内容并进行了确认后系统向打印机发送打印指令,以控制打印机打印所有单据。本发明针对单据批量打印的应用场景,无需下载第三方控件,使打印服务更加灵活,实现更加有效的单据数据分页打印,比较省时省力,满足用户对单据的个性化定制打印需求。图3示出了本发明的另一个实施例的单据分页打印方法的流程示意图。其中,该方法包括:步骤302,获取打印模板的数据区绑定的数据数组,数据数组中包括所有单据的数据;步骤304,获取打印纸张的高度;根据打印纸张的高度计算出打印纸张可容纳的数据条数,将数据条数作为固定行数;步骤306,获取数据数组中的任一单据;步骤308,获取该单据中的一条数据的索引值,计算索引值与固定行数的比值;步骤310,将该条数据添加至页面缓存数组的当前页;步骤312,判断比值是否为整数,若比值为整数则进入步骤314,若比值不为整数则返回步骤316;步骤314,在页面缓存数组的当前页的内容后插入分页符作为打印模板的一张单据的打印内容;步骤316,判断该单据中的所有数据是否都添加完毕,若是则进入步骤318,若否则返回步骤308;步骤318,判断该数据数组中的单据是否都获取完毕,若是则进入步骤320,若否则返回步骤306;步骤320,将页面缓存数组在web页面上进行打印预览显示;步骤322,向打印机发送打印指令,以控制打印机打印所有单据。在该实施例中,获取打印模板的数据区所绑定的数据数组,其中每个数据数组的元素为一个单据的全部数据,即数据数组包括了所有单据的数据,而数据区为打印模板的数据容器。当设置了打印模板的打印纸张大小后,根据打印纸张高度和打印模板,可以计算出每张打印纸张可容纳的数据条数n(即行数,n>0),将计算所得的固定行数n作为一个属性值赋给数据区,能够精确地获取固定行数,进而实行按固定行数进行单据分页打印。循环获取每一单据的数据的索引值,计算索引值与固定行数的比值,将单据的数据添加至页面缓存数组的当前页,如果该比值为整数,表明该单据的数据可以完整地填充在打印模板的完整的一页中,则通过css属性在页面缓存数组的当前页的内容后插入分页符作为打印模板的一张单据的打印内容,如果比值不为整数,则停止当前循环,继续下次循环,即获取并添加该单据中的下一条数据再进行索引值的比较。直至数组数据中的单据全部完成解析并添加至页面缓存数组为止。使用css属性对存放打印内容的html进行精准的控制,不需要额外下载任何插件,不仅成本小,而且具有非常好的跨平台性。同时通过对单据进行固定行数分页,提高分页可控性,而且能够实现连续打印多张单据。进一步地将页面缓存数组在web页面上进行打印预览显示,在用户查看到打印预览内容并进行了确认后系统向打印机发送打印指令,以控制打印机打印所有单据。本发明针对单据批量打印的应用场景,无需下载第三方控件,使打印服务更加灵活,实现更加有效的单据数据分页打印,比较省时省力,满足用户对单据的个性化定制打印需求。图4示出了本发明的再一个实施例的单据分页打印方法的流程示意图。其中,该方法包括:步骤402,获取打印模板的数据区绑定的数据数组,数据数组中包括所有单据的数据;步骤404,将任一单据的主表数据填入至主数据区中,形成打印模板的一条打印内容,添加至页面缓存数组的当前页;步骤406,获取与主数据区关联的子数据区;步骤408,解析出与主数据区关联的子数据区内的单据的数据的子表字段数据,将子表字段数据作为打印模板的一条打印内容,添加至页面缓存数组的当前页;步骤410,在单据的数据全部添加至页面缓存数组后,在页面缓存数组的当前页的内容后插入分页符作为打印模板的一张单据的打印内容;步骤412,将页面缓存数组在web页面上进行打印预览显示;步骤414,向打印机发送打印指令,以控制打印机打印所有单据。其中,打印模板的数据区包括主数据区和子数据区,其中主数据区与多个子数据区关联。在该实施例中,获取打印模板的数据区所绑定的数据数组,其中每个数据数组的元素为一个单据的全部数据,即数据数组包括了所有单据的数据,打印模板的数据容器主要可以分为两类,以报销单为例:主数据区,打印单据的主表字段,如报销单中的人员姓名,单据编号等。子数据区,打印单据的明细列表,对应主表数据的一个子表字段,如费用发生日期,费用条目等。打印模板至少包括一个主数据区以及关联该主数据区的若干子数据区,多个单据的数据数组包括了所有单据的数据,每条数据包含多个字段,其中子表字段包含多条子表数据。对每个单据进行分页操作的步骤还可以为:将任一单据的主表数据填入至主数据区中形成打印模板的一条打印内容,并将该条打印内容添加至页面缓存数组的当前页,进一步地获取与主数据区相关联的多个子数据区,解析出多个子数据区内的单据的数据的子表字段数据,将子表字段数据作为打印模板的一条打印内容,并逐条添加至页面缓存数组的当前页。判断一条单据的全部数据是否添加完毕(包括主、子数据区),如添加完毕,则通过css属性在页面缓存数组的当前页的内容后插入分页符作为打印模板的一张单据的打印内容。打印过程如图5所示,将单据数据按照打印模板的主子数据区分别进行分页打印。使用css属性对存放打印内容的html进行精准的控制,不需要额外下载任何插件,不仅成本小,而且具有非常好的跨平台性。同时能够更好的实现复杂模板的单据分页,使得单据分页更加灵活,应用性更强。进一步地将页面缓存数组在web页面上进行打印预览显示,在用户查看到打印预览内容并进行了确认后系统向打印机发送打印指令,以控制打印机打印所有单据。本发明针对单据批量打印的应用场景,无需下载第三方控件,使打印服务更加灵活,实现更加有效的单据数据分页打印,比较省时省力,满足用户对单据的个性化定制打印需求。web页面根据打印模板解析单据数据之后,生成了一个待渲染的页面缓存数组,数组的每一个元素即为实际打印时一张打印纸的打印内容。当单据数量庞大时,需要频繁的计算和大量的dom操作。由于浏览器客户端计算资源有限,一次性渲染所有的数据极其容易造成浏览器卡顿甚至崩溃,等待时间较长,用户体验变差。为了避免效率问题,本发明同时采用了以下多页单据打印预览效率的优化方案:1)以字符串输出代替频繁的dom操作。打印内容以table页签的形式插入到html页面中,每一页打印内容为一个单独的table。在对打印内容进行html输出时,创建一个缓存数组,按照打印内容顺序逐个单元格将其样式(如字号、字体、边框线等)和内容(文本、图片等)解析成html字符串片段,依次输出到缓存数组中。待打印内容全部转译成html片段之后,将字符串拼接成完整的html字符串,一次性插入到web页面中。通过以字符串输出代替频繁的dom操作,避免一次性渲染所有的数据造成浏览器卡顿甚至崩溃,使得等待时间较长。2)分页渲染,即逐页对解析后生成的打印内容进行渲染。具体地说,即在一页待打印内容全部转为dom元素插入到页面中之后,再进行下一页打印内容的渲染。这样可以避免浏览器在短时间内连续进行大量的循环操作,导致浏览器“假死”。需要说明的是,以上多页单据打印预览效率的优化方案均可以应用于上述单据分页打印方法的将页面缓存数组在web页面上进行打印预览显示的过程。本发明第二方面的实施例,提出一种单据分页打印系统,图6a示出了本发明的一个实施例的单据分页打印系统600的示意框图。其中,该系统600包括:第一获取单元602,用于获取打印模板的数据区绑定的数据数组,数据数组中包括所有单据的数据;分页单元604,用于解析数据数组中每个单据的数据,对每个单据进行分页,获取页面缓存数组;预览显示单元606,用于将页面缓存数组在web页面上进行打印预览显示;发送单元608,用于向打印机发送打印指令,以控制打印机打印所有单据。本发明提供的单据分页打印系统600,获取打印模板的数据区所绑定的数据数组,其中每个数据数组的元素为一个单据的全部数据,即数据数组包括了所有单据的数据,而数据区为打印模板的数据容器。对数据数组进行循环,解析每个单据的数据,进而对每个单据进行分页操作,生成一个待渲染的页面缓存数组,页面缓存数组中的每一个元素即为实际打印时一张打印纸的打印内容。进一步地将页面缓存数组在web页面上进行打印预览显示,在用户查看到打印预览内容并进行了确认后系统向打印机发送打印指令,以控制打印机打印所有单据。本发明针对单据批量打印的应用场景,无需下载第三方控件,使打印服务更加灵活,实现更加有效的单据数据分页打印,比较省时省力,满足用户对单据的个性化定制打印需求。图6b示出了本发明的另一个实施例的单据分页打印系统600的示意框图。其中,该系统600包括:第一获取单元602,用于获取打印模板的数据区绑定的数据数组,数据数组中包括所有单据的数据;分页单元604包括:第二获取单元6402,用于获取打印纸张的高度;根据打印纸张的高度计算出打印纸张可容纳的数据条数,将数据条数作为固定行数;计算单元6404,用于获取任一单据的数据的索引值,计算所述索引值与固定行数的比值;添加单元6406,用于将单据的数据添加至页面缓存数组的当前页;判断单元6408,用于判断比值是否为整数;添加单元6406,还用于若比值为整数,则在页面缓存数组的当前页的内容后插入分页符作为打印模板的一张单据的打印内容;预览显示单元606,用于将页面缓存数组在web页面上进行打印预览显示;发送单元608,用于向打印机发送打印指令,以控制打印机打印所有单据。在该实施例中,当设置了打印模板的打印纸张大小后,根据打印纸张高度和打印模板,可以计算出每张打印纸张可容纳的数据条数n(即行数,n>0),将计算所得的固定行数n作为一个属性值赋给数据区,能够精确地获取固定行数,进而实行按固定行数进行单据分页打印。对每个单据进行分页操作的步骤具体包括:获取打印模板的固定行数,循环获取每一单据的数据的索引值,计算索引值与固定行数的比值,将单据的数据添加至页面缓存数组的当前页,如果该比值为整数,表明该单据的数据可以完整地填充在打印模板的完整的一页中,则通过css属性在页面缓存数组的当前页的内容后插入分页符作为打印模板的一张单据的打印内容,如果比值不为整数,则停止当前循环,继续下次循环,即获取并添加该单据中的下一条数据再进行索引值的比较。直至数组数据中的单据全部完成解析并添加至页面缓存数组为止。使用css属性对存放打印内容的html进行精准的控制,不需要额外下载任何插件,不仅成本小,而且具有非常好的跨平台性。同时通过对单据进行固定行数分页,提高分页可控性,而且能够实现连续打印多张单据。图6c示出了本发明的再一个实施例的单据分页打印系统600的示意框图。其中,该系统600包括:第一获取单元602,用于获取打印模板的数据区绑定的数据数组,数据数组中包括所有单据的数据;分页单元604,具体用于将任一单据的主表数据填入至主数据区中,形成打印模板的一条打印内容,添加至页面缓存数组的当前页;分页单元604,还包括:第三获取单元6410,用于获取与主数据区关联的子数据区;添加单元6406,用于解析出与主数据区关联的子数据区内的单据的数据的子表字段数据,将子表字段数据作为打印模板的一条打印内容,添加至页面缓存数组的当前页;在单据的数据全部添加至页面缓存数组后,在页面缓存数组的当前页的内容后插入分页符作为打印模板的一张单据的打印内容;预览显示单元606,用于将页面缓存数组在web页面上进行打印预览显示;发送单元608,用于向打印机发送打印指令,以控制打印机打印所有单据。其中,打印模板的数据区包括主数据区和子数据区,其中主数据区与多个所述子数据区关联。在该实施例中,打印模板至少包括一个主数据区以及关联该主数据区的若干子数据区,多个单据的数据数组包括了所有单据的数据,每条数据包含多个字段,其中子表字段包含多条子表数据。对每个单据进行分页操作的步骤还可以为:将任一单据的主表数据填入至主数据区中形成打印模板的一条打印内容,并将该条打印内容添加至页面缓存数组的当前页,进一步地获取与主数据区相关联的多个子数据区,解析出多个子数据区内的单据的数据的子表字段数据,将子表字段数据作为打印模板的一条打印内容,并逐条添加至页面缓存数组的当前页。判断一条单据的全部数据是否添加完毕(包括主、子数据区),如添加完毕,则通过css属性在页面缓存数组的当前页的内容后插入分页符作为打印模板的一张单据的打印内容。使用css属性对存放打印内容的html进行精准的控制,不需要额外下载任何插件,不仅成本小,而且具有非常好的跨平台性。同时能够更好的实现复杂模板的单据分页,使得单据分页更加灵活,应用性更强。在本发明的一个实施例中,优选地,预览显示单元606,具体用于将每页单据的打印内容作为table页签,插入至html页面中;将每页单据的打印内容的样式和内容解析为html字符串片段,并输入至预存缓存数据中;在所有单据的打印内容全部解析为html字符串片段后,将预存缓存数据中所有所述html字符串片段拼接成完整的html字符串;将完整的html字符串插入至web页面进行显示。在该实施例中,当生成一个待渲染的页面缓存数组后,打印内容以table页签的形式插入到html页面中,每一页打印内容为一个单独的table,其中页面缓存数组的每一个元素即为实际打印时一张打印纸的打印内容。在对打印内容进行html输出时,创建一个预设缓存数组,按照打印内容顺序逐个单元格将其样式(如字号、字体、边框线等)和内容(文本、图片等)解析成html字符串片段,依次输出到预设缓存数组中。待打印内容全部转译成html片段之后,将字符串拼接成完整的html字符串,再插入到web页面中。通过以字符串输出代替频繁的dom操作,避免一次性渲染所有的数据造成浏览器卡顿甚至崩溃,使得等待时间较长。在本发明的一个实施例中,优选地,预览显示单元606,具体用于对任一页页面缓存数组中的单据的打印内容进行渲染,并将渲染后的单据的打印内容插入至web页面进行显示,直至所有单据的打印内容都插入至web页面进行显示。在该实施例中,当生成一个待渲染的页面缓存数组后,还可以进行分页渲染,即逐页对解析后生成的打印内容进行渲染。具体地说,即在一页待打印内容全部转为dom元素插入到页面中之后,再进行下一页打印内容的渲染。这样可以避免浏览器在短时间内连续进行大量的循环操作,导致浏览器“假死”。本发明从模板设计和数据解析的角度出发,提出了一种有效的打印数据按单据分页的技术方案。同时,对于大量单据的批量打印,本发明从前端算法优化的角度提出了优化方案,有效的解决了打印预览的效率问题。相比相关技术中使用pdf插件和activex控件类的基于插件的分页打印方案,本发明的至少具有以下优点:(1)使用javascript脚本和css样式对存放打印内容的html进行精准的控制,不需要额外下载任何插件,不仅成本小,而且具有非常好的跨平台性。(2)用户操作简单,容易学习、维护和发布。用户只需在模板设计器上勾选主、子数据区的绑定,就可以轻松的获得分页打印的单据。本发明第三方面的实施例,提出了一种计算机装置,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现如上述任一项的单据分页打印方法的步骤。本发明提供的计算机装置,处理器执行计算机程序时实现上述单据分页打印方法的步骤,能够实现上述单据分页打印方法的技术效果,不再赘述。本发明第四方面的实施例,提出了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现如上述任一项的单据分页打印方法的步骤。本发明提供的计算机可读存储介质,计算机程序被处理器执行时实现上述单据分页打印方法的步骤,能够实现上述单据分页打印方法的技术效果,不再赘述。在本说明书的描述中,术语“一个实施例”、“一些实施例”、“具体实施例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或实例。而且,描述的具体特征、结构、材料或特点可以在任何的一个或多个实施例或示例中以合适的方式结合。以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1