Вы можете отобразить PDF в отчете, преобразовав его страницы в изображения и отображая их. С wsh.Run
вы можете извлечь во время события Report_Load
, а затем сохранить пути страниц во временной таблице.
- Иметь Irfanview с установленным PDF-плагином.
- В Front-Endсоздайте таблицу с именем
TmpExtractedPages
с одним полем Short-Text
с именем Path
для хранения путей извлеченных страниц. - Создание отчета с помощью Record-Source.
SELECT TmpExtractedPages.Path FROM TmpExtractedPages;
Добавить Picture-Control в Detail-Section (без заголовка / нижнего колонтитула), который подходит к странице и привязать его к
Path
Вставить следующий код в
Report_Load
event
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"
Имейте в виду, что добавление, а затем удаление записей во временной таблице, переполнит вашу базу данных, если вы не сожмете ее позже (или просто развернете свежую Front-End копию при запуске, как я).