【问题标题】:How can i write a line in a pdf with a gradient with ghostscript/postscript with tiffsep1 device?如何使用带有 tiffsep1 设备的带有 ghostscript/postscript 的渐变在 pdf 中写一行?
【发布时间】:2020-07-30 04:05:06
【问题描述】:

我正在尝试通过 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
  • B&W pdf 的黑色输出确实有线条,但 渐变 pdf 的黑色输出没有。
  • 该行似乎在 pdf 下!?
  • 两个输出的/Orientation 都是正确的。

如何获得带有渐变的文件的预期输出?

.

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

【问题讨论】:

    标签: c# pdf postscript


    【解决方案1】:

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

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

    所以会发生什么是绘制了一条黑线,然后绘制了 B&W 文件中的黑色标记。在页面内容的黑色区域没有覆盖黑线的地方,您可以看到这条线(如果您将线画成红色,您会看到黑色区域覆盖了线的位置)。

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

    如果您想在页面内容的“顶部”绘制线条,那么您需要使用 EndPage 过程,而不是 BeginPage。

    【讨论】:

    • 是的,我已经尝试过用 EndPage 代替 BeginPage 的相同 ps,但是这样 GS 会返回错误,知道为什么吗?我还需要对代码做些什么才能工作吗?
    • 好吧,你没有告诉我错误,这会很有帮助....我怀疑问题是 PDF 解释器还调用 setpagedevice 从 MediaBox 中设置媒体大小PDF 文件。猜测这可能是 PDF 解释器中的一个错误。添加 -dPDFDEBUG 表明 PDF 解释器在错误之前开始运行 PDF 文件,这在我看来是很好的证据,证明它是 PDF 解释器中的错误。您应该打开一个错误报告。
    • 确切的代码无法将 BeginPage 更改为 EndPage,但 EndPage 必须采用 2 个整数,使用它们并返回一个布尔值,而不是在中风后添加“exch pop 2 ne”
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-02
      • 1970-01-01
      • 1970-01-01
      • 2015-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-27
      相关资源
      最近更新 更多