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.
- Загрузите GhostPDL с http://ghostscript.com/releases/ghostpdl-8.71.tar.bz2 и скомпилируйте его.
- Скопируйте исполняемый файл 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