我是 MS Access 的新手。我在文本框中有 pdf 文件位置。我想在访问报告加载时,然后在该报告中预览特定的 pdf 文件(从文件位置读取 pdf)。我怎样才能实现它?请帮忙?
问问题
1929 次
2 回答
1
您可以通过将其页面转换为图像并显示它们来在报告中显示 PDF。您可以在事件wsh.Run
期间提取Report_Load
,然后将页面路径存储在临时表中。
- 安装带有 PDF-Plugin 的 Irfanview。
- 在前端,创建一个名为的表
TmpExtractedPages
,其中一个Short-Text
字段命名Path
为存储提取页面的路径。 - 使用 Record-Source 创建报告。
SELECT TmpExtractedPages.Path FROM TmpExtractedPages;
- 在Detail-Section(无页眉/页脚部分)中添加一个适合页面并将其绑定到的Picture-Control
Path
- 将以下代码放入
Report_Load
事件中
Private Sub Report_Load()
Dim TempPath As String
TempPath = CurrentProject.Path & "\TempPdf"
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
If fso.FolderExists(TempPath) Then
fso.DeleteFolder TempPath
End If
fso.CreateFolder TempPath
Dim PdfFile As String
PdfFile = Me.OpenArgs
Const PathToIrfanView As String = "C:\Program Files (x86)\IrfanView\i_view32.exe"
Dim CmdArgs As String
CmdArgs = Chr(34) & PdfFile & Chr(34) & " /extract=(" & Chr(34) & TempPath & Chr(34) & ",jpg) /cmdexit" 'see i_options.txt in IrfanView folder for command line options
Dim ShellCmd As String
ShellCmd = Chr(34) & PathToIrfanView & Chr(34) & " " & CmdArgs
Debug.Print ShellCmd
Dim wsh As Object
Set wsh = CreateObject("WScript.Shell")
Const WaitOnReturn As Boolean = True
Const WindowStyle As Long = 0
wsh.Run ShellCmd, WindowStyle, WaitOnReturn
With CurrentDb
.Execute "Delete * From TmpExtractedPages", dbFailOnError
Dim f As Object
For Each f In fso.GetFolder(TempPath).Files
.Execute "Insert Into TmpExtractedPages (Path) Values ('" & Replace(f.Path, "'", "''") & "');", dbFailOnError
Next f
End With
Set fso = Nothing
Set wsh = Nothing
End Sub
您提供 PDF 的路径以OpenArgs
在打开的报告中显示为参数:
DoCmd.OpenReport "rpt_pdf", acViewPreview, , , , "path\to\pdf"
请记住,如果您稍后不压缩它(或者只是像我一样在开始时部署一个新的前端副本),那么添加然后删除临时表中的记录会使您的数据库膨胀。
于 2019-11-01T05:25:23.077 回答
0
如果您只需要显示 pdf 文件,您可以在文本框旁边及其点击事件中创建一个按钮:
Private Sub cmdView_Click()
If Nz(Me.txtPdfLocation) <> "" Then
Application.FollowHyperlink Me.txtPdfLocation
End If
End Sub
于 2019-10-03T22:01:11.540 回答