Ruby 无法从特定PDF提取文本和图像
谁能告诉我如何从PDF中提取所有文本和图像。我能够在类似的场景中提取图像,我使用谷歌文档创建了一个包含几行文本和两个png图像的PDF。但是,我无法从样本中提取图像 我尝试了以下方法: 在Ruby中: 1) “pdf阅读器”gem,它只支持提取少数格式的图像 2) “docsplit”gem,它只能提取文本,无法提取图像 命令行实用程序: 1) “pdfimages”工具,它只支持提取少数格式的图像 Java库: 1) “pdfbox”库,它只支持提取少数格式的图像。1。 提取文本:Ruby 无法从特定PDF提取文本和图像,ruby,pdf,command-line,ubuntu-14.04,pdfbox,Ruby,Pdf,Command Line,Ubuntu 14.04,Pdfbox,谁能告诉我如何从PDF中提取所有文本和图像。我能够在类似的场景中提取图像,我使用谷歌文档创建了一个包含几行文本和两个png图像的PDF。但是,我无法从样本中提取图像 我尝试了以下方法: 在Ruby中: 1) “pdf阅读器”gem,它只支持提取少数格式的图像 2) “docsplit”gem,它只能提取文本,无法提取图像 命令行实用程序: 1) “pdfimages”工具,它只支持提取少数格式的图像 Java库: 1) “pdfbox”库,它只支持提取少数格式的图像。1。 提取文本: pdfto
pdftotext -layout the.pdf -
将所有页面的文本提取到
将所有页面的文本提取到.txt文件中,不要插入表示新页面的讨厌的字符
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-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
[....]
$pdfimages-h
pdfimages版本0.33.0
版权所有2005-2015 Poppler开发者-http://poppler.freedesktop.org
版权所有1996-2011 Glyph&Cog,LLC
用法:pdfimages[选项]
-f:要转换的第一页
-l:要转换的最后一页
-png:将默认输出格式更改为png
-tiff:将默认输出格式更改为tiff
-j:将JPEG图像作为JPEG文件写入
-jp2:将JPEG2000图像写入jp2文件
-jbig2:将jbig2图像写入jbig2文件
-ccitt:将ccitt图像写入ccitt文件
-全部:相当于-png-tiff-j-jp2-jbig2-ccitt
-列表:打印图像列表而不是保存
-opw:所有者密码(用于加密文件)
-upw:用户密码(用于加密文件)
-p:在输出文件名中包含页码
-问:不要打印任何消息或错误
[....]
您还需要什么图像格式?如果需要其他格式,请使用ImageMagick的convert
命令
此外,PDF中没有嵌入其他“格式”
基本上,PDF中嵌入图像的唯一压缩方法是:
- JPEG(然后称为PDF查看器的解压缩提示的DCTDEcode过滤器)
- JBIG2(
)/JBIG2Encode
- 传真压缩(
)和CCITTFaxDecode
- JPEG2000(
)JPXDecode
PPM
或PGM
),其PDF内部压缩是可用于一般流压缩的其他标准压缩方法之一:
(ZIP/Deflate算法)/flateCode
(Lempel-Ziv-Welch算法)和/LZWDecode
/RunLengthDecode
使现代化 我现在才有时间看你的链接样本PDF,对不起 正如@mkl在他的评论中所写,看起来像图像的东西在PDF技术术语中并不总是图像。例如,在PDF的第7页上有(著名的)虎头。这完全是由矢量元素组成的,矢量元素内联放置在页面的
/Contents
流中。
描绘的棋盘也是如此
我相信老虎图像是在几十年前刚刚发布的矢量图形程序(Adobe Illustator?)的帮助下设计的,并输出到EPS。5月份的PDF查看器现在可以从其他内容中识别内联向量元素(可以是简单的水平线)。除非将这些矢量元素“分组”到一个XObject中(XObjectpdfimages
也无法提取,但有助于手动隔离和提取…)
我所知道的任何工具(免费开源软件或免费开源软件)都无法自动提取这些矢量元素
PDF术语中的“真实”图像是像素数据的矩形。这些是唯一可以通过
pdfimages
等工具提取的图像类型,感谢Kurt Pfeifle的详细回答。我尝试了你的建议,但仍然无法从我正在检查的PDF中提取图像(有问题的附件)。我真的不知道PDF如何存储图像。如果您能提供一些值得一看的参考资料,我将不胜感激。大多数人认为你在谈论位图图像。“文件中的图像是(至少部分)矢量图形。@Kurt Pfeifle很好地解释了这一点。请您推荐除上述工具/实用程序之外的任何其他开源解决方案,这些工具/实用程序在某种意义上更强大,可以提取接近PDF内容的文本和图像?@AmitPatel:对不起,我不理解您的问题。我不知道你所说的“从某种意义上说更强大,可以提取接近PDF内容的文本和图像”是什么意思。此外,评论部分不是一个提出新的、可能无关的问题的地方。如果你有自己的问题,只需开始一个新的问题并提问即可。@Kurt Pfeifle我指的是任何可以提供更好结果的替代解决方案/工具。您还可以建议我们应该使用什么命令和选项来获得从和中提取文本的最佳结果吗
$ 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
[....]