Отобразить предварительный просмотр PDF в отчете Ms Access, используя путь к файлу PDF - PullRequest
0 голосов
/ 03 октября 2019

Я новичок в MS Access. У меня есть расположение файла PDF в текстовом поле. Я хочу, чтобы при доступе к отчету загружался затем конкретный предварительный просмотр pdf-файла в этом отчете (чтение pdf из расположения файла)Как мне этого добиться? Пожалуйста, помогите?

Ответы [ 2 ]

1 голос
/ 01 ноября 2019

Вы можете отобразить PDF в отчете, преобразовав его страницы в изображения и отображая их. С wsh.Run вы можете извлечь во время события Report_Load, а затем сохранить пути страниц во временной таблице.

  1. Иметь Irfanview с установленным PDF-плагином.
  2. В Front-Endсоздайте таблицу с именем TmpExtractedPages с одним полем Short-Text с именем Path для хранения путей извлеченных страниц.
  3. Создание отчета с помощью 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 копию при запуске, как я).

0 голосов
/ 04 октября 2019

Если вам просто нужно отобразить pdf-файл, вы можете создать кнопку рядом с текстовым полем и в событии его при нажатии:

Private Sub cmdView_Click()
    If Nz(Me.txtPdfLocation) <> "" Then
       Application.FollowHyperlink Me.txtPdfLocation
    End If
End Sub
...