谁能告诉我如何从 PDF 中提取所有文本和图像。我能够在类似的场景中提取图像,我使用 Google Docs 创建了一个包含几行文本和 2 个 png 图像的 PDF。但是,我无法从样本 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 页的文本提取到-3-5.txt。
2.
提取图像
pdfimages -f 4 -l 7 -j the.pdf myprefix--
将第 4 页到第 7 页的所有图像提取为 JPEG(如果可能!),并使用前缀 myprefix---
命名它们。 .
如果无法提取为 JPEG,图像将提取为纯栅格 PPM
或PGM
.
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 中没有嵌入其他“格式”。
基本上,嵌入 PDF 中的图像的唯一压缩方法是:
- JPEG(然后
/DCTDEcode
过滤器被提及作为 PDF 查看器的解压缩提示), - JBIG2 (
/JBIG2Encode
), - 传真压缩 (
CCITTFaxDecode
) 和 - JPEG2000 (
JPXDecode
)。
无论如何,嵌入 PDF 中的所有其他图像基本上都是纯光栅数据( PPM
或 PGM
),并且它们的 PDF 内部压缩是可用于一般流的其他标准压缩方法之一压缩:
-
/FlateDecode
(ZIP/Deflate 算法), -
/LZWDecode
(Lempel-Ziv-Welch 算法)和 -
/RunLengthDecode
.
更新
抱歉,我现在才有时间查看您链接的示例 PDF。
正如 @mkl 在他的评论中所写,看起来像图像的并不总是 PDF 技术用语中的图像。例如,在 PDF 的第 7 页上有一个(著名的)虎头。它完全由向量元素组成,这些向量元素内联放置在页面的 /Contents
中。溪流。
所描绘的棋盘也是如此。
我相信老虎图像是在几十年前刚刚发布时借助某些矢量图形程序(Adobe Illustator?)设计的,并导出为 EPS。在某些情况下,PDF 查看器现在可以从其他内容中识别内联向量元素(可能是简单的水平线)。除非这些向量元素被“分组”到 XObject 中(pdfimages
也无法提取,但这将有助于手动隔离和提取...)
我知道的任何工具(免费开源软件,或免费的闭源软件)都无法自动提取这些向量元素。
PDF 术语中的“真实”图像是像素数据的矩形。这些是唯一可以通过 pdfimages
等工具提取的图像类型。 .
关于ruby - 无法从特定 PDF 中提取文本和图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30345709/