【问题标题】:How do I open a PDF included in my C# project in a browser window upon link click?单击链接后,如何在浏览器窗口中打开 C# 项目中包含的 PDF?
【发布时间】:2020-07-05 23:24:56
【问题描述】:

我的项目中有一个名为“Guides”的文件夹,并添加了“My Admin Guide.pdf”。

相关的xaml:

<TextBlock Margin="20,20,0,0" TextWrapping="Wrap">
    <Hyperlink x:Name="Documentation_Hyperlink" NavigateUri="/Guides/My Admin Guide.pdf" TargetName="_blank" RequestNavigate="Documentation_Hyperlink_RequestNavigate">
        Click Here for the Admin Guide
    </Hyperlink>
</TextBlock>

在代码隐藏中:

private void DDI_Documentation_Hyperlink_RequestNavigate(object sender, RequestNavigateEventArgs e)
{
    Process.Start(e.Uri.ToString());
}

当我测试时,我得到一个异常“系统找不到指定的文件”。我已验证 e.Uri.ToString() 的值为 /Guides/My Admin Guide.pdf。我该如何正确地做到这一点?

【问题讨论】:

  • 您可能需要使用ProcessStartInfo 并将WorkingDirectory 设置为可执行文件的目录。
  • 使用 SysInternals Process Monitor 工具查看您的应用程序正在寻找的位置。我很确定@dourhigharch 是对的
  • 我们需要知道您是如何“添加“我的管理员指南.pdf”的、您是如何进行测试的以及您的部署技术,以便告诉您如何以编程方式找到可执行文件的目录。跨度>
  • 我通过将 PDF 放在文件夹中然后将“添加现有项目”添加到项目中来添加它们。我正在通过单击超链接进行测试,这给了我找不到文件的错误。

标签: c# wpf xaml pdf


【解决方案1】:

没有简单的链接方法可以做到这一点,但是一旦实践过的方法并不那么复杂。 首先确保您自己 PDF 文档是作为嵌入式资源生成的。 然后按照以下步骤操作:

Assembly assembly = Assembly.GetExecutingAssembly();
Stream stream = assembly.GetManifestResourceStream("{your_assembly_name}.{your_folder_and_file_name}");
FileInfo source = new FileInfo("{a_name_for_the_file}");
byte[] b;

using (BinaryReader br = new BinaryReader(stream))
{
  b = br.ReadBytes((int)stream.Length);
}
File.WriteAllBytes(source.FullName, b);

这会将文件保存到用户计算机的文档上,但File 将包含轻松打开它的路径。 如果您希望用户在他的计算机上没有它,您可以在创建 FileInfo 时使用 System.IO.Path.GetTempPath() 将其“隐藏”到临时文件夹中。

希望对你有帮助。

【讨论】:

  • 谢谢!我实际上想出了类似的东西,但是正在复制到用户的临时目录(环境变量)。谢谢!
猜你喜欢
  • 2012-11-12
  • 2017-11-22
  • 2022-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-26
  • 1970-01-01
  • 2015-01-11
相关资源
最近更新 更多