发明内容
针对现有技术中存在的缺陷,本发明的目的是提供一种通过虚拟打印实现文档格式转换的方法及系统,该方法及系统能够自动合并打印机语言描述的不断重复的页面对象、上下相邻的等宽和左右相邻等高的页面对象数据,从而实现加速目标文件生成、减小目标文件大小和目标文件能在相应的阅读器中被快速显示的目的。
为达到以上目的,本发明采用的技术方案是:一种通过虚拟打印实现文档格式转换的方法,包括以下步骤:
(1)虚拟打印机将读取的原格式文档生成由打印机语言描述的中间文件;
(2)合并打印机语言描述的复杂页面元素数据;
(3)将打印机语言描述的中间文件转换成目标格式文档。
进一步,所述的打印机语言是Postscript语言或PCL语言。
所述的复杂页面元素包括复杂背景图案、花边和艺术字。
进一步,步骤(2)中合并打印机语言描述的复杂页面元素数据包括以下步骤:
1)合并描述“等宽等高且内容数据相同的页面图元对象”的数据;
2)合并描述“等宽且上下相邻的页面图元对象”的数据;
3)合并描述“等高且左右相邻的页面图元对象”的数据。
更进一步,步骤1)中,将宽和高分别为wid和hei且内容数据相同的页面图元对象描述的数据,按照m行n列排列,合并成一个宽wid*n,高hei*m的大页面图元对象的数据,m和n均为正整数。
再进一步,步骤1)中,将描述宽和高分别为wid和hei且内容数据相同的页面图元对象的小图像或小路径的双层循环的外层循环上限值设为合并后的大图的宽,将内层循环上限值设为合并后的大图的高;外层循环每次增加的步长为小图像的宽度,内层循环每次增加的步长为小图像的高度,小图像之间的偏移量就是当前的循环控制变量。
进一步,步骤2)中,将宽相同且上下相邻的图元对象合并成大的图元对象,并直接用合并后的大图元对象来描述此等宽且上下相邻的页面图元对象。
进一步,步骤3)中,将高相同且左右相邻的图元对象合并成大的图元对象,并直接用合并后的大图元对象来描述此等高且左右相邻的页面图元对象。
进一步,每次存储解析出的新的图元对象A时,先遍历“已处理图像信息列表”中的全部图元对象,如果发现等宽且位置上下相邻的图元对象B或等高且位置左右相邻的图元对象B,则将图元对象A与图元对象B合并,得到新对象C,并将对象B从“已处理图像信息列表”中删除,同时,将C添加进“已处理图像信息列表”中。
一种通过虚拟打印实现文档格式转换的系统,包括以下模块:
(1)读取模块:用于将虚拟打印机读取的原格式文档生成由打印机语言描述的中间文件;
(2)合并模块:用于合并打印机语言描述的复杂页面元素数据;
(3)转换模块:用于将打印机语言描述的中间文件转换成目标格式文档。
进一步,所述的合并模块中还设有以下子模块:
1)用于合并描述“等宽等高且内容数据相同的页面图元对象”的数据的子模块;
2)用于合并描述“等宽且上下相邻的页面图元对象”的数据子模块;
3)用于合并描述“等高且左右相邻的页面图元对象”的数据子模块。
本发明的效果在于:采用本发明所述的方法,可以自动合并打印机语言描述的不断重复的页面对象、上下相邻的等宽和左右相邻等高的页面对象数据,从而达到加速目标文件生成、减小目标文件大小和目标文件能在相应的阅读器中被快速显示的效果,有效地解决了现有技术中包含过多小图像的电子文档所存在的体积过大、转换速度和显示速度过慢的问题。
本发明之所以具有上述显著的技术效果,其原因在于:
1、本发明所述的方法通过将大量的小图像合并,生成新的少量的大图像,则在新文档格式中,仅保存这些少量的大图像,少量的大图像占用的描述信息将大幅减少,从而减小了目标格式的电子文档的数据量。
2、本发明将循环处理小图像的过程变为一步处理一个大图像的过程,从而大幅提高目标格式的电子文档的生成速度。
3、因为目标文档格式中仅含有少量的大图像,因而大幅提高了该电子文档的显示速度。原本大量小图像的显示,变为一幅大图像的显示。
具体实施方式
下面结合说明书附图对本发明作进一步的描述。
一种通过虚拟打印实现文档格式转换的系统,包括以下模块:
(1)读取模块:用于将虚拟打印机读取的原格式文档生成由打印机语言描述的中间文件;
(2)合并模块:用于合并打印机语言描述的复杂页面元素数据;
(3)转换模块:用于将打印机语言描述的中间文件转换成目标格式文档。
所述的合并模块中还设有以下子模块:
1)用于合并描述“等宽等高且内容数据相同的页面图元对象”的数据的子模块;
2)用于合并描述“等宽且上下相邻的页面图元对象”的数据子模块;
3)用于合并描述“等高且左右相邻的页面图元对象”的数据子模块。
本系统在工作时,先由读取模块将虚拟打印机读取的原格式文档生成由打印机语言描述的中间文件;然后由与其相连的合并模块对打印机语言描述的复杂页面元素数据进行合并处理;最后由与合并模块相连的转换模块将打印机语言描述的中间文件转换成目标格式文档,得到的目标格式文档可以存档或输出。
如图4所示,一种通过虚拟打印实现文档格式转换的方法,包括以下步骤:
一、虚拟打印机将读取的原格式文档生成由打印机语言描述的中间文件S41,所述的打印机语言包括Postscript语言或PCL语言等,本实施例中采用的是Postscript语言。
二、合并打印机语言描述的复杂页面元素数据S42,具体包括以下步骤:
1)合并描述“等宽等高且内容数据相同的页面图元对象”的数据;
2)合并描述“等宽且上下相邻的页面图元对象”的数据;
3)合并描述“等高且左右相邻的页面图元对象”的数据。
本实施例中,所述的复杂页面元素(页面图元对象)包括复杂背景图案、花边和艺术字。合并重复的或者上下相邻等宽和左右相邻等高的页面图元对象。在实际文档转换中,大多数页面图元对象都是以小图像形式存在。以合并打印机语言描述的小图像为例,合并操作包括以下步骤:
1.合并等宽等高且内容数据相同的图像。
一般地,当原始文档中含有复杂页面对象时,虚拟打印机将用大量的简单的小图像或小路径来描述这些复杂的页面对象。在打印机语言描述这些小图像或小路径的时候,将会有一个双重循环的描述,可将这个双层循环的外层循环上限值设为合并后的大图的宽,将内层循环上限值设为合并后的大图的高;外层循环每次增加的步长为小图像的宽度,内层循环每次增加的步长为小图像的高度。小图像之间的偏移量,就是当前的循环控制变量。
当解析到打印机语言描述的双重循环结构时,要对该循环的操作类型进行检查。如果判断出当前循环操作是将同一小图像在某一区域循环显示的操作,则当前循环的描述可以合并起来。做法是:去除外层的双重循环,将描述的小图像数据的属性换成合并后的大图像的属性。原描述信息中的小图像的长和宽,换成合并后的大图像的长和宽,也就是原外层循环的两个上限值。另外,还要将原描述的坐标系按照小图像尺寸的拉伸变化,换成按照大图像尺寸的拉伸变化。原来的第一个小图像的坐标原点就是合并后的大图像的坐标原点。
本实施例中,如图1所示,图1是对等宽等高内容数据相同的小图像合并的流程图。
下面以打印机语言为Postscript的中间文件中的图像描述为例:将等宽等高内容相同的小图像在双重循环中描述的语句转换为一个大图像描述的语句,并对小图像数据做合并处理,合并成大图像的图像数据。
在解析到Postscript文件的双重for语句时,将双重循环的两个上限值预设为小图像合并成大图像后的宽wid1和高hei1。
验证双重for循环之中的执行语句是否是如"{1 index gsave translatescaleX scale Y scale wid hei true[wid 0 0-hei 0 hei]ds imagemask grestore}"的形式。如果符合此条件,则可按以下方法拼图。
101用双重循环中的上限值(预设大图的宽wid1和高hei1),修改原执行语句为"{gsave wid1 hei1 scale wid1 hei1 true[wid1 0 0-hei1 0 hei1]dsimagemask grestore}" 。其中ds中储存有原来的小图图像数据。
102当执行到imagemask语句,先从ds中读取出小图像的图像数据,将小图像的图像数据根据合并算法合并为大图像的图像数据。
本实施例中,合并“等宽等高且内容数据相同的图像”的具体算法如下:
定义:以左上角为坐标原点,小图像的内容数据以打印机语言描述的方法存储在一维数组中。
N为某常量,宽和高分别为a位和b位的小图像必须是N的倍数,一行共a/N个字符,一共有b行。整个小图像就包含a*b/N个字符宽度。本实施例中,常量N的取值为8。
宽和高分别为m位和n位的大图像必须是N的倍数,一行共m/N个字符,一共有n行,整个大图就包含m*n/N个字符宽度。
大图像中任何位置的图像数据都要和小图像中的某个图像数据对应。因为在打印机语言描述中,有两重循环控制了小图在x和y轴上的偏移量,使小图像不断重复,无缝地组成大图像,所以大图像中坐标为(i,j)的点,对应到小图中的点的坐标就是(i%a,j%b)。
大图像数据的数组下标,可以用两个循环变量控制,一个代表列数i,i的范围从0到m/N-1,一个代表行数j,j的范围从0到N-1。则大图像中某点的数组下标就是j*(m/N)+i,那么对应到小图像数据的数组下标,就是j%b*(a/N)+i%(a/N)。合并成大图像数据后,可遍历“已处理图像信息列表”,“已处理图像信息列表”是将已解析了的图像存放起来,以便进一步做合并操作。如果在“已处理图像信息列表”中,有与其宽相同,上下相邻的图像,则进入下一步的合并处理。
2.合并等宽上下相邻的图像。
2.1符合合并操作的“等宽上下相邻的图像”的检查。
在将当前的图像A存入“已处理图像信息列表”之前,先要检查该图像A与“已处理图像信息列表”中各图像之间的关系,检查是否有和当前图像A等宽且上下相邻的图像。如果存在这样的图像B,则可将图像A和图像B合并成图像C。
2.2合并“等宽上下相邻的图像”的方法。
如果图像A和图像B宽相等,且上下相邻,可将位于下面的图像数据添加到位于上面的图像数据之后,形成图像C。图像C的坐标原点为位于上面的图像的坐标原点,图像C的宽度等于图像A的宽度,图像C的高度等于图像A的高度加上图像B的高度。图像C的数据长度为图像A与图像B的数据长度之和。同时,将图像B从“已处理图像信息列表”中删除,将图像C添加到“已处理图像信息列表”中。
如图2所示,图2是对等宽且上下相邻的小图像合并的流程示意图。
等宽且上下相邻的小图像合并的流程如下:
201当解析到Postscript文件的图像描述语句的时候,获得当前需要处理的图像A的数据。
202检查图像A和“已处理图像信息列表”中的各个图像是否等宽且上下相邻,即在垂直方向是否可以合并,如果是则转入步骤203;否则,转入步骤205。
203得到满足在垂直方向可以与图像A合并的图像B,将位于下面的图像数据添加到位于上面的图像数据之后即可,形成新的图像C。
204将新的图像C添加进“已处理图像信息列表”,同时将图像B从“已处理图像信息列表”中删除。
205将图像A直接添加进“已处理图像信息列表”,同时将图像B从“已处理图像信息列表”中删除。
3.合并等高左右相邻的图像。
3.1符合合并操作的“等高左右相邻的图像”的检查。
在将当前的图像A存入“已处理图像信息列表”之前,先要检查该图像A与“已处理图像信息列表”中各图像之间的关系,检查是否有和当前图像A等高且左右相邻的图像。如果存在这样的图像B,则可将图像A和图像B合并成图像C。
3.2合并“等高左右相邻的图像”的方法。
如果图像A和图像B高相等,且左右相邻,可将图像A和图像B的图像数据合并,形成图像C。图像C的坐标原点为位于左边的图像的坐标原点,图像C的宽度等于图像A的宽度加上图像B的宽度,图像C的高度等于图像A的高度。图像C的数据长度为图像A与图像B的数据长度之和。同时,将图像B从“已处理图像信息列表”中删除,将图像C添加到“已处理图像信息列表”中。
如图3所示,图3是对等高且左右相邻的小图像合并的流程示意图。
等高且左右相邻的小图像合并的流程如下:
301当解析到Postscript文件的图像描述语句的时候,获得当前需要处理的图像A的数据。
302检查图像A和“已处理图像信息列表”中的各个图像是否等高且左右相邻,即在水平方向是否可以合并,如果是则转入步骤303;否则,转入步骤305。
303得到满足在水平方向可以与图像A合并的图像B,将图像A的数据与图像B的数据合并,形成新的图像C。
304将新的图像C添加进“已处理图像信息列表”,同时将图像B从“已处理图像信息列表”中删除。
305将图像A直接添加进“已处理图像信息列表”,同时将图像B从“已处理图像信息列表”中删除。
三、将打印机语言描述的中间文件转换成目标格式文档S43。
通过上述实施例可以看出,本发明所述的方法将打印机语言描述的有规则分布的小图像或小路径进行预先合并处理,则转换成目标格式后,将会明显降低描述这些页面元素对象的个数,最终目标格式文件的体积将会减小,显示目标格式文件的速度将大幅提高。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其同等技术的范围之内,则本发明也意图包含这些改动和变型在内。