在 .NET 中打开 pdf

2024-03-05

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

我本质上需要两件事:

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

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

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


我们就是这样做的:

将所有帮助文件夹放入%ApplicationFolder%/Help。所以,你的pdf将有路径%ApplicationFolder%/Help/Manual.pdf。您可以创建一个 Help 文件夹并将 pdf 文件放入您的 csproject 中,然后将整个文件附加到csproject,并将其设置为copy always。这样你就可以确保你复制到的pdf文件Help文件夹始终是最新的。

并将所有内容(当然不包括 pdb 文件)从调试文件夹复制到部署文件夹。

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

这是代码片段:

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文件夹中)即可获取

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 .NET 中打开 pdf 的相关文章

  • 免费/开放图书馆查找相似图像

    我正在寻找稳定且成熟的免费 开源库 允许比较两个图像 我找到了这个 但我想知道你是否使用更好的 相似图像查找器 C 和 RGB 中的 NET 图像处理 http similarimagesfinder codeplex com 我做的很简单
  • 多个 WCF 服务实现相同的服务契约接口

    多个wcf服务是否可以实现同一个服务契约接口 我想要做的是允许测试服务与真实服务互换 并指定在配置文件中使用哪个服务 例如 ServiceContract public interface IUselessService Operation
  • 堆内存问题

    有一个 WCF 自托管服务必须在 99 的时间内正常工作 有时我们会遇到这样的记忆问题 但问题发生后 服务一切正常 我们该如何处理这个问题 任何关于提供能够在不同情况下生存的强大服务的提示和要点都非常受欢迎 我不太确定问题出在哪里 但内存泄
  • 在 .NET 中获取远程计算机上环境变量的实际值

    我正在尝试获取实际值 of 环境变量 这是我到目前为止所拥有的 string query string Format Select VariableValue From Win32 Environment Where Name 0 vari
  • GetCharIndexFromPosition() 获取最后一个字符

    我想获取光标下的子字符串富文本框 http msdn microsoft com en us library system windows controls richtextbox 28v vs 110 29 aspx private vo
  • 如何使 sgen.exe 保留程序集的版本?

    我想为我的程序集创建一个序列化程序集 sgen做得很好 但我不知道如何让它为序列化程序集分配与源程序集相同的版本 有任何想法吗 sgen似乎默认采用源程序集版本 这是相当合理的 这是我的运行方式 没有什么特别的 PathToSDK Micr
  • 如何构建具有 64 位 COM 互操作的 64 位 .NET DLL?

    我需要构建一个针对 x64 的托管 DLL 并通过 x64 COM 公开它 我需要一个演练 好文章等等 互操作相当简单 但是当你谈论双方的x64时 我找不到任何东西 看一眼这次讨论 http bytes com forum thread58
  • 带 ref 参数的委托

    有没有办法在下面的代码中维护相同的功能 但不必创建委托 我正在与第 3 方 API 进行交互 其中包含许多不同的 DeleteSomethingX ref IntPtr ptr 方法 并且我正在尝试集中 IntPtr Zero 检查的代码
  • 在更新面板中提交表单后运行javascript?

    这真让我抓狂 我在这里阅读了至少 5 个与我的问题密切相关的问题 可能还通过谷歌搜索阅读了 5 页左右的内 容 我就是不明白 我试图在用户填写 已提交注册 的表单后出现一个 jqueryui 对话框 然后重定向到另一个页面 但我一生都无法让
  • 如何在 Windows 10 PRO 上的 Visual Studio 2019 中添加对 Windows.ApplicationModel.DataTransfer 命名空间的引用

    Windows 10 Pro Visual Studio 2019 Net 版本 4 8 03752 几天前全新安装了所有内容 我正在尝试将 Windows ApplicationModel DataTransfer 命名空间添加到 Vis
  • “服务 X 的应用程序端点为零”,除非我在代码中添加端点 - 为什么?

    我跟着这篇 MSDN 文章 http msdn microsoft com en us library ms733069 aspx完全创建托管在托管 NT 服务中的 WCF 服务 当我在服务控制台中单击 开始 时 我会在事件查看器中看到以下
  • 使用 SSH.NET SftpClient 设置扩展文件属性

    在使用 Renci SSH NET SFTP 库将文件从 Windows 上传到远程计算机 Ubuntu 16 04 LTS 后 我尝试使用扩展文件属性来存储一些信息 但属性没有得到保留 这就是我尝试设置扩展属性的方式 SftpFileAt
  • 在Python中读取PDF属性/元数据

    如何使用 Python 读取 PDF 文件中存储的属性 元数据 例如标题 作者 主题和关键字 Try pdfminer https github com euske pdfminer from pdfminer pdfparser impo
  • 装载组件

    有很多讨论展示了如何从 BIN 和 GAC 加载程序集 我的问题更笼统 我很想知道程序集加载是如何工作的 举例来说 在BIN文件夹中我们可以有 A dll A dll config A dll config 文件可能如下所示
  • CS0133“分配给‘标识符’的表达式必须是常量”-这背后的原因是什么?

    凭借大量的 C 背景 我习惯于编写以下内容 const int count some non trivial stuff here for int i 0 i lt count i 我预计在 C 中同样可以正常工作 然而 byte buff
  • 从 ProcessThreadCollection 中按名称获取正在运行的线程

    在搜索了 Stack Overflow 问题并进行了一些谷歌搜索后 我仍然没有得到它 我知道您可以使用 Thread isAlive 方法检查单个线程是否正在运行 但我想检查特定的 FooThread 是否仍在当前进程的所有正在运行的线程之
  • 当应用程序继续运行时,如何清理 .NET 中的 COM 引用?

    我正在开发一个 NET 程序 该程序启动 Excel 的新实例 执行一些工作 然后结束 但必须让 Excel 保持运行 稍后 当程序再次运行时 它将尝试挂钩到前一个实例 在这种情况下处理 COM 对象释放的最佳方法是什么 如果我第一次没有对
  • 等于方法实现助手 (C#)

    每次我编写一些数据类时 我通常都会花很多时间编写 IEquatable 实现 我写的最后一堂课是这样的 public class Polygon public Point Vertices get set 实施 IEquatable 是一项
  • 如何使用 HttpClient 验证 Pardot API

    我花了大约一天的时间尝试对 Pardot API 进行身份验证 它不喜欢我尝试发布消息正文的方式 所以我想发布对我有用的解决方案 如果您有任何建议或替代方案 我想听听 ServicePointManager SecurityProtocol
  • 为什么.net中的数组只实现IEnumerable而不实现IEnumerable

    我正在实现自己的 ArrayList 类 当我意识到这一点时 我感到很惊讶 public System Collections Generic IEnumerator

随机推荐