在 MS Access 和 Foxit Reader 中预览 pdf 文件 webbrowser 控件触发打印事件

Previewing pdf files in MS Access and Foxit Reader webbrowser control fires print event

长话短说,当您使用 Web browser controlVBA 打开嵌入在表单中的 pdf 文件时,pdf reader 会自动触发打印事件。

当前设置 Win1064Bit/Office365 版本 16.0.13628.20234 / Foxit Reader

这是一个截图来说明发生了什么

这个事件太烦人了,它不是被触发了一次,而是被触发了两次。

用于打开 PDF 文件的代码

Private Sub Command2_Click()
    Me.WebBrowser0.Navigate2 "C:\Temp\Sample.pdf"
End Sub

像这样更改 Foxit Reader 首选项

  • 打开福昕Reader

  • 转到文件 |偏好 |文件

  • 取消选中“在网络浏览器中,默认以阅读模式显示 PDF”


如果要嵌入文件,需要使用HTML。否则,除非特定插件允许,否则您具有默认的“导航下载”行为。

我使用以下代码创建一个显示 pdf 的简单网页:

Dim wb As Object
Set wb = WebBrowser0.Object 
Dim fileLocation As String
fileLocation = "C:\Temp\Sample.pdf"
wb.Silent = True
With wb
    .Navigate2 "about:blank"
    Do Until .ReadyState = 4 '=READYSTATE_COMPLETE
        'This is a somewhat inefficient way to wait, but loading a blank page should only take a couple of milliseconds
        DoEvents
    Loop
    .Document.Open
    .Document.Write "<!DOCTYPE html><HTML><HEAD><TITLE>My title</TITLE></HEAD><BODY scroll=""auto"" style=""margin: 0px; padding: 0px;"">" & _
                        "<embed src=""" & fileLocation & """  width=""100%"" height=""100%"" />" & _
                        "</BODY></HTML>"
    .Document.Close
End With

这适用于 Adob​​e Reader、Foxit 或几乎所有支持在 Internet Explorer 中查看 PDF 的 PDF 查看器。

不要调整 PDF 查看器设置以适应您的应用程序。相反,创建一个适用于所有 PDF 查看器的应用程序,以避免在用户实际使用该 PDF 查看器并希望设置不同或想要不同的 PDF 查看器时出现大量麻烦。