未应用后记剪切路径
Postscript clipping path not being applied
我正在尝试围绕 EPS 边界框应用剪切路径,以便有效地剪切其内容。 EPS 名为 out-pdf.eps
(之所以这样命名是因为它来自 PDF 到 EPS 的转换),您可以下载它 here(大约 54MB)。 EPS 是将 PDF 转换为 EPS 的结果,并对其 BoundingBox
进行了修改,因为它需要具有特定的大小。
当我在使用 BoundingBox
呈现 EPS 大小的简单 EPS 查看器上打开此 EPS 时,它显示如下:
尺寸为 1740x842pts,这正是我想要的,但是,当我在 Adobe 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"
但这行不通(result),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 天,我找不到解决办法!
好吧,这是与设备 (eps2write) 工作方式有关的一个微妙之处。尽管您没有这么说,但 PDF 到 EPS 的转换也已使用 eps2write 设备完成。顺便说一句,你应该升级了,9.21已经3岁了。
请注意,EPS 文件只不过是一个巨大的图像,我假设原始 PDF 文件包含透明度,导致整个页面以 720 dpi 呈现为位图。
在处理提供的 EPS 文件时,最初将剪辑设置为媒体的大小;对于您的文件(使用 -dEPSCropt),它将是 1740x842。
然后您使用 rectclip 将剪辑设置为相同的路径。
设备在写出内容时会忽略初始剪辑,因此它最终不会向输出发出虚假剪辑。由于您的剪辑与初始剪辑完全相同,因此设备无法检测到它不同,因此会忽略它。
在第二种情况下,剪辑与初始剪辑不同,因此设备实际上将剪辑路径写入 EPS 输出文件。
所以 rectclip 所做的就是添加一个剪辑路径,剪辑出部分图像。它不会使文件变小。
您还没有说明如何从 PDF 创建 EPS 文件,但可能可以在 那个 点添加 rectclip,从而生成与您一样大小的 EPS想要并包含您想要的剪辑。否则,您可以使 rectclip 与 EPS BoundingBox 略有不同,它最终将被应用。
或者您可以接受这样一个事实,即您在 Illustrator 和 Inkscape 中看到的实际上就是文件中的内容。虽然 BoundingBox 注释告诉导入应用程序文件的放置方式,但它毕竟只是注释。
哦,最后您可以将原始 PDF 文件渲染为图像,按照您想要的方式剪裁,然后使用 ImageMagick 或您选择的图像处理包,将其转换为 EPS。
编辑
好的,我认为你可以解决这个问题。因为您正在生成一个 EPS 文件,而不是一个完整的 PostScript 程序,所以您实际上并不关心媒体大小是多少。 eps2write 设备计算 BoundingBox,它根本不使用实际媒体大小。
所以您可以做的是将媒体大小设置为大于 BoundingBox,然后应用您实际想要的剪辑。生成的 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点左右就是模糊度。
当然,我使用的是当前版本 (9.53.0) 的 Ghostscript,早期版本的行为可能有所不同。
我正在尝试围绕 EPS 边界框应用剪切路径,以便有效地剪切其内容。 EPS 名为 out-pdf.eps
(之所以这样命名是因为它来自 PDF 到 EPS 的转换),您可以下载它 here(大约 54MB)。 EPS 是将 PDF 转换为 EPS 的结果,并对其 BoundingBox
进行了修改,因为它需要具有特定的大小。
当我在使用 BoundingBox
呈现 EPS 大小的简单 EPS 查看器上打开此 EPS 时,它显示如下:
尺寸为 1740x842pts,这正是我想要的,但是,当我在 Adobe 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"
但这行不通(result),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 天,我找不到解决办法!
好吧,这是与设备 (eps2write) 工作方式有关的一个微妙之处。尽管您没有这么说,但 PDF 到 EPS 的转换也已使用 eps2write 设备完成。顺便说一句,你应该升级了,9.21已经3岁了。
请注意,EPS 文件只不过是一个巨大的图像,我假设原始 PDF 文件包含透明度,导致整个页面以 720 dpi 呈现为位图。
在处理提供的 EPS 文件时,最初将剪辑设置为媒体的大小;对于您的文件(使用 -dEPSCropt),它将是 1740x842。
然后您使用 rectclip 将剪辑设置为相同的路径。
设备在写出内容时会忽略初始剪辑,因此它最终不会向输出发出虚假剪辑。由于您的剪辑与初始剪辑完全相同,因此设备无法检测到它不同,因此会忽略它。
在第二种情况下,剪辑与初始剪辑不同,因此设备实际上将剪辑路径写入 EPS 输出文件。
所以 rectclip 所做的就是添加一个剪辑路径,剪辑出部分图像。它不会使文件变小。
您还没有说明如何从 PDF 创建 EPS 文件,但可能可以在 那个 点添加 rectclip,从而生成与您一样大小的 EPS想要并包含您想要的剪辑。否则,您可以使 rectclip 与 EPS BoundingBox 略有不同,它最终将被应用。
或者您可以接受这样一个事实,即您在 Illustrator 和 Inkscape 中看到的实际上就是文件中的内容。虽然 BoundingBox 注释告诉导入应用程序文件的放置方式,但它毕竟只是注释。
哦,最后您可以将原始 PDF 文件渲染为图像,按照您想要的方式剪裁,然后使用 ImageMagick 或您选择的图像处理包,将其转换为 EPS。
编辑
好的,我认为你可以解决这个问题。因为您正在生成一个 EPS 文件,而不是一个完整的 PostScript 程序,所以您实际上并不关心媒体大小是多少。 eps2write 设备计算 BoundingBox,它根本不使用实际媒体大小。
所以您可以做的是将媒体大小设置为大于 BoundingBox,然后应用您实际想要的剪辑。生成的 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点左右就是模糊度。
当然,我使用的是当前版本 (9.53.0) 的 Ghostscript,早期版本的行为可能有所不同。