一种生成PDF文件的装置和方法
技术领域
本发明涉及计算机应用领域,尤其涉及一种计算机中文件类型转换的装置和方法。
背景技术
PDF是一种文件格式的名称,该文件格式由美国Adobe公司发明,全称为Portable Document Format,简称为PDF。
计算机已经渗透到我们工作和生活的方方面面,其中一个重要的领域就是日常办公,典型的,包括文字处理、电子表格应用和电子演示应用。用户编辑处理的各种数据,最终都以文件的形式保存下来,以便继续编辑、相互交换、归档保存,等等。通常,应用程序都使用开发商自己定义的文件格式来保存数据,对字处理软件而言,“所见即所得”已经成为一个必备的标准功能,即,用户在打印机上的输出结果与他在计算机屏幕上看到的效果是一致的。当文件编辑完成,在不同用户、不同计算机之间传送、分发时,文件的作者(或有关机构)显然也希望甚至要求无论在哪台计算机上,文件的展示效果都是完全相同的,与它最初编辑完成时的展示效果保持一致。这是种完全正常与合理的需求。但是,如果采用应用程序自有的格式进行存盘,这种需求通常却很难满足:同样的文件,在不同的计算机上得到的展示结果未必是相同的,这就是所谓的“跑版”。典型的跑版现象包括:在一台计算机上,某个字排在一行的行尾,在另一台计算机上,却排在了下一行的行首;在一台计算机上,文件的排版结果是总共15页,在另一台计算机上却变成了16页。在正式的应用场合,如政府文件下发、商业合同交换时,这种跑版现象是完全不能接受的。
造成跑版的根本原因在于,应用程序使用自己的文件格式通常只保存了用户的原始数据,而排版工作是在文件编辑处理过程中动态进行的,许多因素都会对最终的排版结果造成影响,例如:操作系统的不同、操作系统中安装的字体的不同、操作系统中安装的打印机及其驱动程序的不同、操作系统中安装的显卡及其驱动程序的不同,等等。因此,在不同的环境下要实现完全相同的排版结果,事实上极其困难,有时甚至是不可能的。
有鉴于此,出现了一种特殊的文件格式:Portable DocumentFormat,简称PDF。采用这种格式,配合Acrobat系列产品,就能做到任何一份PDF文件,无论在哪一台计算机上打开,都能获得完全相同的展示结果。当然,前提条件是在该计算机上可以运行Acrobat系列产品。由此,通过将文件以PDF格式保存,保证了文件在分发传送后展示效果的一致性,杜绝了跑版现象的产生。之所以能做到杜绝跑版,是因为在PDF文件中保存的并非用户的原始数据,而是最终的排版结果。例如:在PDF文件中记录了每个字在页面上的精确位置。同时,PDF文件格式还采取了许多其他措施,例如将用户用到的字体嵌入到文件之中,等等,来确保文件展示效果的一致性。因为这种特性,PDF格式的使用越来越广泛,已经成为事实上的行业标准,许多应用程序,尤其是字处理程序,都在用户的要求下增加了对PDF文件格式的支持,以便用户将编辑的文件保存为PDF格式。
目前,有两种可能的方法用于生成PDF文件。第一种方法,是由应用程序直接生成PDF文件。这种方法从逻辑上讲最简单直接,易于理解。但是,因为PDF格式事实上非常复杂,要直接生成PDF文件,就必须首先详细了解PDF格式的每一个细节,然后设计编写专用程序模块,用于生成PDF格式文件。这涉及庞大的工作量,对任何一个软件开发商而言都是一种难度极大,并且不太符合经济效益的做法。所以,这种方法事实上极少采用。
第二种方法,是安装一个PDF文件打印程序。虽然这仅仅是个软件,但通常习惯上都将其称作PDF打印机。从用户的角度看,通过打印的形式将文件保存为PDF格式。具体的,是在开始打印时,用户不选择通常使用的普通打印机,而是在列表中选择PDF打印机,然后开始打印。这时,与PDF打印机对应的程序就会弹出对话框,要求用户告知要将被打印的内容保存为什么名字的PDF文件,在得到用户的反馈之后,即开始数据转换工作。最终,用户得到与打印内容对应的PDF文件。此方法所涉及的PDF打印程序可以由应用程序额外提供,也可以由用户自行安装,相当灵活。相对于第一种方法,这种方法的优点在于,应用程序本身无需理解PDF文件格式,无需进行额外工作,只需使用程序内部已有的打印模块,就能最终生成PDF文件。事实上,整个过程对应用程序而言是完全透明的,在应用程序看来,整个过程只是在进行一次普通的打印操作,完全不知道最终其实生成了一个PDF文件。这既是此方法的优点,另一方面,也成为其缺点。因为应用程序未做任何其他操作,因此,只能生成一个简单的PDF文件,其中只能包括基本的文字、图像和表格等数据,进一步的内容,如从目录/脚注/尾注到正文之间的链接、文件内部/文件之间的相互引用链接、指向互联网的超链接等等,都无法实现。
发明内容
本发明克服了现有技术中的不足,提供一种生成PDF文件的装置和方法,应用该装置和方法生成的PDF文件可有效确保源文件中的多种功能在PDF文档中的再现。
为了解决上述技术问题,通过以下技术方案实现:一种生成PDF文件的装置,其包括EMF文件生成模块和从EMF文件到PDF文件的转换器;该转换器包括EMF文件处理模块、EMF文件记录遍历模块、从EMF文件到PDF格式转换模块和PDF文件处理模块;上述各模块的数据传输顺序是EMF文件生成模块、EMF文件处理模块、EMF文件记录遍历模块、从EMF文件到PDF格式转换模块、PDF文件处理模块;另外,PDF文件处理模块提供函数接口给应用程序,以便应用程序向PDF文件中添加其他数据。
一种使用前述装置生成PDF文件的方法,其包括如下过程:a.应用程序调用操作系统提供的函数接口,以页为单位将排版结果保存为EMF格式文件,每一页对应生成一幅EMF图像;b.从EMF文件到PDF文件的转换器打开此EMF文件,从中逐条读出对操作系统函数接口(API)的调用,按照PDF格式的标准进行转换;当全部函数调用处理完毕之后,该EMF文件即被转换成为PDF文件中的一个页面:c.判断是否已经处理完毕用户文件中的全部页面,若否,则回到步骤a,继续将新的一页保存为EMF格式文件;若是,则结束文件转换工作,进入步骤d;d.进行后期处理。
本发明方法的核心在于首先由应用程序根据编辑的内容生成EMF格式文件,然后由专用的转换器将EMF格式转换为PDF格式。目前,有类似的程序将EMF文件转换为PDF文件,但是在转换过程中仅仅将EMF整个做为一个图像来处理,这样,无论在EMF中原来包含什么样的文字、表格等数据,在转换成PDF文件后,都整个变成一幅大的图片,不可能再对内部的内容进行操作,并且在打印输出时还会出现严重的锯齿现象,这些都是用户无法接受的。而本发明装置和方法因为是逐条对EMF文件进行详细处理,因此,在转换出的PDF文件页面中,用户的数据保留了其原本的各种属性,例如字体、字号、颜色、字间距、行间距,线长、线宽、线型,等等。使用相关的PDF编辑软件,用户可对这些内容进行进一步的编辑加工。
附图说明
图1是一幅典型的EMF图像;
图2是EMF文件的结构图;
图3是本发明生成PDF文件方法流程图;
图4是本发明生成PDF文件装置结构及内部关系图。
具体实施方式
首先介绍本发明涉及的中间文件EMF文件,EMF格式是由Windows操作系统提供的一种标准文件格式,其全称为EnhancedMeta File,简称EMF。通过调用操作系统的相关函数接口(API),应用程序可以简便快捷的生成EMF文件。EMF格式是在早期的WMF格式基础上发展而来的。WMF是Windows Meta File的简称。在对其功能进行增强后,形成了EMF格式。在下文中,仅围绕EMF格式来进行阐述,但所述的内容、方法和装置,同样适用于WMF格式。
从应用的角度看,EMF与JPG、GIF等格式一样,是一种图像文件格式,各种常用的文字处理/图像处理/浏览软件,都支持这种格式,能对EMF图像进行观看浏览甚至编辑。EMF与普通图像文件的根本不同之处在于,普通图像文件内部保存的是点阵数据,而EMF是一种矢量图像格式,文件内部保存的是一系列对Windows操作系统函数接口(API)的调用,具体的说,是对Windows操作系统中图像设备接口(GDI API)的调用。Windows内部提供的EMF处理模块,既用于生成EMF文件,也用于逐条处理EMF文件中的相关系统函数调用,从而重新绘制出对应的图像。所以说,EMF是一种矢量图像格式,这也是它被称为meta file,即元文件的原因。
附图1所示是一幅典型的EMF图像,包含了一段文字,一个椭圆和一个矩形。附图2所示是一个EMF文件的结构。一个EMF文件由文件头和文件体两部分组成。在文件头中,给出了EMF文件的大小、版本、所含记录数等数据。文件体由若干条记录和最后的结束标记组成。根据EMF图像内容的复杂程度不同,文件体中的记录数可能少至几条,多至上万条甚至更多。每一条记录相当于一条指令,都是对Windows操作系统中图形设备接口的一个函数调用(GDI APIcall)。典型的,如附图1所示的EMF图像,在对应的EMF文件体中包含了3条记录,可用伪代码表示如下:
1:Rectangle(hDC,10,50,149,149);
2:Ellipse(hDC,100,10,249,99);
3:ExtTextOutW(hDC,120,120,0,NULL,_T(″Hello,World!″),13,lpDx);
其中,第一条记录绘制出一个矩形,第二条记录绘制出一个椭圆,最后一条记录绘制出一段文字。在EMF之前的WMF,其格式与上述有所不同。
本发明生成PDF文件的装置,其结构如附图4所示,在此装置中,模块(1)是EMF文件生成模块。该模块的输入数据为应用程序为绘制排版结果而发出的一系列Windows操作系统图形设备接口函数调用(GDI API calls),输出数据为EMF文件。模块(1)的功能是将用户数据的排版结果以EMF文件的型式保存下来,每一页数据保存为一个EMF文件。应用程序通过多次调用模块(1),将用户数据的排版结果保存为若干的EMF文件。模块(2)是EMF文件处理模块。该模块的输入数据为EMF文件,输出数据为一系列供其他模块使用的参数和函数接口。模块(2)的功能是打开EMF文件,读入其中的文件头数据,从而建立对EMF文件的整理管理,并且提供函数接口,以便其他模块从EMF文件中逐条读出记录。模块(3)是EMF文件记录遍历模块。该模块与模块(2)配合,实现将记录从EMF文件中逐条读出的功能。模块(3)的输出数据是从EMF文件中读出的记录。模块(4)是从EMF到PDF的格式转换模块。该模块的输入数据为EMF文件中的记录,输出数据为已经转换完毕、符合PDF格式标准的数据。该模块是本装置的核心模块,其功能是完成从EMF文件到PDF文件的模式转换。模块(5)是PDF文件处理模块。该模块的功能包括:第一、创建空白的PDF文件,以便向其中添加页面等内容,管理建立一个完整的PDF文件的全过程;第二、创建空白的PDF页面,以便向其中添加文字、图像、表格等内容,管理建立一个完整的PDF页面的全过程;第三、接受由外部模块传入的数据,添加到PDF页面或PDF文件中。第四、接供函数接口(API)给应用程序,以便应用程序向PDF文件中添加其他数据,实现高级的、特殊的功能,例如:生成文章目录/脚注/尾注并保持与正文之间的链接关系,生成批注,等等。由模块(2)到模块(5),构成了从EMF文件到PDF文件的转换器。由模块(1)和转换器,构成了完整的转换装置。从EMF到PDF的转换器每次可将一个EMF文件转换为PDF文件中的一个页面。通过多次使用模块(1)和转换器,就能将应用程序中的排版结果,即全部页面或用户指定的部分页面,转换成为PDF文件中的页面,从而生成最终的PDF文件。
在本装置中,最核心的部份是模块(4),即“从EMF到PDF的格式转换模块”。其功能是将EMF文件内部的数据格式转换为符合PDF标准的数据格式。具体的数据格式转换子模块,可以由开发者自行编写,也可以在Adobe公司提供的PDF开发包的基础上编写,也可以在第三方提供的PDF开发包的基础上编写,方法灵活多样。
在具体实现时,模块(1)生成的EMF文件可以是一个磁盘文件,保存在由操作系统或应用程序指定的临时文件夹中,做为从EMF文件到PDF文件转换器的输入数据。模块(1)生成的EMF文件也可以是一个内存文件,保存在计算机内存中,做为从EMF文件到PDF文件转换器的输入数据。同样,从EMF文件到PDF文件转换器生成的PDF文件可以是一个磁盘文件,保存在由用户指定的文件夹中,供用户以后使用。从EMF文件到PDF文件转换器生成的PDF文件也可以是一个内存文件,供其他程序做为输入数据进行再加工。从EMF文件到PDF文件转换器生成的PDF文件也可以是一个数据流,采用特定的传输协议,通过互联网由服务器发送到用户的客户端,供用户在网页浏览器中阅读查看。
如附图3所示,本发明提供了一种生成PDF文件的方法,包括以下步骤:第一步,应用程序调用Windows操作系统提供的函数接口(API),以页为单位将排版结果保存为EMF格式文件,每一页对应生成一幅EMF图像。第二步,转换模块打开此EMF文件,从中逐条读出对操作系统函数接口(API)的调用,按照PDF格式的标准进行转换。当全部函数调用处理完毕之后,该EMF文件即被转换成为PDF文件中的一个页面。因为是逐条进行详细处理,因此,在转换出的PDF文件页面中,用户的数据保留了其原本的各种属性,例如字体、字号、颜色、字间距、行间距,线长、线宽、线型,等等。使用相关的PDF编辑软件,用户可对这些内容进行进一步的编辑加工。第三步,判断是否已经处理完毕用户文件中的全部页面。若否,则回到第一步,继续将新的一页保存为EMF格式文件,然后重复第二、第三步;若是,则结束文件转换工作,进入第四步。第四步,进行后期处理。典型的,包括为转换出的PDF文件增加目录内容,等等。后期处理完毕,整个转换工作完成,PDF文件已按用户的要求生成。
本发明方法的核心在于,使用EMF文件格式,做为生成PDF格式文件的中间格式。首先由应用程序根据排版的结果生成EMF格式文件,然后由专用的转换模块将EMF格式转换为PDF格式。这种方法同时兼顾了功能与效率,获得了很好的平衡。一方面,EMF格式是Windows操作系统提供的一种标准格式,应用程序只需进行少量的工作,就能在已有的显示或打印模块的基础上,生成EMF格式文件,从而最终生成PDF格式文件;另一方面,应用程序又能很方便的调用转换模块提供的函数接口(API),在生成的PDF文件中加入各种高级的内容,如从目录/脚注/尾注到正文之间的链接、文件内部/文件之间的相互引用链接、指向互联网的超链接等等。
以上步骤仅用以说明而非限制本发明的技术方案。不脱离本发明精神和范围的任何修改或局部替换,均应涵盖在本发明的权利要求范围当中。