c# - 单击链接后,如何在浏览器窗口中打开 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。我该如何正确地做到这一点?
解决方案
没有简单的链接方法可以做到这一点,但是一旦实践过的方法并不那么复杂。首先确保您自己 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 时将其“隐藏”到临时文件夹中。
希望它可以帮助你。
推荐阅读
- umd - Parceljs 构建 UMD
- ios - NavigationController Push 不工作 ios 11
- c++ - 如何 const 映射变量
- amazon-web-services - 为什么我的 EC2 Auto Scaling 组在增长?
- api - Twitter API 不返回所有关注者,即使使用光标和避免速率限制
- php - 为什么从前端更新元需要我得到旧值?
- db2 - 如何禁用旧应用程序使用 XA 数据源?
- java - IllegalMonitorStateException:对象未在 wait() 之前被线程锁定
- dns - docker swarm 如何使用 dns 获取所有容器 ip?
- json.net - .netcore 和 Azure 的 Newtonsoft 版本问题