我如何使用 tiffsep1 设备在带有 ghostscript/postscript 渐变的 pdf 中写一行?

How can i write a line in a pdf with a gradient with ghostscript/postscript with tiffsep1 device?

我正在尝试通过 ps 文件修改带有 ghostscript 的 pdf 以添加横向线,但它不适用于此文件。

输入文件

我试过了:

gs -sDEVICE=tiffsep1 -sCompression=lzw -r300x300 -o out%d.tif post.ps input.pdf

post.ps:

%!
<<
    /BeginPage {
    newpath
        0 0 moveto
        1000 1000 lineto
    stroke
    } bind
    /Orientation 3
>> setpagedevice

如何使用渐变获得文件的预期输出?

.

我在 c# 中调用 gs 的方式与在 this question 中相同。

您的 PDF 文件的内容不包含透明度操作,因此它们是不透明的。对于黑白文件,页面上唯一的标记是黑色区域,对于渐变文件,几乎整个页面都被渐变填充标记。

在处理页面内容之前,在页面的开始执行BeginPage PostScript过程。

所以会发生这样的情况,先绘制一条黑线,然后绘制黑白文件中的黑色标记。在黑色线条未被页面内容的黑色区域覆盖的地方,您可以看到该线条(如果您以红色绘制线条,您会看到黑色区域覆盖该线条的位置)。

您的渐变文件覆盖了最初绘制黑线的整个区域,因此您看不到任何内容。

如果要绘制页面内容的线条 'on top',则需要使用 EndPage 过程,而不是 BeginPage。

此案例被报告为 Ghostscript 中的错误。 https://bugs.ghostscript.com/show_bug.cgi?id=702597 事实上,提供的 /EndPage 过程是无效的。 /BeginPage 和 /EndPage 过程不可互换。 有关详细信息,请参阅 PostScript 语言参考手册,“6.2.6 设备初始化和页面设置”。