在 Access 2007 上,有没有办法在表单上显示 PDF 的内容,即使它只是第一页?此 PDF 作为附件保存在表格中。
2 回答
免责声明:此答案仅适用于作为单独文件存储在数据库之外的 PDF 文件。它们可以通过网络连接定位,但我不知道如何直接从您的数据库表中访问它们。该站点提供了使用附件的详尽指南,但没有说明如何实际自动显示它们。这可能是 Access 未提供的功能。
Microsoft Web Browser
您可以使用控件显示 Internet Explorer 可以显示的任何内容。
添加控件后,您可以导航到要在表单的加载或打开事件期间显示的任何内容。
例如,如果调用控件,WebBrowser0
则以下操作将起作用:
Private Sub Form_Load()
Me.WebBrowser0.Navigate2 "C:\example.pdf" 'Substitute the actual address here.
End Sub
这是一种非常通用的方法,用于在 Access 中显示其他内容。您可以在此处找到更多信息。
我所知道的用于预览 PDF 的唯一两种方法(Daniel 建议的 WebBrowser 和 Adobe Active X 控件)需要将文件路径传递给控件。
我建议从附件字段中提取文件并将其保存到临时位置,例如C:\Documents and Settings\username\AppData
. 这可以通过使用 vbaEnviron
命令找到。
使用嵌入式 DAO 记录集中的方法提取文件SaveToFile
(这是附件在内存中存储的方式)。
示例代码
假设每条记录都有一个名为的字段 AttachedFile
,并且每条记录只有一个附加的 PDF。表单正在使用名为 PreviewBrowser
查看 PDF的 WebBrowser 控件
Private Sub Form_Current()
On Error GoTo ExitSub
Dim FormRS As DAO.Recordset
Set FormRS = Me.Recordset
Dim RecAtt As DAO.Recordset
If (Me.AttachedFile.AttachmentCount > 0) Then
Set RecAtt = FormRS.Fields("AttachedFile").Value
RecAtt.OpenRecordset
Dim Path As String
FilePath = Environ("APPDATA") & "\Preview.pdf"
If (Dir(FilePath) <> "") Then Kill FilePath
RecAtt.Fields("FileData").SaveToFile FilePath
Me.PreviewBrowser.Navigate2 FilePath
End If
ExitSub:
RecAtt.Close
End Sub
当然,如果给定记录有多个附件,则代码需要稍微复杂一些,但这可以通过操作RecAtt
记录集来完成。