在Access 2007上,有没有办法在表单上显示PDF的内容,即使它只是第一页?此PDF作为附件保存在表格中。
答案 0 :(得分:3)
免责声明:此答案仅适用于存储在数据库外部的PDF文件作为单独的文件。它们可以通过网络连接定位,但我不知道如何直接从数据库表中访问它们。这个site gives a thorough guide to using the attachments,但没有显示如何自动显示它们。它可能不是Access提供的功能。
您可以显示Internet Explorer可以使用Microsoft Web Browser
控件显示的任何内容。
添加控件后,您可以导航到表单加载或打开事件期间要显示的内容。
例如,如果控件被调用WebBrowser0
,那么以下内容将起作用:
Private Sub Form_Load()
Me.WebBrowser0.Navigate2 "C:\example.pdf" 'Substitute the actual address here.
End Sub
这是一种用于在Access中显示其他内容的极其通用的方法。您可以找到更多信息here.
答案 1 :(得分:0)
我知道用于预览PDF的两种方法(Daniel和Adobe Active X控件建议的WebBrowswer)需要将文件路径传递给控件。
我建议从附件字段中提取文件并将其保存到临时位置,例如C:\Documents and Settings\username\AppData
。这可以通过使用vba Environ
命令找到。
使用嵌入式DAO记录集中的SaveToFile
方法(即附件存储在内存中的方式)来提取文件。
假设每条记录都有一个名为 AttachedFile
的字段,并且每条记录只有一个附加的PDF。表单使用名为 PreviewBrowser
的WebBrowser控件来查看PDF
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
记录集来完成。