iTextSharp для создания PDF из WPF FixedDocument - PullRequest
7 голосов
/ 02 августа 2010

У меня есть простое приложение WPF, которое отображает и распечатывает некоторые отчеты с помощью FixedDocument.

Как можно генерировать PDF-файлы из этого с помощью бесплатного и открытого решения, такого как iTextSharp?

Ответы [ 4 ]

6 голосов
/ 18 августа 2010

Фиксированный документ WPF, также известный как документ XPS, является определенным улучшением по сравнению с PDF.У него много возможностей, которых нет в PDF.В большинстве случаев лучше распространять документ в формате XPS, а не в формате PDF, но иногда необходимо выполнить преобразование из XPS в PDF, например, если вам нужно открыть документ на устройствах, которые поддерживают только PDF.К сожалению, большинство бесплатных инструментов для преобразования из XPS в PDF, таких как CutePDF и BullzipPDF, требуют установки драйвера принтера или не являются открытым исходным кодом.

Хорошим решением с открытым исходным кодом является использование инструмента "gxps", которыйчасть GhostPDL.GhostPDL является частью проекта Ghostscript и имеет открытый исходный код по лицензии GPL2.

  1. Загрузите GhostPDL из http://ghostscript.com/releases/ghostpdl-8.71.tar.bz2 и скомпилируйте его.
  2. Скопируйте исполняемый файл gxps.exeв ваш проект как Контент и вызовите его из своего кода, используя Process.Start.

Ваш код может выглядеть следующим образом:

string pdfPath = ... // Path to place PDF file

string xpsPath = Path.GetTempPath();
using(XpsDocument doc = new XpsDocument(xpsPath, FileAccess.Write))
  XpsDocument.CreateXpsDocumentWriter(doc).Write(... content ...);

Process.Start("gxps.exe",
              "-sDEVICE=pdfwrite -sOutputFile=" +
                  pdfPath +
                  "-dNOPAUSE " +
                  xpsPath).WaitForExit();

// Now the PDF file is found at pdfPath
1 голос
/ 11 августа 2010

Простой способ, который прост, но, вероятно, не самый эффективный, состоит в том, чтобы визуализировать документ Fixed в изображение и затем вставить изображение в PDF с помощью iTextSharp.

Я сделал это таким образомраньше успешно.Сначала я пытался преобразовать управляющие примитивы (фигуры) в PDF-эквиваленты, но это оказалось слишком сложно.

0 голосов
/ 18 августа 2010

Если вы хотите сделать это программно, вашей лучшей ставкой будет следующий путь XPS (Fixed Document) -> Печать на PS -> Используйте Ghostscript для чтения PS и преобразования в PDF. Если вам не нужно читать PDF-файл обратно в коде, вы можете распечатать его на любом из бесплатных PDF-принтеров, на который вы можете передать путь назначения. Таким образом, ваш целевой файл PDF будет доступен для поиска, если у вас есть какой-либо тест в отчете.

0 голосов
/ 18 августа 2010

Если вы можете получить его в изображение из WPF, вы можете импортировать его в iTextSharp, как они делают в этой статье.Вы даже можете избежать файловой системы все вместе, если вы записываете ее в MemoryStream и затем используете это вместо использования FileStream.

http://www.mikesdotnetting.com/Article/87/iTextSharp-Working-with-images

...