无法从特定 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,图像将被提取为纯光栅 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 中没有嵌入其他 "formats"。
基本上,PDF 中嵌入图像的唯一压缩方法是:
- JPEG(然后提到
/DCTDEcode
过滤器作为对 PDF 查看器的解压缩提示),
- JBIG2 (
/JBIG2Encode
),
- 传真压缩(
CCITTFaxDecode
)和
- JPEG2000 (
JPXDecode
).
PDF 中嵌入的所有其他图像基本上都是纯栅格数据(PPM
或 PGM
),它们的 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
.
等工具提取的图像类型
谁能告诉我如何从 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,图像将被提取为纯光栅 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 中没有嵌入其他 "formats"。
基本上,PDF 中嵌入图像的唯一压缩方法是:
- JPEG(然后提到
/DCTDEcode
过滤器作为对 PDF 查看器的解压缩提示), - JBIG2 (
/JBIG2Encode
), - 传真压缩(
CCITTFaxDecode
)和 - JPEG2000 (
JPXDecode
).
PDF 中嵌入的所有其他图像基本上都是纯栅格数据(PPM
或 PGM
),它们的 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
.