首页 > 解决方案 > 单击链接后,如何在浏览器窗口中打开 C# 项目中包含的 PDF?

问题描述

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

相关的xml:

<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。我该如何正确地做到这一点?

标签: c#wpfxamlpdf

解决方案


没有简单的链接方法可以做到这一点,但是一旦实践过的方法并不那么复杂。首先确保您自己 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将包含轻松打开它的路径。如果您更喜欢用户在他的计算机上没有它,您可以System.IO.Path.GetTempPath()在创建 FileInfo 时将其“隐藏”到临时文件夹中。

希望它可以帮助你。


推荐阅读