7

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

如何使用免费和开放的解决方案(例如 iTextSharp)从中生成 PDF?

4

4 回答 4

7

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 可执行文件作为 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
于 2010-08-18T18:58:19.917 回答
1

一种简单但可能不是最有效的方法是将固定文档呈现为图像,然后使用 iTextSharp 将图像嵌入到 PDF 中。

我以前成功地这样做过。最初我尝试将控制图元(形状)转换为 PDF 等价物,但事实证明这太难了。

于 2010-08-11T03:54:03.783 回答
0

如果您可以从 WPF 将其导入图像,那么您可以像本文中那样将其导入 iTextSharp。如果您将文件系统写入 MemoryStream 然后使用它而不是使用 FileStream,您甚至可以一起避免文件系统。

http://www.mikesdotnetting.com/Article/87/iTextSharp-Working-with-images

于 2010-08-18T00:50:54.537 回答
0

如果您想以编程方式执行此操作,则最好的选择是以下路径 XPS(固定文档)-> 打印到 PS-> 使用 Ghostscript 阅读 PS 并转换为 PDF。如果您不关心在代码中读取 PDF,您可以打印到任何一台免费的 PDF 打印机,您可以将目标路径传递给这些打印机。这样,如果您的报告中有任何测试,您的目标 PDF 文件仍然可以搜索。

于 2010-08-18T18:55:48.693 回答