在不重新采样图像层的情况下缩放扫描的 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?