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

时间:2015-05-20 09:30:44

标签: ruby pdf command-line ubuntu-14.04 pdfbox

任何人都可以告诉我如何从PDF中提取所有文本和图像。我能够在场景中提取图像,我使用Google Docs创建了一个包含少量文本和2个png图像的PDF。但是,我无法从样本pdf中提取图像。

我尝试了以下内容:

在Ruby中:

1)" pdf-reader"宝石,它支持只提取几种格式的图像。

2)" docsplit" gem,它只能提取文本而无法提取图像。

命令行实用程序:

1)" pdfimages"它支持仅提取几种格式的图像。

Java库:

1)" pdfbox"它只支持提取少量几种图像格式。

1 个答案:

答案 0 :(得分:3)

1

提取文字

pdftotext -layout the.pdf -

提取所有网页&#39;文字为<stdout>

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

提取所有网页&#39;要归档the.txt的文字,并且不要插入表示新网页的这些讨厌的 ^L 字符。

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

提取网页&#39; 3--5文本到-3-5.txt。

2

提取图片

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

将第4页到第7页的所有图像作为JPEG格式提取(如果可能!),并使用前缀myprefix---命名。

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

最新版本的pdfimages(Poppler fork)允许您指定-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命令。

此外,没有其他&#34;格式&#34;嵌入PDF中。

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

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

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

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

更新

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

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

我相信虎图像是在几十年前(Adobe Illustator?)的帮助下设计的,当它刚刚发布并导出到EPS时。可能情况下的PDF查看器现在可以从其他内容中识别内联向量元素(可以是简单的水平线)。除非这些向量元素是&#34;分组&#34;进入一个XObject(pdfimages无法提取,但这将有助于手动隔离和提取......)

这些向量元素不能由我所知的任何(免费和开源软件或免费的闭源软件)工具自动提取。

A&#34;真实&#34; PDF用语中的图像是像素数据的矩形。这些是唯一可以通过pdfimages等工具提取的图像类型。