使用Ghostscript将PDF渲染为PNG时,请遵循PDF中的MediaBox/CropBox。

11

我一直在使用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,然后从中提取边界框。 :-) - user319080
3个回答

8
有多种选项可用于控制Ghostscript渲染给定输入的“媒体大小”: -dPDFFitPage -dUseTrimBox -dUseCropBox
使用PDFFitPage,Ghostscript将呈现到当前页面设备大小(通常是默认页面大小)。 使用UseTrimBox,它将使用TrimBox(同时将PageSize设置为该值)。 使用UseCropBox,它将使用CropBox(同时将PageSize设置为该值)。 默认情况下(不提供参数),Ghostscript将使用MediaBox进行渲染。
对于您的示例,似乎添加“-dUseCropBox”将完成您期望的工作。
请注意,您还可以通过使用“-sPAPERSIZE”(在Ghostscript知道的所有预定义值中选择)或(更灵活地)使用“-dDEVICEWIDTHPOINTS = NNN -dDEVICEHEIGHTPOINTS = NNN”来进一步控制输出的整体大小。

8

我曾经遇到过完全相同的问题。我通过添加-dUseArtBox开关来解决它。

示例:

 /usr/bin/gs -dUseArtBox -dNOPAUSE -sDEVICE=pngalpha -sOutputFile=output.png input.pdf

注意:-dUseArtBox 开关支持 自ghostscript版本9.07起-dUseArtBox 设置页面大小为 ArtBox 而不是 MediaBox。艺术框定义了页面的有意义内容(包括潜在的空白空间),如页面的创建者所期望的那样。艺术框可能是最小的框。当想要尽可能裁剪页面而不失去内容时,它非常有用。

0

你尝试过使用pdftex(例如与texlive一起提供)或者(还未尝试)python脚本pdfcrop来使用pdfcrop吗?

我使用了第一个工具提到的类似工作流程。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接