У меня есть простое приложение WPF, которое отображает и печатает некоторые отчеты с FixedDocument.
Как может генерировать PDF от этого, с бесплатным и открытым решением, таким как iTextSharp?
Фиксированный документ WPF, также известный как документ XPS, является явным улучшением по сравнению с PDF. У него много возможностей, которых не хватает PDF. В большинстве случаев лучше распространять документ как XPS, чем PDF, но иногда необходимо преобразовать из XPS в PDF, например, если вам нужно открыть документ на устройствах, которые поддерживают только PDF.К сожалению, большинство бесплатных инструментов для преобразования из XPS в PDF, таких как CutePDF и BullzipPDF, требуют установки драйвера принтера или не имеют открытого исходного кода.
Хорошим решением с открытым исходным кодом является использование инструмента «gxps», входящего в состав GhostPDL. GhostPDL является частью проекта Ghostscript и имеет открытый исходный код под лицензией GPL2.
Ваш код может выглядеть так:
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
Простой способ, который является легким, но, вероятно, не самым эффективным, - это преобразовать фиксированный документ в изображение, а затем встроить изображение в PDF-файл с помощью iTextSharp.
Я делал это раньше успешно. Первоначально я пытался преобразовать примитивы управления (формы) в эквиваленты PDF, но это оказалось слишком сложно.
Если вы можете получить его в образ из WPF, вы можете импортировать его в iTextSharp, как это делается в этой статье. Вы даже можете полностью избежать файловой системы, если запишете ее в MemoryStream, а затем используете ее вместо FileStream.
http://www.mikesdotnetting.com/Article/87/iTextSharp-Working-with-images
ЕСЛИ вы хотите сделать это программно, лучшим вариантом будет следующий путь: XPS (фиксированный документ) -> Печать в PS -> Используйте Ghostscript для чтения PS и преобразования в PDF. Если вам не нужно читать PDF-файл обратно в коде, вы можете распечатать его на любом из бесплатных PDF-принтеров, на который вы можете передать путь назначения. Таким образом, ваш целевой PDF-файл будет по-прежнему доступен для поиска, если в вашем отчете есть какой-либо тест.