Какой подход лучше всего подходит для создания PostScript в C #? - PullRequest
0 голосов
/ 31 мая 2018

Мне нужно создать вывод PostScript из нашей системы.Наша система производит документы высокого формата в различных форматах, и мне нужно добавить .ps в качестве дополнительного формата.

Одна странность, наш код написан на Java, и мы используем IKVM для .net-версии нашегобиблиотека.У нас около 5% кода, написанного на C #, а остальное - это Java, преобразованный с помощью IKVM.

Я создаю файлы .ps на стороне Java, используя библиотеку, которая позволяет мне записывать в объект Graphics2D, который он предоставляет. К сожалению, в .NET (через IKVM) это ужасно медленно .

Итак, чтобы решить эту проблему, я думаю:

  1. Зайдите в код IKVMи посмотрим, смогу ли я ускорить это.Нет смысла, что это так медленно.
    • Преимущество, если оно работает, это, вероятно, самое быстрое разрешение.И теперь можно использовать будущие библиотеки Graphics2D.
    • Недостаток, если я не могу, я потратил впустую время.Кроме того, в будущем у нас будет собственный филиал IKVM.
  2. Расследование oreasoft - если это работает, используйте это с PostScriptBuilder
    • Advantage, это должно быть довольно быстро и полностью и правильно обрабатывать .ps,
    • Недостаток, это решает проблему только для .ps.Кроме того, 5K / год для формата мы не можем получить много продаж.
    • В этом случае я бы сделал GraphicsBuilder для вывода растрового изображения и .wmf - это было бы быстро и просто.
  3. Создание библиотеки объектов .net Graphics для .ps.И затем точно так же, как Graphics2DOutputBuilder в Java, создайте GraphicsOutputBuilder в .net
    • Преимущество, это самый чистый и правильный способ сделать это.И мы можем легко добавить вывод bitmap & .emf таким образом (у них есть способ графического объекта для записи в них).
    • Недостаток, это значительная работа, и у нас могут возникать небольшие проблемы, когда мы изучаем все детали PostScript.
  4. Переписать библиотеку Apache xml-graphics, чтобы использовать вызовы .net вместо вызовов Java для кода в ней.
    • Преимущество, это, вероятно, немного меньше работы, чем графический подход.
    • Недостаток, когда мы это сделаем, но в любых будущих форматах, таких как SVG, мы также должны переписать полностью.

Буду признателен за любые отзывы о решении этой проблемы.

1 Ответ

0 голосов
/ 01 июня 2018

Мы создадим ветку 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];
...