【问题标题】:Which approach is best for creating PostScript in C#?哪种方法最适合在 C# 中创建 PostScript?
【发布时间】:2018-11-09 22:17:21
【问题描述】:

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

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

我使用一个库在 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 Graphics 对象的库。然后就像 Java 中的 Graphics2DOutputBuilder,在 .net 中创建一个 GraphicsOutputBuilder
    • 优势,这是最干净最正确的方法。我们可以通过这种方式轻松添加位图和 .emf 输出(它们有一个 Graphic 对象的写入方式)。
    • 缺点,这是大量的工作,当我们了解 PostScript 的所有细节时,我们可能会遇到一些小问题。
  4. 重写 Apache xml-graphics 库以使用 .net 调用而不是 Java 调用来调用其中的代码。
    • 优势,这可能比图形方法少一些工作。
    • 缺点,完成后我们有了这个,但任何未来的格式,如 SVG,我们还必须完全重新编写。

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

【问题讨论】:

  • 方案五,使用IPC将数据从.NET传到Java,用Java做.ps渲染?
  • @glenebob - 我敢肯定,如果我们说他们必须在服务器上安装 Java,我们会遭到一些人的反对。如果我们真的走这条路,也许 JNI 会更好?

标签: .net graphics2d postscript ikvm


【解决方案1】:

我们将创建 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];

【讨论】:

    猜你喜欢
    • 2012-03-07
    • 1970-01-01
    • 1970-01-01
    • 2012-11-05
    • 2011-05-07
    • 2013-05-04
    • 2019-09-05
    • 1970-01-01
    • 2018-05-19
    相关资源
    最近更新 更多