在WPF应用程序中显示PDF

任何想法如何在WPF Windows应用程序中显示PDF文件?


我正在使用下面的代码来运行浏览器,但Browser.Navigate方法不会做任何事情!

 WebBrowser browser = new WebBrowser(); browser.Navigate("http://www.google.com"); this.AddChild(browser); // this is the System.Windows.Window 

哎呀。 这是一个winforms应用程序。 不适用于WPF。 无论如何,我会发布这个。

尝试这个

 private AxAcroPDFLib.AxAcroPDF axAcroPDF1; this.axAcroPDF1 = new AxAcroPDFLib.AxAcroPDF(); this.axAcroPDF1.Dock = System.Windows.Forms.DockStyle.Fill; this.axAcroPDF1.Enabled = true; this.axAcroPDF1.Name = "axAcroPDF1"; this.axAcroPDF1.OcxState = ((System.Windows.Forms.AxHost.State)(resources.GetObject("axAcroPDF1.OcxState"))); axAcroPDF1.LoadFile(DownloadedFullFileName); axAcroPDF1.Visible = true; 

通过使用WindowsFormHost控件,可以获取在WPF应用程序中工作的Acrobat Reader控件。 我在这里有一篇关于它的博客文章:

http://hugeonion.com/2009/04/06/displaying-a-pdf-file-within-a-wpf-application/

我也有一个5分钟的屏幕录像,我是如何做到的:

http://www.screencast.com/t/JXRhGvzvB

您可以简单地在窗体上托pipe一个Web浏览器控件,并使用它来打开PDF。

在.NET 3.51中有一个新的本机WPF“WebBrowser”控件,或者您可以在WPF应用程序中托pipeWindows.Forms浏览器。

以下代码需要安装Adobe Reader,并且要连接到这个扩展名。 它只是运行它:

 String fileName = "FileName.pdf"; System.Diagnostics.Process process = new System.Diagnostics.Process(); process.StartInfo.FileName = fileName; process.Start(); process.WaitForExit(); 

试试MoonPdfPanel - A WPF-based PDF viewer control http://www.codeproject.com/Articles/579878/MoonPdfPanel-A-WPF-based-PDF-viewer-control

GitHub: https : //github.com/reliak/moonpdf

只需使用框架和网页浏览器就可以了

 Frame frame = new Frame(); WebBrowserbrowser = new WebBrowser(); browser.Navigate(new Uri(filename)); frame.Content = browser; 

然后,当你不再需要它时,就去清理它:

 WebBrowser browser = frame.Content as WebBrowser; browser.Dispose(); frame.Content = null; 

如果您不清理它,那么根据您使用的.NET版本,您可能会遇到内存泄漏问题。 如果我没有清理,我在.NET 3.5中看到了内存泄漏。

披露:这是一个商业的,我为这家公司工作。

我意识到答案已被接受,但以下不需要Adobe Reader / Acrobat,它是一个WPF解决scheme – 而不是Winforms。 我也意识到这是一个老问题,但它刚刚更新,所以我想这仍然是实际的。

PDFRasterizer.NET 3.0允许您呈现到WPF FixedDocument。 它保留了所有的vectorgraphics(PDFgraphics被转换成或多或less的等价的WPF元素,这可能是最接近你所需要的。

 using (FileStream file = new FileStream(path, FileMode.Open, FileAccess.Read)) { pdfDoc = new Document(file); ConvertToWpfOptions convertOptions = new ConvertToWpfOptions(); RenderSettings renderSettings = new RenderSettings(); ... FixedDocument wpfDoc = pdfDoc.ConvertToWpf(renderSettings, convertOptions, 0, 9, summary); } 

您可以将wpfDoc传递给例如WPF DocumentViewer以快速实现查看器。

你也可以使用FoxitReader。 它是免费的,并附带一个ActiveX控件,在安装FoxitReader应用程序后,在Web浏览器(IE和其他)中注册。 因此,在系统上安装FoxitReader后,放入一个WebBrowser控件,并将其Source属性指向您的PDF文件的文件path。

检查一下: http : //itextsharp.sourceforge.net/你可能不得不使用WindowsFormsHost,但由于它是开源的,你可能可以使它在WPF中更加优雅。