【问题标题】:Opening a pdf in .NET在 .NET 中打开 pdf
【发布时间】:2023-03-25 20:36:02
【问题描述】:

在我们正在开发的应用程序中,我们正在尝试实施帮助。我们有一个帮助 pdf 文档,目前可以接受的是,当用户单击帮助按钮时,它只会打开 pdf。该应用程序是一个桌面应用程序,需要以某种方式将 pdf 文件包含在安装中并安装在本地计算机上。

我基本上需要两件事:

  1. 如何将此 pdf 添加到 应用程序,使其可用 安装后在客户端机器上? 我可以把它放在资源中 的项目,否则我可以把 它在应用程序文件夹中 客户端安装程序。

  2. 如何打开此 pdf? 我可以打开这个pdf 启动默认的 pdf 查看器 文件,或者我可以使用 System.WinForms.WebBrowser 工具 显示它。但是,如果我选择 第二个选项,我不确定如何 访问存储在 资源或在安装中找到它 文件夹。

如果您能提供我执行此操作的代码(在 VB.Net 或 C#.Net 中),那就太好了。

【问题讨论】:

    标签: .net pdf


    【解决方案1】:

    这就是我们的做法:

    将所有帮助文件夹放入%ApplicationFolder%/Help。因此,您的 pdf 将具有路径 %ApplicationFolder%/Help/Manual.pdf。您可以创建一个帮助文件夹并将您的 pdf 文件放在您的 csproject 中,并将整个附加到 csproject,并将其设置为 copy always。通过这种方式,您可以确保您复制到Help 文件夹的 pdf 文件始终是最新的。

    然后将所有内容(当然要减去 pdb 文件)从调试文件夹复制到部署文件夹。

    然后,在单击帮助按钮时使用System.Diagnostics.Process.Start(pdfPath) 启动帮助文件。以下是获取 pdfPath 的方法:

    这里是sn-p的代码:

    public void Help_Click(object sender, System.EventArgs e)
    {
        var appDir = Path.GetDirectoryName(Application.StartupPath);
        var helDir = Path.Combine(appDir, "Help");
        var pdfPath = Path.Combine(helDir, "Manual.pdf");
    
        System.Diagnostics.Process.Start(pdfPath);
    }
    

    您可以在调试模式下进行测试。直接按F5(记得把pdf文件复制到debug文件夹)就可以搞定了

    【讨论】:

    • 我相信这是我正在寻找的答案,但您能否通过步骤扩展您的解决方案?我对我到底应该做什么感到有点困惑。如果我将文件添加到我的安装程序项目的应用程序文件夹中,那么如何在 UI 项目中获取该文件的路径?我能以某种方式在调试中测试它吗?
    • 添加到此解决方案中,如果帮助文件夹与应用程序 exe 位于同一目录中,则删除 Path.GetDirectoryName 并使用 Application.StartupPath。
    • 另外,为了进一步添加到这个解决方案,Path.Combine 被重载以获取尽可能多的列表,因此您可以通过重写为 Path.Combine(Application.StartupPath, "Help", "Manual.pdf") 来避免多次声明
    【解决方案2】:

    我不是一个非常有经验的程序员,但我会建议“Thomas”建议的“应用程序文件夹”,如果您担心客户端系统可能没有默认的 PDF 查看器,您可以尝试实现“TRichEditPDF 1.01” /“TRichView llPDFLib 1.0”或“PDFsharp 1.30”。不知道它是否非常实用,但它是一种选择。

    【讨论】:

      【解决方案3】:
      1. 恕我直言,我最好将您的 pdf 存储在应用程序文件夹中,因为它更易于访问。帮助文件名可能是硬编码的,所以查找没有问题。

      2. 我更喜欢通过 ActiveX 在 .NET 中使用 pdf,而不使用 WebBrowser。这是一种简单的方法,结果非常有用 - 您将获得完整的 Acrobat 工具栏和行为,可以轻松地与您的界面集成。为此,您应该创建单独的表单并将 AxAcroPDF 控件放在上面,然后使用AxAcroPDF.LoadFile。当然,您需要参考 AxAcroPDFLib。控件可以这样初始化:

        var axAcroPDF = new AxAcroPDFLib.AxAcroPDF();
        axAcroPDF.Dock = System.Windows.Forms.DockStyle.Fill;
        axAcroPDF.Enabled = true;
        axAcroPDF.Name = "axAcroPDF1";
        axAcroPDF.LoadFile(fullFilepath);
        axAcroPDF1.Visible = true;
        

      ps 任何解决方案都需要在客户端计算机上安装 Adob​​e Acrobat。

      【讨论】:

        【解决方案4】:

        对于您的第一个需求,我发现将 PDF 添加到 Visual Studio 项目并将其“复制到输出目录”设置为“如果较新则复制”是最简单的。至于如何打开文件,我建议使用默认的 PDF 查看器。使用 .NET Process 类,您可以使用以下命令启动文件名:

        System.Diagnostics.Process.Start(fullFilePath);
        

        【讨论】:

          【解决方案5】:
          1. 如何将此 pdf 添加到应用程序中,以便在安装后在客户端计算机上可用?我可以将它放在项目的资源中,也可以将它放在客户端安装程序的应用程序文件夹中。

          我会选择第二个选项,只是因为操作文件比操作嵌入式资源更容易......

          1. 如何打开此 pdf?我可以通过启动文件的默认 pdf 查看器来打开此 pdf,也可以使用 System.WinForms.WebBrowser 工具来显示它。但是,如果我选择第二个选项,我不确定如何访问存储在资源中的文件或在安装文件夹中找到它。

          恕我直言,网络浏览器不是一个很好的选择...并非所有 PDF 阅读器都提供好的浏览器插件,无论如何,用户在独立阅读器应用程序中阅读文档可能会更舒服

          【讨论】:

            猜你喜欢
            • 2023-03-31
            • 2013-08-02
            • 2014-04-08
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-04-07
            相关资源
            最近更新 更多