发明内容
因此,本发明提供了一种基于GDI框架的打印预览方法及打印预览装置。
为实现上述目的,本发明实施例提供了一种基于GDI框架的打印预览方法,该预览方法包括:响应于打印指令和预览指令,获取应用程序中待打印数据;将所述待打印数据输出为EMF文件,并将所述EMF文件渲染为预览图像;将所述预览图像发送至所述应用程序,使所述应用程序在预览界面中显示所述预览图像。
可选地,所述将所述待打印数据输出为EMF文件,并将所述EMF文件渲染为预览图像,包括:基于所述待打印数据,控制打印驱动程序中的GDI驱动程序将所述待打印数据输出为所述EMF文件;将所述EMF文件渲染为图片文件;控制打印驱动程序将所述图片文件转换为预览图像。
可选地,所述GDI驱动程序包括打印图形DLL,所述控制打印驱动程序中的GDI驱动程序将所述待打印数据输出为所述EMF文件,包括:
基于所述待打印数据,控制所述打印图形DLL将DrvEnablePDEV过程中API的参数DEVINFO *pdi中的成员变量FLONG flGraphicsCaps中包含的GCAPS_ALTERNATEFILL值清除;控制打印驱动程序中的GDI驱动程序将所述待打印数据输出为所述EMF文件。
可选地,所述将所述EMF文件渲染为图片文件,包括:将所述EMF文件发送到假脱机程序中缓存;通过假脱机程序中的EMF打印处理器将所述EMF文件渲染为图片文件。
可选地,所述通过假脱机程序中的EMF打印处理器将所述EMF文件渲染为图片文件,包括:
在所述EMF打印处理器中注入PrintDocumentOnPrintProcessor驱动程序来监控并处理所述EMF文件;控制所述EMF打印处理器将监控后以及处理后的EMF文件渲染为图片文件。可选地,所述在所述EMF打印处理器中注入PrintDocumentOnPrintProcessor驱动程序来监控并处理所述EMF文件,包括:在所述EMF打印处理器中注入PrintDocumentOnPrintProcessor驱动程序;监控所述EMF打印处理器的句柄中uDatatype变量;当所述EMF打印处理器识别出所述EMF文件中的EMF Spool数据时,使用Readprinter函数来读取所述EMF Spool数据,并将所述EMF Spool数据提取出来。
可选地,所述控制所述EMF打印处理器将监控后以及处理后的EMF文件渲染为图片文件,包括:将提取出的所述EMF Spool数据解析成EMF API函数;并使用PlayEnhMetaFile函数将所述EMF API函数还原成所述图片文件。
可选地,所述响应于打印指令和预览指令,获取应用程序中待打印数据,包括:响应于所述打印指令,判断是否接收到所述预览指令;当接收到所述预览指令时,控制所述打印驱动程序显示所述预览界面,获取所述待打印数据。
可选地,所述获取所述待打印数据,包括:获取待打印文件的预览内容,所述预览内容包括至少一个预览页码以及与所述预览页码相对应的预览信息;根据所述预览页码以及所述预览信息,生成所述待打印数据。
可选地,该预览方法还包括:当未接收到所述预览指令时,控制操作系统的GDI驱动程序将所述待打印数据输入到所述操作系统的GDI渲染引擎进行渲染。
本发明实施例还提供了一种基于GDI框架的打印预览装置,该打印预览装置包括:获取模块,用于响应于打印指令和预览指令,获取应用程序中待打印数据;处理模块,用于将所述待打印数据输出为EMF文件,并将所述EMF文件渲染为预览图像;输出模块,用于将所述预览图像发送至所述应用程序,使所述应用程序在预览界面中显示所述预览图像。
本发明实施例还提供了一种电子设备,该电子设备包括:存储器和处理器,所述存储器和所述处理器之间互相通信连接,所述存储器中存储有计算机指令,所述处理器通过执行所述计算机指令,从而执行上述任一实施例所述的基于GDI框架的打印预览方法。
可选地,所述电子设备为打印机。
本发明技术方案与现有技术相比,具有如下优点:
1.本发明实施例提供了一种基于GDI框架的打印预览方法,该预览方法包括:响应于打印指令和预览指令,获取应用程序中待打印数据;将所述待打印数据输出为EMF文件,并将所述EMF文件渲染为预览图像;将所述预览图像发送至所述应用程序,使所述应用程序在预览界面中显示所述预览图像。
如此设置,由打印机本身的打印驱动程序提供打印预览功能,可以将各种应用程序中待打印文件的待打印数据输出为EMF文件,再将EMF文件渲染为预览图像之后,发送至应用程序进行预览,从而能够预览各种应用程序中所有待打印文件的打印预览图像,而并不仅仅限制于解析特定格式的文档类型。并且,该打印预览方法能够向所有应用程序提供调用接口,实现在各类应用程序中显示打印预览。
具体实施方式
下面将结合附图对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通工人在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在本发明的描述中,需要说明的是,术语“中心”、“上”、“下”、“左”、“右”、“竖直”、“水平”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一”、“第二”、“第三”仅用于描述目的,而不能理解为指示或暗示相对重要性。
在本发明的描述中,需要说明的是,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,还可以是两个元件内部的连通,可以是无线连接,也可以是有线连接。对于本领域的普通工人而言,可以具体情况理解上述术语在本发明中的具体含义。
此外,下面所描述的本发明不同实施方式中所涉及的技术特征只要彼此之间未构成冲突就可以相互结合。
用户在Windows上打印某文档时,打印方式通常有两种,方式1:打开文档对应的应用程序,在菜单中调出应用程序中的打印选项并实施打印。由于有部分应用程序本身不自带打印预览功能,所以用户无法在打印之前看到打印效果,在打印之后,如果有排版问题,只能重新打印。另外,此方式需要用户调用打印机设置,使得操作繁琐。方式2:打开打印机厂家提供的打印程序,并在程序里面打开该文档或者拖动文档到界面中进行打印。但是,用户可以在打印程序中查看文档内容,不过却无法预览word、pdf等文档的打印情况。
为了应对以上问题,目前对于方式1的解决方式为:针对word和pdf提供了商用的第三方解析程序给应用程序调用生成预览图片,即应用程序通过调用这些第三方程序能够获取文档的预览图片。不过只能解析特定格式的文档类型,不能对打印机的设置进行相应的预览,如双面打印。所以,目前的打印预览方式用户使用时较为不便。
实施例1
如图1所示,本发明实施例提供了一种基于GDI框架的打印预览方法,该打印预览方法具体包括以下步骤:
S11.响应于打印指令和预览指令,获取应用程序中待打印数据;
首先,在用户使用电子设备上的应用程序想要进行打印时,需要点击应用程序上的“打印”按钮,从而向电子设备下发打印指令。电子设备在接收到打印指令之后,生成预览界面的弹窗,用户可以在弹窗中对打印参数进行设置。这些打印参数可以在每一个要打印的文档中被修改。如打印的份数、双面打印、纸张大小、纸张来源、色彩模式、打印分辨率、方向和缩放等。
在用户对打印参数设置完毕之后,想要对待打印文件进行预览时,需要点击应用程序上的“预览”按钮,从而向电子设备下发预览指令。电子设备在接收到打印指令之后,获取应用程序中待打印文件的待打印数据。
具体地,待打印数据可以包括文字、打印具体参数,还可以包括水印、缩放、小册子等各种打印功能。
当然,本领域技术人员可根据实际情况对待打印数据的具体类型进行改变,本实施例仅仅是举例说明,并不加以限制,能够起到相同的技术效果即可。
S12.将所述待打印数据输出为EMF文件,并将所述EMF文件渲染为预览图像;
其次,在本发明实施例中,需要将待打印数据以EMF格式文件(EMF文件)进行输出。EMF格式文件为Windows应用程序的通用矢量图形,其可以用来作为打印机驱动程序的图形语言,也是Windows操作系统留给打印机驱动进行二次图像加工的接口。并且,EMF格式文件可以作为打印中间语言方便地转换为各种其他常见格式文件。然后,再将所述EMF文件进行渲染,并形成预览图像。
S13.将所述预览图像发送至所述应用程序,使所述应用程序在预览界面中显示所述预览图像。
最后,再将预览图像直接发送至所述应用程序,应用程序能够在预览界面中显示该预览图像,用户从而可以看到待打印文件的预览图像。
如此设置,能够使用户预览各种应用程序中所有待打印文件的打印预览图像,而并不仅仅限制于解析特定格式的文档类型。并且,该打印预览方法能够向所有应用程序提供调用接口,实现在各类应用程序中显示打印预览。
实施例2
如图2所示,本发明实施例提供了一种基于GDI框架的打印预览方法,该打印预览方法具体包括以下步骤:
S21.响应于打印指令和预览指令,获取应用程序中待打印数据;具体内容请见上述实施例步骤S11的具体描述,在此不再赘述。
S22.将所述待打印数据输出为EMF文件,并将所述EMF文件渲染为预览图像;
具体地,在本发明实施例中步骤S22可以包括:
S221.基于所述待打印数据,控制打印驱动程序中的GDI驱动程序将所述待打印数据输出为所述EMF文件;
电子设备中设置有打印驱动程序,打印驱动程序设置有其自己的GDI驱动程序,GDI是图形设备接口(Graphics Device Interface)的英文缩写,主要任务是负责系统与绘图程序之间的信息交换,在本发明实施例中,打印驱动程序的GDI驱动程序用于处理打印驱动程序的图形和图像输出。
所以,在获取到应用程序中的待打印数据之后,电子设备可以控制其内部的打印驱动程序将待打印数据进行输出,而执行这一任务的是打印驱动程序中的GDI驱动程序。打印驱动程序中的GDI驱动程序可以将应用程序中的待打印数据输出为EMF格式文件。
具体地,所述GDI驱动程序包括打印图形DLL,可以基于所述待打印数据,控制所述打印图形DLL将DrvEnablePDEV过程中Windows定义的API的参数DEVINFO *pdi中的成员变量FLONG flGraphicsCaps中包含的GCAPS_ALTERNATEFILL(0x00000004)值清除,然后,可以控制打印驱动程序中的GDI驱动程序将所述待打印数据输出为所述EMF文件。
S222.将所述EMF文件渲染为图片文件;
在打印驱动程序中的GDI驱动程序将待打印数据输出为EMF格式文件之后,电子设备可以将所述EMF文件发送到系统的假脱机程序中缓存,然后再通过假脱机程序中的EMF打印处理器将所述EMF文件渲染为图片文件。
步骤“通过假脱机程序中的EMF打印处理器将所述EMF文件渲染为图片文件”,可以具体包括:
在所述EMF打印处理器中注入PrintDocumentOnPrintProcessor驱动程序来监控并处理所述EMF文件。即对于缓存在假脱机程序中的EMF文件,使用所述EMF打印处理器中注入PrintDocumentOnPrintProcessor模块的驱动程序来实现监控并处理这些数据。
具体为监控打印处理器句柄中的uDatatype变量,当所述EMF打印处理器识别出所述EMF文件中的EMF Spool数据时,使用Readprinter函数来读取EMF Spool数据,并将所述EMF Spool数据提取出来。然后控制所述EMF打印处理器将监控后以及处理后的EMF文件渲染为图片文件,处理后的EMF文件即为EMF Spool数据。
对于上述步骤中取出的EMF Spool数据,可以将其解析成单独的EMF API函数后,再使用PlayEnhMetaFile函数将EMF API函数还原成图片文件。
S223.控制打印驱动程序将所述图片文件转换为预览图像。
通过实现部分EMF打印处理器接口函数以及参照当前的打印设置,EMF打印处理器将图片文件发送至打印驱动程序,然后打印驱动程序将图片文件转换为预览图像。
S23.将所述预览图像发送至所述应用程序,使所述应用程序在预览界面中显示所述预览图像。具体内容请见上述实施例步骤S13的具体描述,在此不再赘述。
在本发明实施例中,由于部分应用程序没有设置预览功能,是因为生产该应用程序的厂家没有做预览功能,或者是没有能力做预览功能,所以本技术方案通过在打印驱动程序上设置通讯接口,应用程序可以通过该通讯接口与本技术方案中的打印驱动程序建立通讯协议,从而打印驱动程序可以直接在应用程序上响应于打印指令和预览指令。当用户想要对待打印文件进行打印和预览,用户可以在电子设备中选中执行该打印驱动程序的打印机,然后打印驱动程序在响应于打印指令和预览指令之后,直接生成预览图像,并将该预览图像发送至打印驱动程序生成的预览界面中,从而能够让用户实时了解到待打印文件的预览图像。
并且,该应用程序可以为预设的应用程序,预设的应用程序与打印驱动程序之间原本就设置有默认的通讯协议,从而无需额外地通过该通讯接口与本技术方案中的打印驱动程序建立通讯协议,能够大幅缩短预览图像的生成时间,提高工作效率。
如此设置,能够使用户预览各种应用程序中所有待打印文件的打印预览图像,而并不仅仅限制于解析特定格式的文档类型。并且,该打印预览方法能够向所有应用程序提供调用接口,实现在各类应用程序中显示打印预览。
实施例3
如图3所示,本发明实施例提供了一种基于GDI框架的打印预览方法,该打印预览方法具体包括以下步骤:
S31.响应于打印指令和预览指令,获取应用程序中待打印数据;
在本发明实施例中,步骤S31可以具体包括:
S311.响应于所述打印指令,判断是否接收到所述预览指令;
首先,在用户使用电子设备上的应用程序想要进行打印时,需要点击应用程序上的“打印”按钮,从而向电子设备下发打印指令。电子设备在接收到打印指令之后,生成预览界面的弹窗,用户可以在弹窗中对打印参数进行设置。这些打印参数可以在每一个要打印的文档中被修改。如打印的份数、双面打印、纸张大小、纸张来源、色彩模式、打印分辨率、方向和缩放等。
在用户对打印参数设置完毕之后,用户可以根据自身的实际需求选择是否进行预览。
S312.当接收到所述预览指令时,控制所述打印驱动程序显示所述预览界面,获取所述待打印数据。
如果用户想要对待打印文件的预设打印情况进行预览的话,用户可以点击应用程序上的“预览”按钮,从而向电子设备下发预览指令。电子设备在接收到打印指令之后,获取应用程序中待打印文件的待打印数据。
在本发明实施例中,步骤S312中的“所述获取所述待打印数据”,具体包括:
S3121.获取待打印文件的预览内容,所述预览内容包括至少一个预览页码以及与所述预览页码相对应的预览信息;
先获取应用程序中待打印文件的所有预览内容,预览内容为用户想要在待打印文件中预览的具体预览页码以及与该预览页码相对应的预览信息。
例如,待打印文件一共十页,用户想要预览第六页和第七页,那么电子设备会获取应用程序中第六页和第七页的具体内容,该具体内容为与预览页码相对应的预览信息。
S3122.根据所述预览页码以及所述预览信息,生成所述待打印数据。
待用户确定具体的预览页码以及预览信息之后,根据具体的预览页码以及预览信息生成待打印数据。
如此设置,相较于现有技术中渲染完所有页面后确认打印,用户可以同时根据自身实际需求选择实施预览的页数,从而无需渲染完所有的页面再执行后续的打印程序,能够明显提高预览速度,从而节省了预览时间,提升了用户体验。
当然,在本发明实施例中,步骤S31还包括:
S313.当未接收到所述预览指令时,控制操作系统的GDI驱动程序将所述待打印数据输入到所述操作系统的GDI渲染引擎进行渲染。
当未接收到所述预览指令时,电子设备直接控制操作系统的GDI驱动程序将所述待打印数据输入到所述操作系统的GDI渲染引擎进行渲染,并进行后续的打印操作。
S32.将所述待打印数据输出为EMF文件,并将所述EMF文件渲染为预览图像;具体内容请见上述实施例步骤S32的具体描述,在此不再赘述。
S33.将所述预览图像发送至所述应用程序,使所述应用程序在预览界面中显示所述预览图像。具体内容请见上述实施例步骤S33的具体描述,在此不再赘述。
如此设置,能够预览各种应用程序中所有待打印文件的打印预览图像,而并不仅仅限制于解析特定格式的文档类型。并且,该打印预览方法能够向所有应用程序提供调用接口,实现在各类应用程序中显示打印预览。
实施例4
本发明实施例还提供了一种基于GDI框架的打印预览装置,该打印预览装置包括:
获取模块,用于响应于打印指令和预览指令,获取应用程序中待打印数据;具体内容请见上述实施例步骤S11的具体描述,在此不再赘述。
处理模块,用于将所述待打印数据输出为EMF文件,并将所述EMF文件渲染为预览图像;具体内容请见上述实施例步骤S12的具体描述,在此不再赘述。
输出模块,用于将所述预览图像发送至所述应用程序,使所述应用程序在预览界面中显示所述预览图像。具体内容请见上述实施例步骤S13的具体描述,在此不再赘述。
如此设置,能够预览各种应用程序中所有待打印文件的打印预览图像,而并不仅仅限制于解析特定格式的文档类型。并且,该打印预览方法能够向所有应用程序提供调用接口,实现在各类应用程序中显示打印预览。
实施例5
本发明实施例还提供了一种电子设备,该电子设备包括:存储器和处理器,所述存储器和所述处理器之间互相通信连接,所述存储器中存储有计算机指令,所述处理器通过执行所述计算机指令,从而执行上述任一实施例所述的基于GDI框架的打印预览方法。
具体地,在本发明实施例中,所述电子设备可以为打印机,可以为显示器与打印机的打印系统,还可以为电脑整体与打印机组成的打印系统。当然,本领域技术人员可以根据实际情况对电子设备的具体类型进行改变,本实施例仅仅是举例说明,并不加以限制,能够起到相同的技术效果即可。
在本发明实施例中,处理器可以为中央处理器(Central Processing Unit,CPU)。处理器还可以为其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等芯片,或者上述各类芯片的组合。
存储器作为一种非暂态计算机可读存储介质,可用于存储非暂态软件程序、非暂态计算机可执行程序以及模块,如本发明实施例中的预览方法对应的程序指令/模块。处理器通过运行存储在存储器中的非暂态软件程序、指令以及模块,从而执行处理器的各种功能应用以及数据处理,即实现上述方法实施例中的预览方法。
存储器可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储处理器所创建的数据等。此外,存储器可以包括高速随机存取存储器,还可以包括非暂态存储器,例如至少一个磁盘存储器件、闪存器件、或其他非暂态固态存储器件。在一些实施例中,存储器可选包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至处理器。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
所述一个或者多个模块存储在所述存储器中,当被所述处理器执行时,执行上述实施例中任一项预览方法。
上述电子设备具体细节可以对应参阅上述任一实施例中对应的相关描述和效果进行理解,此处不再赘述。
显然,上述实施例仅仅是为清楚地说明所作的举例,而并非对实施方式的限定。对于所属领域的普通工人来说,在上述说明的基础上还可以做出其它不同形式的变化或变动。这里无需也无法对所有的实施方式予以穷举。而由此所引伸出的显而易见的变化或变动仍处于本发明创造的保护范围之中。