在不重新采样图像层的情况下缩放扫描的 PDF

Posted

技术标签:

【中文标题】在不重新采样图像层的情况下缩放扫描的 PDF【英文标题】:Scale scanned PDF without resampling image layer 【发布时间】:2012-07-16 20:51:47 【问题描述】:

我有一批由扫描页面组成的 PDF(大约 80,000 个文件)。图像层的像素大小与300dpi一致,但似乎设置为72dpi。结果,页面大小显示为 46x35 英寸。我需要调整这些文件,使它们注册为 8.5 x 11,或者它们的自然大小,并且我需要能够编写该过程的脚本,这样我就可以在 80,000 个文档(每个文档 2-5 页)上进行处理。

我想避免重新采样图像层,因为这可能会增加损失,并显着减慢处理速度。我试过了:

convert -density 300x300 input.pdf output.pdf

但它会重新采样图像。我在 ghostscript 上尝试过不同的变体,例如

gs \
  -o output.pdf \
  -sDEVICE=pdfwrite \
  -dDownsampleMonoImages=false \
  -dMonoImageResolution=300 \
   input.pdf

这会生成一个文件,但它似乎没有改变,并且仍然注册为超大。此外,页面的大小和方向不同。因此,将它们全部强制为一种尺寸/方向是行不通的。

(仅供参考,我真的不在乎,但下一步是让所有这些文件都使用 Acrobat Pro OCR,它的 OCR 会在超过 45 英寸的任何东西上阻塞。)

【问题讨论】:

听起来您只需要重置分辨率设置,而不是实际重新采样。我应该认为 GhostScript 将是要走的路,而不是 ImageMagick - 尽管我担心我不知道如何。祝你好运! 【参考方案1】:

PDF 是一种独立于分辨率的格式,因此图像的分辨率等无关紧要。页面的“自然大小”是 Acrobat 所说的,这是从文件中的 MediaBox(或 CropBox)信息收集的。

在我看来,原来的 PDF 转换有问题,文件确实是他们现在声称的(媒体)大小。

我怀疑你可能会得到你需要的结果;您“只是”需要调整文档的大小。问题是,在媒体尺寸不同的地方(你说他们确实如此),这并不是微不足道的。

但是,在继续之前,我建议您获取一个您希望为 8.5x11 的文件并尝试以下操作:

gs -dBATCH -dNOPAUSE \
   -sDEVICE=pdfwrite \
   -dDEVICEWIDTHPOINTS=612 -dDEVICEHEIGHTPOINTS=792 \
   -dFIXEDMEDIA \
   -dPDFFitPage \
   -sOutputFile=output.pdf \
    input.pdf

这将修复正在使用的媒体为 8.5x11,并告诉 Ghostscript 调整文档大小以适合页面(通过计算和应用比例因子)。除了压缩,它应该不会影响图像数据,如果有彩色图像我们可能需要担心 JPEG 伪影,但可以单独处理。

【讨论】:

【参考方案2】:

cpdf -scale-pages usletterportrait in.pdf -o out.pdf

除了将其包装在转换矩阵中以进行缩放之外,不接触页面内容,并且还缩放媒体/裁剪/艺术/出血/修剪框。

(商业,恐怕:

http://www.coherentpdf.com/

免责声明:我写的。)

【讨论】:

至少放一张你应用相关操作的截图……:P【参考方案3】:

像这样修改你原来的gs命令:

gs \
  -o output.pdf \
  -sDEVICE=pdfwrite \
  -dPDFFitPage \
  -g6120x7920 \
   input.pdf

然后检查两件事:

    页面尺寸现在显示为“字母”(或 612x792 磅或 8.5x11 英寸)。 文件大小与原始文件大小仅略有不同(表明未对页面图像进行重新采样)。

如果输入是仅以灰度扫描的文档(看起来是这样),则无需设置-dDownSample*Images 或设置-d*ImageResolution

【讨论】:

以上是关于在不重新采样图像层的情况下缩放扫描的 PDF的主要内容,如果未能解决你的问题,请参考以下文章

如何在不更改特定列的情况下对数据框中的数据进行重新采样?

如何在不更改特定列的情况下对数据框中的数据进行重新采样?

如何在不使用 ffmpeg 保持视频持续时间的情况下重新采样 FPS?

在python中从PDF中提取图像而不重新采样?

如何在不重新加载图像的情况下重新加载 collectionview 单元格

如何在不重新保存的情况下从 iCloud 下载图像?