使用 Ghostscript 将 PDF 渲染为 PNG 时遵守 PDF 中的 MediaBox/CropBox
我一直在使用 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
也找不到)。
I've been using Ghostscript to convert my single figure plots rendered in PDF to PNG:
gswin32c -sDEVICE=png16m -r300x300 -sOutputFile=junk.png ^
-dBATCH -dNOPAUSE Figure_001-a.pdf
This works in the sense I get a PNG out and it contains the plot.
But it contains a huge amount of white space as well (an example source image: http://cdsweb.cern.ch/record/1258681/files/Figure_001-a.pdf).
If you view it in Acrobat you'll note there is no white space around the plot. If you use the above command line you'll find the plot is only about 1/3 of the space.
When doing the same thing with an EPS file I run into the same problem. However, there is the command-line parameter -dEPSCrop
that one can pass to get the PS rendering engine to pay attention to the BoundingBox.
I need the similar argument for rendering PDFs. I was not able to find it in docs (nor even the -dEPSCrop
, actually).
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我有完全相同的问题。我通过添加
-dUseArtBox
开关修复了它。示例:
注意:自 Ghostscript 版本 9.07-dUseArtBox 开关>
<代码>-dUseArtBox
将页面大小设置为 ArtBox 而不是 MediaBox。艺术框定义了页面创建者预期的页面有意义内容(包括潜在的空白)的范围。艺术盒可能是最小的盒子。当人们想要尽可能多地裁剪页面而不丢失内容时,它会很有用。
I had exactly the same issue. I fixed it by adding
-dUseArtBox
switch.Example:
Note:
-dUseArtBox
switch is supported 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.
有多种选项可以控制 Ghostscript 呈现给定输入的“媒体大小”:
-dPDFFitPage
-dUseTrimBox
-dUseCropBox
与 PDFFitPage Ghostscript 将渲染到当前页面设备大小(通常是默认页面大小)。
使用 UseTrimBox 它将使用 TrimBox(同时将 PageSize 设置为该值)。
使用 UseCropBox 它将使用 CropBox(同时将 PageSize 设置为该值)。
默认情况下(不提供参数),Ghostscript 将使用 MediaBox 进行渲染。
对于您的示例,看起来添加
"-dUseCropBox"
将完成您期望的工作。请注意,您还可以使用
"-sPAPERSIZE"
控制输出的总体大小(在 Ghostscript 知道的所有预定义值中进行选择)或(为了获得更大的灵活性)使用"-dDEVICEWIDTHPOINTS= NNN -dDEVICEHEIGHTPOINTS=NNN"
。There are various options to control which "media size" Ghostscript renders a given input:
-dPDFFitPage
-dUseTrimBox
-dUseCropBox
With PDFFitPage Ghostscript will render to the current page device size (usually the default page size).
With UseTrimBox it will use the TrimBox (and it will at the same time set the PageSize to that value).
With UseCropBox it will use the CropBox (and it will at the same time set the PageSize to that value).
By default (give no parameter), Ghostscript will render using the MediaBox.
For your example, it looks like adding
"-dUseCropBox"
will do the job you're expecting.Note, you can additionally control the overall size of your output by using
"-sPAPERSIZE"
(select amongst all pre-defined values Ghostscript knows) or (for more flexibility) use"-dDEVICEWIDTHPOINTS=NNN -dDEVICEHEIGHTPOINTS=NNN"
.您是否尝试过使用 pdftex 使用 pdfcrop (附带例如 texlive)或(尚未尝试)python 脚本 pdfcrop?
我使用提到的第一个工具有类似的工作流程。
Have you tried using pdfcrop using pdftex (comes with texlive for example) or (not tried yet) the python script pdfcrop?
I have a similar workflow using the first tool mentioned.