如何告诉ghostscript不要光栅化eps文件中的渐变?

时间:2017-08-06 16:37:03

标签: c# ghostscript eps ghostscript.net

我正在寻找能让我阅读,编辑和保存.eps文件的解决方案。我发现ghostscript可以提供所有这些机会。我需要的算法很简单:读取几个.eps文件,将它们连接在一个大文件中并保存新的.eps文件。我已经可以做到这一点,但是有一个问题:新生成和保存的文件不会保留渐变。渐变是栅格化的,使用该渐变的形状将转换为剪切蒙版。有没有办法告诉ghostscript不要在eps中栅格化渐变?

我使用最新的32位版本的ghostscript库虽然我的Windows是64位(在64位版本的ghostscript上运行解决方案时出现问题)。实际上它并不那么重要,但我使用C#和Ghostscript.Net写作。

这是示例代码:

using (GhostscriptProcessor processor = new GhostscriptProcessor(lastInstalledVersion, true))
{
    List<string> switches = new List<string>();
    switches.Add("-o");
    switches.Add(@"-sOutputFile=" + outputFile);
    switches.Add("-sDEVICE=eps2write");
    switches.Add("-dUseCIEColor=true");
    switches.Add("-c");
    switches.Add("<</Install {0.5 0.5 scale}>> setpagedevice");
    switches.Add("-f");
    switches.Add(inputFile);

    processor.Process(switches.ToArray());
}

1 个答案:

答案 0 :(得分:0)

你提出的问题的答案很简单;你不能。调用eps2write设备,出于某种原因,它只生成2级PostScript,而shfill运算符或类型2模式(PDF中的着色字典)是3级PostScript原语。

然而,似乎没有充分理由通过Ghostscript运行现有文件。你说你已经拥有了许多EPS文件。 EPS文件的重点在于它们可以被视为“黑盒子”,你不需要知道它们中的内容,以便将它们连接起来,重新排列它们等。

您所做的只是编写一些'包装'PostScript,在完整地包含EPS文件之前改变CTM。你可以弄清楚缩放和翻译的参数应该是什么,因为EPS文件将有一个%% BoundingBox注释,告诉你它在用户空间中的位置。您需要做的就是改变比例,并使用translate来偏移0,0原点(左下角)。

请注意,eps2write设备由于仅限于生成2级PostScript,因此也不支持超出原始2级规范的PostScript的其他一些功能,例如CIDFonts。