2016-11-10 78 views
1

我使用iTextsharp创建PDF,然后在web浏览器控件中显示PDF预览。从预览中,用户可以使用默认值保存或打印Adobe Reader的按钮强制网页浏览器仅在Adobe Acrobat Reader上显示PDF文件

使用Adobe Reader作为默认PDF查看器的Windows x64位一切正常。

在Windows x64位上使用相同的程序,但使用Foxit Reader作为默认PDF在完整的应用程序窗口中打开福昕阅读器上的文件,位于我的程序外部。

我需要管理它。

我的代码是这样

Dim PathToPDF As String 
PathToPDF = DirectoryOfMyApp & "\ReportPreview.pdf" 
ReportPreviewWebBrowser.Navigate(PathToPDF) 

凡DirectoryOfMyApp只得到C:或d:硬盘的盘符。

我看这个链接 How to start an Adobe Reader or Acrobat from VB.NET?

但像

ReportPreviewWebBrowser.Navigate("acrobat", PathToPDF) 

didn't工作线,我认为WebBrowser控件鸵鸟政策有选择的PDF查看器

选项https://msdn.microsoft.com/es-es/library/system.windows.forms.webbrowser(v=vs.110).aspx

有没有办法设置网页浏览器使用Ado仅限Acrobat Reader或强制任何其他PDF查看器在Web浏览器控件内显示PDF?

+2

'有没有办法将浏览器设置为仅使用Adobe Acrobat Reader或强制任何其他PDF浏览器在Web浏览器控件中显示PDF?'简单的回答***没有***。 – Codexer

+0

是这样的吗? “但是如果你只需要在你的程序中显示PDF文件,Adobe提供了一个可以添加到VB.NET工具箱的ActiveX COM控件,它可以免费完成这项工作,它可能是用来显示PDF文件的工具无论如何:免费的Adobe Acrobat PDF阅读器。“ – fedeteka

回答

2

我同意Zaggler对他的评论。您正在对最终用户计算机上安装的软件的某个特定点进行假设。除非你打算让应用程序的PDF阅读器成为依赖安装的一部分或者熟悉.NET,否则你不能保证他们有这个程序可以使用。你也不能保证它的安装位置。

但是,对于基于Windows的进程,您可以在VB.NET中进行廉价的黑客攻击。您可以使用OLE的System.Diagnostics.Process()

Sub Main() 
    Dim nProcess = New System.Diagnostics.Process() 
    nProcess.Start($"D:\PdfFile.pdf") 
End Sub 

在这个例子中,我做了一个快速的文件位置,你可以尝试以确保它不会改变或者是在你的应用程序的运行过程的有效位置夹。在开发过程中,这实际上是低端技术,但它基本上是这样说的:“让我在这个位置运行一个进程,任何进程,我不在乎它是什么,使用Windows默认值来确定如何处理它“。

因此,当我在Windows 10 Dev框中运行此功能时,它会加载边缘以显示它,在家中它会启动Adobe Viewer。它只是在操作系统选择使用该文件扩展名的情况下打开文件。对于强化代码来说不够迷人或者非常好,但是当你想要快速发生的时候它就可以工作。

+0

我还发现了另一个工作解决方案:福昕阅读器必须安装Web浏览器插件选项。在这种情况下,PDF将显示在网页浏览器控件内部,如我所愿。谢谢。 – fedeteka

+1

只要小心,因为你仍然强迫依赖。如果该依赖关系不存在,则不起作用。第三方依赖关系跟踪和安装在许多开发者的世界中是一场噩梦。 – djangojazz

+0

感谢您的警告 – fedeteka

0

不,你不能这样做。

甚至不能保证安装Adobe Reader。

阅读器可能不存在于机器上。它不是内置于Windows,并不是每个人都使用它。即使是这样,FoxIt也不是唯一的选择。最大的一点是Chrome包含它自己的PDF阅读器。

相关问题