我有一个简单的 WPF 应用程序,它使用 FixedDocument 显示和打印一些报告。
如何使用免费和开放的解决方案(例如 iTextSharp)从中生成 PDF?
我有一个简单的 WPF 应用程序,它使用 FixedDocument 显示和打印一些报告。
如何使用免费和开放的解决方案(例如 iTextSharp)从中生成 PDF?
WPF FixedDocument,也称为 XPS 文档,是对 PDF 的明确改进。它具有 PDF 缺乏的许多功能。在大多数情况下,最好将文档分发为 XPS 而不是 PDF,但有时需要将 XPS 转换为 PDF,例如,如果您需要在仅支持 PDF 的设备上打开文档。不幸的是,大多数将 XPS 转换为 PDF 的免费工具,例如 CutePDF 和 BullzipPDF,都需要安装打印机驱动程序或者不是开源的。
一个好的开源解决方案是使用作为 GhostPDL 一部分的“gxps”工具。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
一种简单但可能不是最有效的方法是将固定文档呈现为图像,然后使用 iTextSharp 将图像嵌入到 PDF 中。
我以前成功地这样做过。最初我尝试将控制图元(形状)转换为 PDF 等价物,但事实证明这太难了。
如果您可以从 WPF 将其导入图像,那么您可以像本文中那样将其导入 iTextSharp。如果您将文件系统写入 MemoryStream 然后使用它而不是使用 FileStream,您甚至可以一起避免文件系统。
http://www.mikesdotnetting.com/Article/87/iTextSharp-Working-with-images
如果您想以编程方式执行此操作,则最好的选择是以下路径 XPS(固定文档)-> 打印到 PS-> 使用 Ghostscript 阅读 PS 并转换为 PDF。如果您不关心在代码中读取 PDF,您可以打印到任何一台免费的 PDF 打印机,您可以将目标路径传递给这些打印机。这样,如果您的报告中有任何测试,您的目标 PDF 文件仍然可以搜索。