使用 Ghostscript 将 PDF 呈现为 PNG 时,请遵守 PDF 中的 MediaBox/CropBox
Posted
技术标签:
【中文标题】使用 Ghostscript 将 PDF 呈现为 PNG 时,请遵守 PDF 中的 MediaBox/CropBox【英文标题】:Obey the MediaBox/CropBox in PDF when using Ghostscript to render a PDF to a PNG 【发布时间】:2011-02-09 02:10:44 【问题描述】:我一直在使用 Ghostscript 将我以 PDF 格式呈现的单图转换为 PNG:
gswin32c -sDEVICE=png16m -r300x300 -sOutputFile=junk.png ^
-dBATCH -dNOPAUSE Figure_001-a.pdf
这在我得到一个PNG并且它包含情节的意义上是有效的。
但它也包含大量空白(示例源图像:http://cdsweb.cern.ch/record/1258681/files/Figure_001-a.pdf)。
如果您在 Acrobat 中查看它,您会注意到绘图周围没有空白区域。如果你使用上面的命令行,你会发现情节只有大约 1/3 的空间。
当对 EPS 文件做同样的事情时,我遇到了同样的问题。不过有一个命令行参数-dEPSCrop
可以传给PS渲染引擎注意BoundingBox。
我需要类似的参数来渲染 PDF。我无法在文档中找到它(实际上甚至是 -dEPSCrop
)。
【问题讨论】:
谢谢!据我所知,这使用了一种迂回的方法,即写出 jpeg 或类似文件,扫描边距,然后以设置的边距重新运行。我想要使用的裁剪信息已经在 PDF 本身中(见鬼,Acrobat 会自动检测它)。我不禁想知道我是否可以做一些疯狂的事情,比如将 PDF 转换为 PS,然后从那里提取边界框。 :-) 【参考方案1】:我遇到了完全相同的问题。我通过添加-dUseArtBox
开关来修复它。
例子:
/usr/bin/gs -dUseArtBox -dNOPAUSE -sDEVICE=pngalpha -sOutputFile=output.png input.pdf
注意:-dUseArtBox
支持开关 since ghostscript version 9.07
-dUseArtBox
Sets the page size to the ArtBox rather than the MediaBox. The art box defines the extent of the page's meaningful content (including potential white space) as intended by the page's creator. The art box is likely to be the smallest box. It can be useful when one wants to crop the page as much as possible without losing the content.
【讨论】:
【参考方案2】:有多种选项可以控制 Ghostscript 呈现给定输入的“媒体大小”:
-dPDFFitPage -dUseTrimBox -dUseCropBox
使用 PDFFitPage Ghostscript 将呈现到当前页面设备大小(通常是默认页面大小)。 使用 UseTrimBox 它将使用 TrimBox(同时它将 PageSize 设置为该值)。 使用 UseCropBox 它将使用 CropBox(同时它将 PageSize 设置为该值)。 默认情况下(不提供参数),Ghostscript 将使用 MediaBox 进行渲染。
对于您的示例,添加 "-dUseCropBox"
似乎可以完成您期望的工作。
注意,您还可以使用"-sPAPERSIZE"
(从 Ghostscript 知道的所有预定义值中选择)或(为了更灵活)使用 "-dDEVICEWIDTHPOINTS=NNN -dDEVICEHEIGHTPOINTS=NNN"
来控制输出的整体大小。
【讨论】:
【参考方案3】:您是否尝试过使用pdfcrop 使用pdftex(例如texlive 附带)或(尚未尝试)python 脚本pdfcrop?
我使用提到的第一个工具有类似的工作流程。
【讨论】:
以上是关于使用 Ghostscript 将 PDF 呈现为 PNG 时,请遵守 PDF 中的 MediaBox/CropBox的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 ghostscript 将 PDF 转换为 PDF/A 或 PDF/X?
使用 PHP(ghostscript) 将 PDF 转换为图像耗时太长