我有一些 PDF 文件,我想将它们拆分成 TIFF 文件convert
(以便通过 OCR 进行识别tesseract
)。到目前为止,这个方法效果很好 - 但为了使整个过程自动化,我需要设置输出的 DPI convert
。现在,我正在使用如下命令:
convert -density 300 myFile.pdf -depth 8 -background white output-%04d.tiff
... 以 300 DPI 输出 PDF 文件。但是,有些 PDF 文件降低DPI(例如 150 DPI),这意味着我不想以 300 DPI 的输出它们convert
- 这会创建过大的 TIFF 文件而没有任何附加信息。
我知道可以通过打开 Adobe Acrobat 并在“预检”工具中操作来检查 PDF 文件中图像的 DPI。但是,有没有办法通过命令行确定特定 PDF 文件的 DPI?
答案1
主要答案
因为我对同样的工作感兴趣(虽然不一定对 PDF 文件进行 OCR,而是将它们转换为视音频和然后OCR),我发现这个问题和答案都不够充分(因为我需要猜测图像的 DPI 和像素数,然后使用大小作为输出pdfinfo
或其他技巧——更不用说 PDF 中的图像可能具有不同的密度等)。
经过大量研究,我发现你可以使用pdfimages
(来自包poppler 实用程序) 如下所示:
$ pdfimages -list deptest.pdf
page num type width height color comp bpc enc interp object ID x-ppi y-ppi size ratio
--------------------------------------------------------------------------------------------
1 0 image 100 100 gray 1 1 image no 9 0 53 53 169B 14%
2 1 image 100 100 gray 1 1 ccitt no [inline] 53 53 698B 56%
注意上面列表中的x-ppi
和y-ppi
。它还列出了图像在 PDF 中的存储格式,这很酷(有时是 JBIG2,有时是 JPEG2000 等)。
注意:上面使用的文件deptest.pdf
可用来自pdfsizeopt
的存储库。
真正的行动
此后,您可以简单地提取图像pdfimages
本身或使用pdftoppm
(也可以从poppler-utils
)以您可能喜欢的多种格式(例如,tiff,用于扫描)呈现整个页面tesseract
。
您可以使用类似下面的方法(假设您已经创建了一个名为imgs
放置图像的目录):
pdfimages -png Faraway-PRA.pdf imgs/prefix
文件将在目录内创建imgs
,名称以 开头prefix
,如下所示:
$ ls
prefix-000.png prefix-047.png prefix-094.png prefix-141.png
prefix-001.png prefix-048.png prefix-095.png prefix-142.png
prefix-002.png prefix-049.png prefix-096.png prefix-143.png
prefix-003.png prefix-050.png prefix-097.png prefix-144.png
(...)
scantailor
然后,您可以使用或任何您喜欢的工具执行您认为合适的任何手术。
更直接的答案
如果你只是想对 PDF 文件进行 OCR,你可以使用一个维护良好且已打包的程序,即ocrmypdf。
答案2
该技术也使用了 ImageMagick:
identify -format "%w x %h %x x %y" DAT_1.tif
输出是图像的大小和 dpi:
2480 x 3507 300 x 300
答案3
我使用以下命令:
convert MyPDF.pdf -print "Size: %wx%h\n" /dev/null
并返回:
Size: 380x380