【问题标题】:.NET open PDF in winform without external dependencies.NET 在 winform 中打开 PDF,无需外部依赖
【发布时间】:2023-03-31 07:11:02
【问题描述】:

是否有一个免费的库可以让我打开一个 pdf 并在一个 winform 项目中显示它。我知道我可以在 adobe reader 或其他东西中打开它,但它对我来说总是那么臃肿,我会依赖它的安装。是否有一个很好的轻量级替代方案,我可以在我的项目中包含一个 dll 或类似的避免外部依赖项。

我不需要太多功能,只需查看、更改页面缩放..

我看过一些库,但它们似乎是关于创建 PDF 的不查看。

【问题讨论】:

标签: c# .net


【解决方案1】:

使用 acrobat reader 安装的 ActiveX 控件应该可以工作,要么通过设计器将其放入,要么使用类似 this 的东西。

这将需要在客户端上安装相关版本的阅读器,但由于您表示无论如何都可以启动它,这应该不是问题。读者

【讨论】:

  • 是的,但正如我所说,目前这不是问题,但我不希望有依赖关系,因为事情很快就会发生变化。
  • 同意,这不应该是解决方案,因为 OP 说“没有依赖关系”。雷诺的回答要完整得多。
【解决方案2】:

有一个免费的PDF library。它主要是编辑内容,但它可能会有所帮助。

【讨论】:

    【解决方案3】:

    这是一个猜测。

    浏览器使用插件在其中呈现 PDF 的方式。我不确定它是否需要安装应用程序。

    您可以使用 Foxit 阅读器或 Sumatra PDF。
    而且,您可以在您的 winform 上托管浏览器控件。

    【讨论】:

      【解决方案4】:

      我不确定您所说的“依赖项”是什么,因为除非您将整个 PDF 渲染源捆绑在项目中,否则您总是必须依赖一些外部代码来渲染 PDF。

      有一些商业渲染器和很少免费的。

      如果您想避免无法捆绑的依赖项,那么也许您可以查看SumatraPDFsource code,这是一个使用MuPDF 的Windows 开源PDF 查看器。
      还有Poppler,一个使用Xpdf作为渲染引擎的渲染引擎。 所有这些都很棒,但它们需要相当多的承诺才能使它们工作并与 .Net 交互。

      大多数其他开源库仅用于创建和管理 PDF 页面,我不知道任何实际渲染的库;这是一个很难正确解决的问题。

      您可能仍想考虑使用GhostScript 作为解释器,因为呈现页面是一个相当简单的过程。
      缺点是您需要重新打包它以将其与您的应用一起安装,或者使其成为先决条件(或至少是安装过程的一部分)。
      这不是什么大挑战,而且肯定比将其他渲染引擎融入 .Net 更容易。

      看看this SO question我今天回答了。
      它包含更多信息和指向几个月前我在另一个论坛上发布的一些working .Net code 的链接。

      【讨论】:

        【解决方案5】:

        我会研究 Foxit Reader 作为 Adob​​e Reader 的轻量级替代品。它由一个 .exe 文件组成,您可以将其与您的应用程序捆绑在一起,因此不需要任何安装。根据他们的 EULA,这是允许的,只要您的应用程序未安装在移动设备上。您所要做的就是将阅读器作为一个新进程启动,指向相应的 pdf。显然,这种方法的缺点是它不会集成到您的应用程序界面中。

        【讨论】:

          【解决方案6】:

          首先你需要引用 Adob​​e Reader ActiveX 控件

          Adobe Acrobat 浏览器控件类型库 1.0

          %programfiles&\Common Files\Adobe\Acrobat\ActiveX\AcroPDF.dll

          然后你只需将它从工具箱拖到你的 Windows 窗体中。

          并使用类似这样的代码来初始化 ActiveX 控件。

          private void InitializeAdobe(string filePath)
          {
              try
              {
                  this.axAcroPDF1.LoadFile(filePath);
                  this.axAcroPDF1.src = filePath;
                  this.axAcroPDF1.setShowToolbar(false);
                  this.axAcroPDF1.setView("FitH");
                  this.axAcroPDF1.setLayoutMode("SinglePage");
                  this.axAcroPDF1.Show();
              }
              catch (Exception ex)
              {
                  throw;
              }
          }
          

          确保在表单关闭时处理 ActiveX 控件

          this.axAcroPDF1.Dispose();
          this.axAcroPDF1 = null;
          

          否则 Acrobat 可能会被遗弃。

          【讨论】:

          • 你能处理 PDF 中的文本,然后在打开的 PDF 中突出显示它(使用你描述的库)吗?
          • 添加引用后要拖动的控件名称是什么?
          【解决方案7】:

          看看这个。它需要相当多的库(包括 GhostScript),所以它的重量不是很轻。但所有依赖项都包括 PDF 的原生阅读。它在 VB 中——但如果你需要 C#,可以翻译:

          http://www.codeproject.com/Articles/37458/PDF-Viewer-Control-Without-Acrobat-Reader-Installe

          【讨论】:

            【解决方案8】:

            在表单上放置一个 webBrowser 控件。 strPdfFile = "C:\SomeFile.pdf" webBrowser.Url = new Uri(strPdfFile);

            这对我们有用,直到在 Win7-64 位系统上尝试。现在需要进行一些调试。

            【讨论】:

            • 那个 webBrowser 控件仍然需要某种 pdf 阅读器插件。
            • webbrowser 还不够,难吗?
            【解决方案9】:

            您可以使用 Nuget 的 Spire.PDFViewer。见here

            【讨论】:

            • 这不是免费图书馆
            猜你喜欢
            • 2012-03-23
            • 1970-01-01
            • 2021-11-22
            • 2023-03-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多