GhostScript - 从前 5pt 获得 ink_cov?

GhostScript - get ink_cov from top 5pt?

我正在尝试从 PDF 的顶部 5pt 获取墨水覆盖率。 大多数时候,这个命令会在许多不同的 PDF 中给出相同的结果:

gs -o - -sDEVICE=ink_cov -dFirstPage=2 -dLastPage=2 -dAutoRotatePages=/None -g36340x5 "12345.pdf" | grep CMYK

这给了我 0.02477 这样的结果。 但有时,我会得到完全不同的结果,比如 0.57318

我承认我不完全确定 -g36340x5 表示前 5pt。可能是底部的 5pt 吗? 如果我 运行 以下命令,我认为 crop.pdf 会显示我想要的墨水覆盖范围,但它只显示空白 pdf。

gs -o crop.pdf -sDEVICE=pdfwrite -dFirstPage=2 -dLastPage=2 -dAutoRotatePages=/None -g36340x5 -f 12345.pdf

但是如果我 运行 这个命令,crop.pdf 会显示我想要获得墨水覆盖的部分:

gs -o crop.pdf -sDEVICE=pdfwrite -dFirstPage=2 -dLastPage=2 -dAutoRotatePages=/None -g36340x6120 -c "[/CropBox [0 607 3634 612] /PAGES pdfmark" -f 12345.pdf

但即便如此,当尝试使用 ink_cov-device 执行此命令时,我在类似的 pdf 上得到了非常不同的结果:

gs -o - -sDEVICE=ink_cov -dFirstPage=2 -dLastPage=2 -dAutoRotatePages=/None -g36340x6120 -c "[/CropBox [0 607 3634 612] /PAGES pdfmark" -f 12345.pdf

我所有的 pdf 都是颠倒的。

我做错了什么?

最好的问候 尼克拉斯

-g 设置媒体大小 以像素为单位 ,它不会尝试重新定位媒体上的内容。由于 PostScript 坐标在左下角有 0.0,因此您只查看输出的底部 5 个像素。

您的第三个示例使用 pdfwrite 创建一个 PDF 文件,其中 cropbox 覆盖了您感兴趣的区域。但是,默认情况下,Ghostscript 在渲染时使用 MediaBox。如果你想使用 CropBox 那么你需要添加 -dUseCropBox 到你的命令行。如果你不这样做(因为你的最后一个命令没有)那么它仍然会检查与原始 PDF 相同的内容。

您需要设置与您感兴趣的媒体大小相匹配的媒体大小, 翻译页面原点(这很难做到,因为这意味着改变PDF 解释器,你如何使用 PostScript 编程?)或者你需要使用 CropBox 创建一个新的 PDF,就像你上面所做的那样,然后使用 inkcov 设备处理该 PDF 文件,但添加 -dUseCropBox(并丢弃现在冗余-g)

如果您渲染到屏幕而不是使用 inkcov,您可能会发现更容易看到发生了什么,然后您可以更改参数并查看它们的效果。一旦您确信您正在使用您想要的区域,那么您可以切换 ot inkcov 设备。