首页 > 解决方案 > 未应用 Postscript 剪切路径

问题描述

我正在尝试在 EPS 边界框周围应用剪切路径,以便有效地剪切其内容。EPS被命名out-pdf.eps(这样命名是因为它来自PDF到EPS的转换),你可以在这里下载它(大约54MB)。EPS 是 PDF 到 EPS 转换的结果,并且BoundingBox由于需要具有特定大小而对其进行了修改。

当我在使用 来呈现 EPS 大小的简单 EPS 查看器上打开此 EPS 时,BoundingBox它显示如下:

在此处输入图像描述

尺寸为 1740x842pts,这正是我想要的,但是,当我在 Adob​​e Illustrator 或 Inkscape 上打开它时,它BoundingBox被忽略了,我看到了整个 EPS:

在此处输入图像描述

因此,我尝试在 周围应用剪切路径BoundingBox,以便像这样裁剪 EPS:

gswin32c.exe -q -dNOPAUSE -dBATCH -dSAFER -sDEVICE=eps2write -dDEVICEWIDTHPOINTS="1740" -dDEVICEHEIGHTPOINTS="842" -o "clip.eps" -c "0 0 1740 842 rectclip" -f "out-pdf.eps"

但这不起作用(结果),EPS 看起来完全一样!但是如果我使用较小的rectclip只是为了测试,它可以工作:

gswin32c.exe -q -dNOPAUSE -dBATCH -dSAFER -sDEVICE=eps2write -dDEVICEWIDTHPOINTS="1740" -dDEVICEHEIGHTPOINTS="842" -o "clip.eps" -c "0 0 1000 400 rectclip" -f "out-pdf.eps"

为什么rectclip在第一种情况下不起作用?我一定错过了一些非常微不足道的东西,但我已经苦苦挣扎了 2 天,我找不到解决方案!

标签: postscriptclipeps

解决方案


好吧,这与设备(eps2write)的工作方式有关。尽管您没有这么说,但 PDF 到 EPS 的转换也是使用 eps2write 设备完成的。顺便说一句,你应该升级,9.21 是 3 岁。

请注意,EPS 文件只不过是一个巨大的图像,我假设原始 PDF 文件包含透明度,这导致整个页面被渲染为 720 dpi 的位图。

处理提供的 EPS 文件时,最初将剪辑设置为媒体的大小;对于您的文件(使用 -dEPSCropt),它将是 1740x842。

然后,您使用 rectclip 将剪辑设置为相同的路径。

设备在写出内容时会忽略初始剪辑,因此它最终不会向输出发送虚假剪辑。由于您的剪辑与初始剪辑完全相同,因此设备无法将其检测为不同,因此会忽略它。

在第二种情况下,剪辑与初始剪辑不同,因此设备实际上将剪辑路径写入 EPS 输出文件。

因此,rectclip 所做的只是添加一个剪辑路径,该路径将图像的一部分剪掉。它不会使文件变小。

您还没有说您是如何从 PDF 创建 EPS 文件的,但可能会在此时添加 rectclip 从而生成您想要的大小并包含您想要的剪辑的 EPS。否则,您可以使矩形剪辑与 EPS BoundingBox 略有不同,最终将被应用。

或者您可以接受这样一个事实,即您在 Illustrator 和 Inkscape 中看到的内容实际上就是文件中的内容。虽然 BoundingBox 注释告诉导入应用程序文件的放置方式,但它毕竟只是一个注释。

哦,最后您可以将原始 PDF 文件渲染为图像,按照您想要的方式进行剪辑,然后使用 ImageMagick 或您选择的图像处理包将其转换为 EPS。

编辑

好的,我认为您可以解决此问题。因为您正在生成 EPS 文件,而不是完整的 PostScript 程序,所以您实际上并不关心媒体大小。eps2write 设备计算边界框,它根本不使用实际的媒体大小。

所以你可以做的是将媒体大小设置为高于边界框,然后应用你真正想要的剪辑。生成的 EPS 文件仍将具有正确的 BoundingBox 注释,并将包含您想要的剪辑。它也将有一个 MediaBox,但因为这是一个永远不会实际使用的 EPS 文件。

我使用了这个命令行:

gswin64c -sDEVICE=eps2write -dDEVICEWIDTHPOINTS="2000" -dDEVICEHEIGHTPOINTS="842" -o "clip.eps" -c "0 0 1740 842 rectclip" -f "out-pdf.eps"

生成一个包含您想要的剪辑的新 EPS 文件 (clip.eps)。请注意,该-o开关包括-dBATCH-dNOPAUSE因此如果您使用-o. 如果您使用最新版本的 Ghostscript,则-dSAFER也不需要,因为现在这是默认设置。

我也试过这个:

gswin64c -sDEVICE=eps2write -dDEVICEWIDTHPOINTS="1740" -dDEVICEHEIGHTPOINTS="842" -o "clip.eps" -c "0 0 1740 841.9 rectclip" -f "out-pdf.eps"

并且创建了一个包含剪辑的EPS文件,所以看起来即使与初始剪辑的微小偏差也会导致它被写入输出,正如我所想的那样。但是,941.91 没有,所以看起来像 0.1 分左右是模糊的。

当然,我使用的是 Ghostscript 的当前版本(9.53.0),早期版本的行为可能会有所不同。


推荐阅读