哪种方法最适合在 C# 中创建 PostScript?

Which approach is best for creating PostScript in C#?

我需要从我们的系统创建 PostScript 输出。我们的系统生成多种格式的高度格式化文档,我需要添加 .ps 作为附加格式。

有点奇怪,我们的代码都是用 Java 编写的,我们使用 IKVM 作为我们库的 .net 版本。我们有大约 5% 的代码是用 C# 编写的,其余的是 Java 用 IKVM 转换的。

我使用一个库在 Java 端创建 .ps 文件,该库允许我写入它提供的 Graphics2D 对象。 Unfortunately, in .NET (via IKVM) it's horribly slow.

所以,为了解决这个问题,我在想:

  1. 进入 IKVM 代码,看看我是否可以加快速度。它使不 感觉它是如此缓慢。
    • 优势,如果有效,可能是 最快的分辨率。现在可以使用未来的 Graphics2D 库。
    • 缺点,如果我做不到,我就浪费了时间。还有,前进 我们将拥有自己的 IKVM 分支。
  2. 调查oreasoft——如果 有效,将其与 PostScriptBuilder 一起使用
    • 优势,这应该非常快并且完全正确地处理。ps。
    • 缺点,这只能解决.ps的问题。对于我们可能不会获得很多销售的格式,还有 5K/年。
    • 在这种情况下,我会为位图和 .wmf 输出创建一个 GraphicsBuilder——这将是快速和简单的。
  3. 为 .ps 创建基于 .net 图形对象的库。然后就像 Java 中的 Graphics2DOutputBuilder,在 .net 中创建一个 GraphicsOutputBuilder
    • 优势,这是执行此操作的最干净、最正确的方法。我们可以通过这种方式轻松添加位图和 .emf 输出(它们有一个 Graphic 对象的方式来写入它们)。
    • 缺点,这是一项大量的工作,在我们学习 PostScript 的所有细节时,我们可能会遇到持续的小问题。
  4. 重写 Apache xml-图形库以使用 .net 调用而不是 Java 调用其中的代码。
    • 优势,这可能比图形方法少一些工作。
    • 缺点,完成后我们有了这个,但任何未来的格式,如 SVG,我们也必须重新完整编写。

感谢任何有关解决此问题的反馈。

我们将创建 IKVM 的一个分支(暂定名称 Windward MVKI),并将其放在 NuGet 上。

我们发现的问题在 converter.cs – C2J.ConvertShape() 中。它访问 path.PathPoints[i]。问题在于每次调用它都会创建点数组。将对 PathPoints 的调用移到 for 循环之外,然后访问构建一次的数组副本以加快访问速度 – 很多。

换句话说:

for (int i = 0; i < points.Length; i++) {
PointF point = path.PathPoints[i];

改为:

PointF[] points = path.PathPoints;
for (int i = 0; i < points.Length; i++) {
PointF point = points[i];