iTextSharp从WPF FixedDocument生成PDF

时间:2010-08-02 08:29:28

标签: wpf pdf itextsharp fixeddocument

我有一个简单的WPF应用程序,可以显示和打印一些 使用FixedDocument报告。

如何通过免费开放的解决方案从中生成PDF 比如iTextSharp?

4 个答案:

答案 0 :(得分:6)

WPF FixedDocument,也称为XPS文档,是对PDF的明确改进。它具有PDF缺乏的许多功能。在大多数情况下,最好将文档分发为XPS而不是PDF,但有时需要将XPS转换为PDF,例如,如果需要在仅支持PDF的设备上打开文档。不幸的是,大多数从XPS转换为PDF的免费工具,如CutePDF和BullzipPDF,都需要安装打印机驱动程序或不是开源的。

一个好的开源解决方案是使用属于GhostPDL的“gxps”工具。 GhostPDL是Ghostscript项目的一部分,在GPL2下是开源许可的。

  1. http://ghostscript.com/releases/ghostpdl-8.71.tar.bz2下载GhostPDL并进行编译。
  2. 将gxps.exe可执行文件作为内容复制到项目中,并使用Process.Start从代码中调用它。
  3. 您的代码可能如下所示:

    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文件仍然可以搜索。