我有一个菜单条,其中有一个我创建的标签为“内容”的选项卡。我希望能够单击“内容”选项卡,然后弹出一个窗口,其中包含列出内容的 pdf 文件。我有一个 pdf 文件,其中列出了保存到桌面的内容。有没有办法将此 pdf 文件添加到 Visual Studio,以便当我单击“内容”选项卡时,将打开该 pdf 文件?
我不想单击另一个按钮来搜索我的计算机中的文件,例如使用 OpenFileDialog。我只想单击“内容”选项卡并让它打开一个包含 pdf 文件的窗口。
最佳答案
有多种方法可以做到这一点。
1) 一种方法是从您的应用程序启动一个进程,该进程将在您的 PC 上打开默认注册的 PDF 文件查看器(例如 Adobe Reader),并将 PDF 文件的完整路径作为参数传递:
在这里,您可以了解如何通过文件扩展名(在您的情况下为“.pdf”)确定默认处理程序应用程序的路径:
http://www.pinvoke.net/default.aspx/shlwapi/AssocQueryString.html
string execPath = GetAssociation(".pdf");
一旦您知道可执行文件的路径,您就可以使用 PDF 文件的路径作为参数来启动它:
using System.Diagnostics;
...
// Start new process
Process.Start(execPath, "C:\\myfile.pdf").WaitForExit(0);
2) 另一种方法是在应用程序中创建一个 Windows 表单并向其中添加 Web 浏览器控件。然后可以通过编程方式将 Web 浏览器控件“导航到”您的特定 PDF 文件。假设您的 Internet Explorer 已经可以通过在其窗口中使用 Adobe Reader 之类的工具来显示 PDF 文件,即作为内联附件:
将项目中的引用添加到 Microsoft Internet Controls 1.1
(右键单击“引用”>“添加引用...”>“COM”)。
在您的表单代码中(此处 panePdfViewer
是一个占位符 System.Windows.Forms.Panel
控件):
private AxSHDocVw.AxWebBrowser axWebBrowser;
...
private void InitializeWebControl()
{
this.SuspendLayout();
this.axWebBrowser = new AxSHDocVw.AxWebBrowser();
((ISupportInitialize)(this.axWebBrowser)).BeginInit();
this.axWebBrowser.Anchor = ((AnchorStyles)((((AnchorStyles.Top | AnchorStyles.Bottom)
| AnchorStyles.Left)
| AnchorStyles.Right)));
this.axWebBrowser.Enabled = true;
this.axWebBrowser.Location = this.panelPdfViewer.Location;
this.axWebBrowser.Size = this.panelPdfViewer.Size;
((ISupportInitialize)(this.axWebBrowser)).EndInit();
this.axWebBrowser.Visible = false;
this.Controls.Add(this.axWebBrowser);
this.ResumeLayout(false);
}
然后:
// Clear browser
object blank = "about:blank";
this.axWebBrowser.Navigate2(ref blank);
// Display file
object loc = "file:///" + System.IO.Path.GetFullPath(fileName).Replace('\\', '/');
object null_obj_str = null;
object null_obj = null;
this.axWebBrowser.Navigate2(ref loc, ref null_obj, ref null_obj, ref null_obj_str, ref null_obj_str);
3)第三种方法是使用可以显示PDF文件的第三方控件库。
关于c# - 将 pdf 文件添加到 Visual Studio 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24272336/