PDF(portable document format)文件已经成为全球电子文档分发的开放式标准,是继PostScript文件格式之后的一种新的输出文件格式。PDF 凭借着它的种种优势,克服了电子文件共享过程中经常遇到的识别问题,使用户可以在网上自由地浏览文件和方便地交换文件,它成为进行现代电子文档分发的理想格式。    在 PDF 文件中存在着大量图像。对 PDF 文件中图像的识别除了具有通常图像识别的意义之外,还具有很多因 PDF文件对网络的强大适应性而产生的意义。网络上对 PDF 文件的搜索已经占了很大的比例,如果要按照 PDF 文件中的图像内容进行搜索,就必须要对图像进行识别。而只有把图像信息从 PDF 文件中提取出来,才能进一步用图像识别软件来识别这些图像。可见,对 PDF 文件中的图像进行提取并转化为可供识别的格式,将促进图像识别和信息处理的发展。  

1 PDF 文件结构 1.1 PDF 文件的组织结构    一个规范的 PDF 文件由 4 部分组成:    (1)头部(header):指明文件所遵从 PDF 的版本。    (2)文件体(body):呈现PDF文档的一系列间接对象组成。    (3)交叉引用表(cross-reference table):在交叉引用表里写出关于文件的间接对象信息。每个间接对象在表中都对应一个项,指明这个对象在文件体中的位置和是否被引用。表中包含一个或多个交叉引用区(cross-reference section)。最初,整个表包含一个(如果是线性文件,则包含两个)交叉引用区,每次更新文件时都增加一个交叉引用区。每个交叉引用区由一个占一行的关键字 xref 开始,该行之后是一个或多个可以按任意次序出现的交叉引用子区(cross-referencesubsection),如图    (4)追踪部分(trailer):追踪部分给出交叉引用表在文件中的位置以及文件体中某些有特殊作用的对象在文件中的位置。追踪部分的结尾是文件结束标志%%EOF。文件结束标志之前是关键字 startxref 和从文件开始到最后一个交叉引用区的关键字 xref 开始处的偏移量。关键字 startxref 之前是追踪字典 (trailer dictionary),由关键字 trailer 和其后的<< >>之内系列关键字值对构成,如图 2 所示。1.2 PDF 文件图像分类      PDF 文件中的图像分为两类:①图像外部对象(XObject):在内容流 (content stream) 之外定义的一个有名字的被引用对象。一个XObject的内部阐述依赖于它的类型;②内嵌图像(in-line image):直接把图像属性和数据嵌在一个内容流里的小图像。能用这种方式呈现的图像种类是有限的,通常该图像大小在 4 KB 之内。

 2 从 PDF 文件中提取可供识别的图像2.1 处理流程      PDF 文件中识别图像的关键是定位图像在 PDF 文件中具体位置,定位的步骤分为独立的6层,层与层之间相互联系,      图 3 从 PDF 文件中找到要处理的图像信息的流程2.2 处理 PDF 文件      处理 PDF 文件的步骤如下:      步骤 1 处理文件头,获得版本信息,判断是否是程序支持的版本。      步骤 2 处理交叉引用表和追踪部分。      步骤 3 处理目录对象。      步骤4 处理页树,用已读出的页根对象标志查对象信息记录表,获得页根对象的偏移,从而在文件中找到页根对象。由页根对象的Count项得到文档中现有页的总数,为页记录表分配空间。页记录表用于在程序中依次记录文档现存各页对应的页对象标志。从页根开始用递归的方法遍历页树并填写页记录如图 4 所示。    步骤5 建立图像对象记录表,图像对象记录表用于在程序中按照图像在文件被浏览时出现的先后顺序记录图像XObject(不包括非识别的缩略图、备用图像或图像遮罩) 的对象标志信息。建立图像对象记录表过程如下:    ?用这个对象标志查对象信息记录表,获得页对象的偏移,从而在文件中找到这个页对象;    ?查看这个页对象中是否写出了资源项;    ?如果写出了资源项,则在资源字典中查看是否有XObject 项,如果存在,查看 XObject 流中是否提及图像对象,并依次把图像对象间接引用中的对象标志填入图像对象的记录表中。    资源项是一个页对象必须具有的,是可以继承的。但这里只在页对象中查找资源项,查找资源项只是为获得一个页中的XObject(一个可选项),而一个页的资源中如果有XObject,这种资源应该是这页独有的资源,不应是继承过来的。PDF文件中若存在缩略图、备用图像或图像遮罩,也可以用图像XObject 描述。这几类图像不是图像识别时所要处理的,所以不应把对应图像 XObject 的对象标志信息存入图像对象记录表。在页对象的资源字典中 XObject 流里列出的 XObject 间接引用里,并不包括对它们的间接引用,所以按所述方法填写图像对象记录表是不会填入图像标志信息的。图像信息表里的图像标志信息,是按浏览器打开文件后,图像在文档中出现的顺序填入。    步骤 6 定位图像,步骤如下:    ?读图像 Xobject;    ?读图象内容,记录图像相关属性 (也包括流数据的长度)、图像数据在 PDF 文件中的偏移量以及所使用的过滤器,如果过滤器有参数,也记录相应的参数。通常,流数据在这里不涉及外部文件;    ?对找到的图像是否能够识别的判断,通常,图像识别对图像的大小有一定的要求,图像的宽、高都要在一定范围内。    对不符合要求的图像不做进一步的处理。有些图像流数据使用的过滤器可能对应声明了版权的压缩和解压缩算法,对于这种情况涉及的图像也不做进一步的处理。PDF 文件处理过程如表 1 所示。

3 图像识别后的处理3.1 转化出可供识别的图像文件    目前,多数图像识别软件可以识别的图像格式有 BITMAP、TIFF 和 JPEG。  (1)如果一个图像 XObject 没有使用过滤器,那么就利用记录的图像对象的属性填写要输出的BITMAP文件的头信息,然后直接把没有经过编码的图像流数据填写到要输出的BIT-MAP 文件中相应的图像数据区域。  (2)如果图像 XObject 使用了过滤器,那么输出可供识别的图像文件有两种途径:    ?全解码法:利用记录的图像对象的属性填写要输出的BITMAP文件的头信息,用过滤器所指定的解码算法把图像数据流解码,用解码后的图像流数据填写输出文件中的图像数据区;    ?选择解码法:有些过滤器对应于图像识别软件所能识别的图像格式所采用的压缩算法。    如果图像对象使用的是这种过滤器时,可不做数据解码。根据这种过滤器的类型,决定输出文件类型,利用记录的图像信息,填写这种格式输出文件的头和涉及的其它信息表,将没有经过解码的图像流数据,直接填写到输出图像文件数据区中。如果过滤器不对应于识别软件所能识别的文件压缩算法,那么就采取解码输出 BITMAP 的方式。3.2 可供识别的图像文件的制作过程    本示例 将要讲述 当一个 要处理的 图像 XObject 使 用CCITTFaxDecode作为过滤器时如何制作可供识别的输出文件。    PDF 中使用的 CCITTFaxDecode 过滤器对应于用 Group 3或 Group 4 CCITT 编码的数据。这些标准恰好包括在 TIFF 格式图像文件所采用的压缩算法中。对于这种情况既可以采取完全解码法,又可以采取选择解码法。本示例采用选择解码法对输出图像文件进行制作,其中涉及到 TIFF 6.0 图像文件的格式。3.3 制作可供识别的输出文件    制作可供识别的输出文件,步骤如下:    步骤 1    写文件头。①写 49H 49H 42H 00H 到第 0~3 字节,表示采用低位字节在前的方式写 TIFF 文件,并与以前版本兼容。②下 4 个字节写 IFD 的偏移量,其值可用下面的式子指定:    IFD 的偏移量 = 8 + 图像流数据长) + 1)>> 1 << 1                    ((    其中的移位运算是为了保证 IFD 开始于字边界。    步骤 2 写图像数据。把 PDF 中图像流数据写到输出文件中(从第 8 个字节处开始写)。    步骤 3 填写 IFD。根据 IFD 偏移量,把输出文件的读写指针移动到 IFD 的开始位置。在开始的两个字节写入一个hort 型的 B,表示要写 11 个标签。TIFF 中有很多种标签,但是写入这里所列出的 11 个标签就可以正确显示出图像。要根据已记录的图像属性及过滤器参数填写如下标签    ImageWidth ImageLength Compression PhotometricInterpre-ation StripOffsets RowsPerStrip StripByteCounts XResolutionYresolution T4Options 或 T6Options) ResolutionUnit 注意,写                    (                              (入 4 个字节的 0 表示没有下一个 IFD。              )

4 结束语    PDF 文件中可以使用多种过滤器,但是有些过滤器的编码解码算法涉及版权,比如 LZWDecode。所以对于使用这类过滤器的图像就无法通过解码的方式来提取出可供识别的图像文件。    虽然 PDF 文件允许使用多种过滤器,但实际上各种过滤器通常有比较固定的应用场合,有些过滤器很少用于处理图像流数据。通常情况下使用 CCITTFaxDecode 或 DCTDecode两种过滤器处理来图像流数据。

 

这应该是《 PDF 文件中可识别图像的提取(Extraction of recognizable images from PDF file)》书中的  可是我找不到免费的这本电子书,要是有朋友找到请告诉我一声!