如何以编程方式确定 PDF 文件中图像的 DPI?

Jas*_*son 16 command-line pdf display-resolution

我有一些 PDF 文件,我想使用它们拆分成 TIFF 文件convert(以便通过 进行 OCR tesseract)。到目前为止,这工作得很好 - 除了为了自动化整个过程,我需要设置convert输出的 DPI 。现在,我正在使用这样的命令:

convert -density 300 myFile.pdf -depth 8 -background white output-%04d.tiff

...以 300 DPI 输出 PDF 文件。但是,某些 PDF 文件的DPI较低(例如 150 DPI),这意味着我不想通过 300 DPI 输出它们convert- 这会创建过大的 TIFF 文件而没有任何附加信息。

我知道有一些方法可以通过打开 Adob​​e Acrobat 并在“预检”工具中乱搞来检查 PDF 文件中图像的 DPI。但是,有没有办法通过命令行确定特定 PDF 文件的 DPI?

rbr*_*ito 14

主要回答

由于我对相同类型的工作感兴趣(虽然不一定要对 PDF 文件进行 OCR,但要将它们转换为DjVu然后对它们进行OCR),我发现这个问题和缺乏响应(因为我需要猜测 DPI具有像素数的图像,然后使用大小作为输出pdfinfo或其他技巧——更不用说 PDF 中的图像可能具有不同的密度等)。

经过大量研究,我发现您可以使用pdfimages(来自包poppler-utils)如下所示:

$ 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%
Run Code Online (Sandbox Code Playgroud)

请注意上面列表中的x-ppiy-ppi。它还列出了图像在 PDF 中存储的格式,这很酷(有时是 JBIG2,有时是 JPEG2000 等)

注意:deptest.pdf上面使用的文件可pdfsizeopt的存储库中获得

真正的行动

之后,您可以简单地提取图像pdfimages本身或使用pdftoppm(也来自poppler-utils)以您可能喜欢的多种格式呈现整个页面(例如,tiff,用于扫描tesseract)。

您可以使用以下内容(假设您已经创建了一个名为imgs放置图像的目录):

pdfimages -png Faraway-PRA.pdf imgs/prefix
Run Code Online (Sandbox Code Playgroud)

这些文件将在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
(...)
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用scantailor您喜欢的工具或任何您喜欢的工具执行您认为合适的任何手术。

更直接的回答

如果您只想对 PDF 文件进行 OCR,您可以使用维护良好且已打包的程序,即ocrmypdf


exc*_*ber 5

我需要这些信息,只是在这里找到了:

http://www.wizards-toolkit.org/discourse-server/viewtopic.php?t=16110

此技术还使用 ImageMagick:

identify -format "%w x %h %x x %y" DAT_1.tif
Run Code Online (Sandbox Code Playgroud)

输出是图像的大小和 dpi:

2480 x 3507 300 x 300
Run Code Online (Sandbox Code Playgroud)


Mah*_*hdi 2

我使用以下命令:

convert MyPDF.pdf -print "Size: %wx%h\n" /dev/null
Run Code Online (Sandbox Code Playgroud)

它返回:

Size: 380x380
Run Code Online (Sandbox Code Playgroud)