Ghostscript 删除裁剪框外的内容?

Posted

技术标签:

【中文标题】Ghostscript 删除裁剪框外的内容?【英文标题】:Ghostscript removes content outside the crop box? 【发布时间】:2014-02-11 16:08:36 【问题描述】:

我在使用 ghostscript 9.10 时遇到问题,显然删除了裁剪框之外的内容(特别是我放在那里的裁剪标记)

这是使用ghostscript之前的PDF:with_cropbox_before_optimize.pdf

$ pdfinfo -box with_cropbox_before_optimize.pdf
  MediaBox:           0.00     0.00   651.97   898.58
  CropBox:           28.35    28.35   623.62   870.24

将查看器设置为显示整个媒体框会按预期在裁剪框外显示裁剪标记。 (黑色边框用于说明裁剪框的位置)

然后我打电话:

gs -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress -dCompatibilityLevel=1.7 \
-dNOPAUSE -dQUIET -dBATCH -dAutoRotatePages=/None -sOutputFile=<out.pdf> <in.pdf>

生成以下文件:with_cropbox_after_optimize.pdf

现在裁剪标记不见了,或者至少它们不再显示 - 但是页面尺寸仍然很好,所以它没有裁剪它或其他什么......

$ pdfinfo -box with_cropbox_after_optimize.pdf
  MediaBox:           0.00     0.00   651.97   898.58
  CropBox:           28.35    28.35   623.62   870.24

那么:是我做错了还是这是一个错误?

【问题讨论】:

这是没有裁剪框的同一个 PDF,效果很好no_cropbox_after_optimize.pdf(他们不让我发布 3 个链接,所以我把最不重要的一个放在这里^^) 【参考方案1】:

首先要理解(我知道我一直在提到这一点,但人们不理解它)是 Ghostscript 和 pdfwrite 不是简单地玩弄你的 PDF 文件。

输入的 PDF 文件被解释,PDF 标记操作被转换为内部图形基元,然后通过 Ghostscript 设备接口传递。通常,这些图元然后被渲染为位图。在 pdfwrite 的情况下,原语被重新转换为 PDF 标记操作,并从它们组装成一个全新的 PDF 文件。输出与输入无关,除了它的视觉外观。

因此,当您使用 Ghostscript 处理 PDF 文件时,您并不是在“优化”它,而是在创建一个全新的 PDF 文件。

在您的情况下,CropBox 之外的对象不会被解释(因为它们在 CropBox 之外,所以它们被裁剪)。很明显,它们不会通过设备接口传递,因此不会出现在输出 PDF 文件中。

请注意,虽然 Ghostscript 裁剪到 CropBox,但不会影响 MediaBox,因此媒体仍然相同,但裁剪的对象会被裁剪掉。您可以使用 -dUseCropBox 将媒体更改为与 CropBox 相同,但这不是您想要的。

目前我看不到 CropBox 转换为剪辑的位置,因此您最好的解决方案可能是创建没有 CropBox 的文件(或将其删除,或将其设置为 MediaBox),然后添加它在处理文件时使用 pdfmark。

【讨论】:

感谢您的澄清 - 我认为这可能是问题所在。仍然有一个 -dDontRemoveStuff 选项或其他东西......

以上是关于Ghostscript 删除裁剪框外的内容?的主要内容,如果未能解决你的问题,请参考以下文章

CGImageCreateWithImageInRect 不能正确裁剪

Android开发技巧——定制仿微信图片裁剪控件

如何使用 ghostscript 在多页 pdf 中裁剪第 3 和第 4 页

Vue - 实现双击显示编辑框;自动聚焦点击的显示框;点击编辑框外的地方,隐藏编辑框

如何修剪PDF中不需要的文本?

Ghostscript:裁剪特定区域?