在WPF应用程序中显示PDF

时间:2008-09-10 19:19:53

标签: 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

9 个答案:

答案 0 :(得分:18)

您可以使用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

答案 1 :(得分:11)

您只需在表单上托管Web浏览器控件并使用它来打开PDF。

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

答案 2 :(得分:10)

糟糕。这是一个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;

答案 3 :(得分:8)

以下代码需要安装Adobe Reader并将Pdf扩展连接到此。 它只是运行它:

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

答案 4 :(得分:8)

答案 5 :(得分:6)

只需使用框架和web浏览器

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中看到了不良的内存泄漏。

答案 6 :(得分:1)

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

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

PDFRasterizer.NET 3.0允许您渲染到WPF FixedDocument。它保留了所有矢量图形(PDF图形被转换为或多或少等效的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可以快速实现查看器。

答案 7 :(得分:0)

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

答案 8 :(得分:-1)

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