使用C#在Windows窗体中查看PDF

42

有没有办法在 Winforms 工具中查看 PDF 文件?我看到一些解决方案,比如将 PDF 文件转换为图像并在图片框中显示它们。但是,我想问的是是否可以作为 PDF 查看文件。 Adobe 或 Microsoft 是否有支持此功能的工具?


这个问题在一个WPF的帖子中得到了回答,所以我不确定它是否有效,但是它是为winforms设计的... https://dev59.com/z3VD5IYBdhLWcg3wNIrc#55177 - LD7
2
并非所有最终用户计算机都会安装Adobe Reader或其他PDF查看器(带有IE插件)。因此,您需要一个本地的.NET控件来显示PDF。Gnostice在PDFOne组件套件中提供了一个.NET的PDF浏览器控件。免责声明:我在这家公司工作。 - BZ1
有趣!!我在问这个问题时已经完成了我正在工作的项目..但我一定会尝试这个!!谢谢提示 ;) - Majd
5个回答

31

您可以使用 System.Diagnostics.Process.Start 或者通过Interop使用 WIN32 ShellExecute 函数 打开PDF文件,以使用默认的查看器:

System.Diagnostics.Process.Start("SOMEAPP.EXE","Path/SomeFile.Ext");

[System.Runtime.InteropServices.DllImport("shell32. dll")]
private static extern long ShellExecute(Int32 hWnd, string lpOperation, 
                                    string lpFile, string lpParameters, 
                                        string lpDirectory, long nShowCmd);

另一种方法是在你的表单中放置一个 WebBrowser 控件,然后使用Navigate方法打开 PDF 文件:

ThewebBrowserControl.Navigate(@"c:\the_file.pdf");

8
他希望将他正在做的Windows窗体项目作为读者的服务端,而不是启动它。 - Saif al Harthi
1
是的,正如Saif所说,我需要在我的应用程序内查看PDF文件,而不是启动PDF阅读器 :) - Majd
1
将WebBrowser控件添加到您的窗体中。 - ArBR
是的,我想我会选择那个...谢谢。 - Majd
你能在WebBrowser控件中显示PDF吗?我也在尝试同样的事情,但是应用程序没有在控件内打开它,而是启动了第三方PDF查看器应用程序来显示PDF。 - Soumyaansh
2
@Soumyaansh,你能解决这个问题吗?因为我也遇到了同样的问题。 - V K

31

我认为最简单的方法是使用Adobe PDF阅读器COM组件

  1. 右键点击工具箱并选择“选择项目”
  2. 选择“COM组件”选项卡
  3. 选择“Adobe PDF Reader”,然后单击确定
  4. 将控件拖放到您的窗体上,并修改“src”属性以读取您想要阅读的PDF文件

希望这可以帮到您


我该如何调整这个控件的大小,使其不会占用整个表单但仍然可以随着表单的大小变化而调整? - thewikus
1+ 完美,这应该是答案 :) - Haseeb
1
我在我的开发机上有这个组件。它是否也能在没有安装Adobe的机器上运行? - Stephan Stamm
1
它将无法在未安装Adobe PDF Reader的计算机上运行。您将收到“Class not Registered”异常。相关帖子: https://stackoverflow.com/questions/4041659/comexception-0x80040154-class-not-registered-when-using-axacropdflib/17894788 - Senthi Sri


3

仅用于查看,IE浏览器控件应该可以正常工作。 - Paul Sasik

0

http://www.youtube.com/watch?v=a59LvC6BOuk

请使用上面的链接。
private void btnopen_Click(object sender, EventArgs e){
    OpenFileDialog openFileDialog1 = new OpenFileDialog();
    if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK){
        axAcroPDF1.src = openFileDialog1.FileName;
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接