0

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

尽管我的 Windows 是 64 位,但我正在使用最新的 32 位版本的 ghostscript 库(在 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());
}
4

1 回答 1

1

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

但是,似乎没有充分的理由通过 Ghostscript 运行现有文件。你说你已经有一些 EPS 文件。EPS文件的全部意义在于它们可以被视为“黑匣子”,您无需知道其中的内容即可连接它们,重新排列它们等。

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

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

于 2017-08-06T19:18:35.417 回答