我有一个简单的WPF应用程序,可以显示和打印一些 使用FixedDocument报告。
如何通过免费开放的解决方案从中生成PDF 比如iTextSharp?
答案 0 :(得分:6)
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
答案 1 :(得分:1)
一种简单的方法,很简单,但可能不是最有效的方法是将固定文档渲染为图像,然后使用iTextSharp将图像嵌入到PDF中。
我成功之前已经这样做了。最初我试图将控件基元(形状)转换为PDF等价物,但事实证明这太难了。
答案 2 :(得分:0)
如果你可以从WPF获取图像,那么你可以像在本文中那样将它导入iTextSharp。如果将文件系统写入MemoryStream,然后使用它而不是使用FileStream,您甚至可以一起避免文件系统。
http://www.mikesdotnetting.com/Article/87/iTextSharp-Working-with-images
答案 3 :(得分:0)
如果您想以编程方式执行此操作,您最好的选择将是以下路径XPS(固定文档) - >打印到PS - >使用Ghostscript读取PS并转换为PDF。 如果您不关心在代码中阅读PDF,您可以打印到任何一个可以传递目标路径的免费PDF打印机。这样,如果您的报告中有任何测试,您的目标PDF文件仍然可以搜索。