无法从特定 PDF 中提取文本和图像

Unable to extract text and images from specific PDF

谁能告诉我如何从 PDF 中提取所有文本和图像。我能够在类似场景中提取图像,我使用 Google Docs 创建了一个包含几行文本的 PDF 和 2 个 png 图像。但是,我无法从样本 pdf.

中提取图像

我试过以下方法:

在Ruby中:

1) "pdf-reader" gem, 仅支持提取少数格式的图片

2)"docsplit"gem,只能提取文字,不能提取图片

命令行实用程序:

1) "pdfimages"工具,只支持提取少数格式的图片

Java图书馆:

1) "pdfbox" 库,仅支持提取少数格式的图片。

1.

提取文本:

pdftotext -layout the.pdf -

将所有页面的文本提取到 <stdout>

pdftotext -layout -nopgbrk the.pdf the-3-5.txt

将所有页面的文本提取到文件 the.txt,不要插入这些讨厌的 ^L 表示新页面的字符。

pdftotext -f 3 -l 5 -layout the.pdf -

将第 3--5 页的文本提取到 the-3-5.txt。

2.

提取图像

pdfimages -f 4 -l 7 -j the.pdf myprefix--

将第 4 页到第 7 页的所有图像提取为 JPEG(如果可能!)并使用前缀 myprefix---.

命名它们

如果无法提取为 JPEG,图像将被提取为纯光栅 PPMPGM

pdfimages(Poppler 分支)的最新版本允许您指定 -png(以及更多)以将所有图像获取为 PNG。

使用最新版本的 pdfimages 可为您提供以下选项:

$ pdfimages -h

   pdfimages version 0.33.0
   Copyright 2005-2015 The Poppler Developers - http://poppler.freedesktop.org
   Copyright 1996-2011 Glyph & Cog, LLC
   Usage: pdfimages [options] <PDF-file> <image-root>
     -f <int>       : first page to convert
     -l <int>       : last page to convert
     -png           : change the default output format to PNG
     -tiff          : change the default output format to TIFF
     -j             : write JPEG images as JPEG files
     -jp2           : write JPEG2000 images as JP2 files
     -jbig2         : write JBIG2 images as JBIG2 files
     -ccitt         : write CCITT images as CCITT files
     -all           : equivalent to -png -tiff -j -jp2 -jbig2 -ccitt
     -list          : print list of images instead of saving
     -opw <string>  : owner password (for encrypted files)
     -upw <string>  : user password (for encrypted files)
     -p             : include page numbers in output file names
     -q             : don't print any messages or errors
     [....]

您还想要什么图片格式?如果您需要其他格式,请使用 ImageMagick 的 convert 命令。

此外,PDF 中没有嵌入其他 "formats"。

基本上,PDF 中嵌入图像的唯一压缩方法是:

  • JPEG(然后提到 /DCTDEcode 过滤器作为对 PDF 查看器的解压缩提示),
  • JBIG2 (/JBIG2Encode),
  • 传真压缩(CCITTFaxDecode)和
  • JPEG2000 (JPXDecode).

PDF 中嵌入的所有其他图像基本上都是纯栅格数据(PPMPGM),它们的 PDF 内部压缩是 其他[=104] 之一=] 可用于一般流压缩的标准压缩方法:

  • /FlateDecode(ZIP/Deflate算法),
  • /LZWDecode(Lempel-Ziv-Welch 算法)和
  • /RunLengthDecode.

更新

抱歉,我现在才有时间查看您链接的示例 PDF。

正如@mkl 在他的评论中所写,看起来 像图像 不是 始终是 PDF 技术术语中的图像。例如,在您的 PDF 第 7 页上有(著名的)虎头。这完全由矢量元素组成,这些元素内嵌到页面的 /Contents 流中。 所描绘的棋盘也是如此。

我相信老虎图像是在几十年前的一些矢量图形程序(Adobe Illustator?)的帮助下设计的,当时它刚刚发布,并导出为 EPS。在许多情况下,PDF 查看器现在可以从其他内容中识别内联矢量元素(可以是简单的水平线)。除非这些矢量元素 "grouped" 到 XObject 中(pdfimages 也无法提取,但有助于手动隔离和提取...)

我知道的任何(免费和开源软件,或免费闭源软件)工具都无法自动提取这些矢量元素。

"real" 图像在 PDF 术语中是像素数据的矩形。这些是唯一可以通过 pdfimages.

等工具提取的图像类型