【问题标题】:Display a PDF in WPF Application [closed]在 WPF 应用程序中显示 PDF [关闭]
【发布时间】:2010-09-08 11:28:51
【问题描述】:

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


我正在使用以下代码运行浏览器,但Browser.Navigate 方法没有做任何事情!

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

【问题讨论】:

  • 要在 WPF 中显示 PDF 吗?
  • 是用于在 Acrobat 中从外部启动,还是需要设计时控件才能在应用程序内部显示?
  • 我没有WebBrowser 控件,而是使用exported PDF to XpsDocument 并使用WPF 的DocumentViewer 控件进行显示。

标签: wpf pdf


【解决方案1】:

【讨论】:

  • 为项目添加了 GitHub 链接。
  • 请注意,MoonPDF 将 PDF 页面显示为图像。如果您想选择文本,这可能是相关的。
【解决方案2】:

哎呀。这是一个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;

【讨论】:

  • 即使用户系统上没有安装 Acrobat 阅读器,这也能正常工作吗?
  • 注意:如果您的应用程序已构建为 64 位应用程序,这将不起作用。您将不得不强制将您的应用程序构建为 32 位应用程序。 (如果您尝试使用 WPF 中的 WindowsFormHost 控件执行此操作,也会存在同样的问题)
【解决方案3】:

披露:这是一个商业广告,我在这家公司工作。

我意识到答案已被接受,但以下内容不需要 Adob​​e 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 以快速实现查看器。

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        【解决方案6】:

        只需像这样使用框架和网络浏览器

        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 中看到严重的内存泄漏。

        【讨论】:

          【解决方案7】:

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

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

          我还有一个 5 分钟的截屏视频,讲述了我是如何在这里制作的:

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

          【讨论】:

          • 当我执行相同操作时出现错误Could not load file or assembly 'Interop.AcroPDFLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.
          • 非常好,谢谢我用了它,它有效!
          • 非常感谢您与社区分享此内容。希望所有答案都以视频格式出现! :)
          • 博文链接已失效。
          • @cheeesus 看看谷歌cache
          【解决方案8】:

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

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

          【讨论】:

          • 是否需要在最终用户计算机上安装 Acrobat Reader?
          • 在这种情况下,最终用户需要安装某种 PDF 阅读器软件并在 IE 中注册。我推荐 Foxit Reader 而不是 Adob​​e,它更快而且不安装间谍软件。
          • +1;迄今为止最简单的解决方案:<WebBrowser Source="file://c:\path\to\my.pdf" />
          • +1 最简单的那个,厉害了
          • 2016年更新,我不推荐福昕了(现在已经臃肿了),我用的是sumatra pdf。但 Windows 10 Edge 浏览器现在已内置 PDF 支持,因此很可能不需要在 Windows 上安装任何第 3 部分 PDF 软件
          【解决方案9】:

          看看这个:http://itextsharp.sourceforge.net/ 您可能必须使用 WindowsFormsHost,但由于它是开源的,因此您可以在 WPF 中使其更加优雅。

          【讨论】:

          • iText 是一个很棒的工具,但它不支持渲染 PDF。
          猜你喜欢
          • 2015-01-27
          • 1970-01-01
          • 1970-01-01
          • 2013-04-08
          • 2012-03-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多