iTextSharp для создания PDF из WPF FixedDocument

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

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

4 ответа

WPF FixedDocument, также известный как документ 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 в ваш проект как Content и вызовите его из своего кода, используя 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

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

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

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

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

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

Другие вопросы по тегам