Immer wieder erhalten wir Fragen danach, wie man PDF-Dokumente einfach in Access-Formularen anzeigen kann. Die einfachste Variante scheint die mit dem Web-Browser-Steuerelement zu sein, mit dem man zu einem auf der Festplatte befindlichen PDF-Dokument navigiert. Der vorliegende Beitrag zeigt nicht nur, wie Sie das Dokument anzeigen, sondern liefert auch noch einige Möglichkeiten für die Handhabung des PDF-Dokuments. Dazu gehören das Zoomen, Drucken, Einstellen verschiedener Ansichten und Layouts und vieles mehr.
Voraussetzungen
Die Lösung zu diesem Beitrag haben wir auf einem Rechner mit Windows 10, Office 365 und Adobe Acrobat Reader DC in der Version 2020.012.20041 entwickelt und getestet.
Wenn wir im WebBrowser-Steuerelement die Navigate2-Methode verwenden und als Parameter den Pfad zu einem PDF-Dokument angeben, wurde unter den oben genannten Voraussetzungen das angegebene PDF-Dokument innerhalb des Webbrowser-Steuerelements angezeigt – so, als ob Sie vom Internet Explorer aus ein PDF-Dokument öffnen.
Formular mit Webbrowser-Steuerelement anlegen
Die erste Aufgabe ist das Hinzufügen eines Web-Browser-Steuerelements zu einem neuen Access-Formular. Das Formular legen wir in der Beispieldatenbank unter dem Namen frmPDFImWebbrowser an.
Diesem fügen wir nun in der Entwurfsansicht ein Web-Browser-Steuerelement hinzu, das wir im Ribbon unter Entwurf|Steuerelemente|Webbrowsersteuerelement finden.
Nach dem Hinzufügen sieht das Steuerelement recht unscheinbar aus (siehe Bild 1). Für das neue WebBrowser-Steuerelement legen wir den Namen ctlWebbrowser fest.
Bild 1: Anlegen des WebBrowser-Steuerelements
Damit sich das WebBrowser-Steuerelement beim Vergrößern des Formulars mit vergrößert, stellen wir die beiden Eigenschaften Horizontaler Anker und Vertikaler Anker auf den Wert Beide ein.
Damit keine unnötigen Elemente im Formular angezeigt werden, legen wir außerdem für die Eigenschaften Datensatzmarkierer, Navigationsschaltflächen, Bildlaufleisten und Trennlinien den Wert Nein fest.
Schaltfläche zum Öffnen eines PDF-Dokuments
Nun beginnen wir mit den Elementen, die wir für das Öffnen eines PDF-Dokuments im WebBrowser-Steuerelement benötigen. Dazu fügen wir eine einfache Schaltfläche namens cmdPDFOeffnen hinzu.
Für diese hinterlegen wir die folgende Ereignisprozedur:
Private Sub cmdPDFOeffnen_Click() Dim strPDF As String strPDF = CurrentProject.Path & " est.pdf" Me!ctlWebbrowser.Object.Navigate strPDF End Sub
PDF anzeigen
Der erste Wechsel in die Formularansicht ist ernüchternd: Das WebBrowser-Steuerelement zeigt lediglich eine Meldung über eine ungültige Adresse an (siehe Bild 2).
Bild 2: WebBrowser-Steuerelement ohne Inhalt
Das ändert sich allerdings nach einem Klick auf die Schaltfläche cmdPDFOeffnen. Das WebBrowser-Steuerelement zeigt dann wie in Bild 3 das gewünschte PDF-Dokument an.
Bild 3: PDF-Document im WebBrowser-Steuerelement
Leeres Browserfenster anzeigen
Wir wollen dem Benutzer beim Öffnen des Formulars nicht die Meldung über die ungültige Adresse präsentieren, sondern ein leeres Browser-Fenster. Dabei erledigen wir direkt ein paar Vorarbeiten für die folgenden Schritte. Als Erstes fügen wir dem Klassenmodul des Formulars ganz oben die folgende Deklaration einer Variablen für das Webbrowser-Element hinzu. Dieses statten wir mit dem Schlüsselwort WithEvents aus, damit wir seine Ereignisse im Klassenmodul implementieren können. Eines davon benötigen wir nämlich:
Dim WithEvents objWebbrowser As WebBrowser
Danach implementieren wir eine Ereignisprozedur für das Ereignis Beim Laden des Formulars. Hier füllen wir direkt die Variable objWebBrowser mit dem Element, das in der Eigenschaft Object des WebBrowser-Steuerelements steckt. Der Hintergrund ist, dass das von uns hinzugefügte Access-Steuerelement nur ein Wrapper für das eigentliche WebBrowser-Steuerelement ist, der einige Eigenschaften und Ereignisse zur Verfügung stellt.
Wir benötigen aber auch beispielsweise ein Ereignis, das dieser Wrapper nicht bereithält. Also greifen wir mit Me!ctlWebbrowser.Object auf das darin enthaltenen WebBrowser-Steuerelement zu:
Private Sub Form_Load() Set objWebbrowser = Me!ctlWebbrowser.Object
Anschließend verwenden wir die Navigate2-Methode, um zu einer Seite namens about:blank zu navigieren. Danach zeigt das WebBrowser-Steuerelement statt der Seite mit der Meldung eine leere Seite an:
objWebbrowser.Navigate2 "about:blank"
End Sub
PDF auswählen
Das Laden des PDF-Dokuments wollen wir noch ein wenig eleganter gestalten, denn schließlich wollen wir nicht immer das gleiche PDF-Dokument laden, sondern dem Benutzer auch die Möglichkeit geben, dieses auszuwählen.
Dazu fügen wir im oberen Bereich ein Textfeld namens txtPDFDocument hinzu. Die Schaltfläche cmdPDFOeffnen statten wir mit drei Punkten als Text aus, sodass der obere Teil des Formulars nun wie in Bild 4 aussieht.
Bild 4: Steuerelemente zum Auswählen des anzuzeigenden PDF-Dokuments
Die Prozedur, die durch diese Schaltfläche ausgelöst wird, ändern wir wie folgt:
Private Sub cmdPDFOeffnen_Click() Dim strPDF As String strPDF = OpenFileName(CurrentProject.Path, _ "PDF auswählen", "PDF-Dokumente (*.pdf)") Me!txtPDFDokument = strPDF objWebbrowser.Navigate2 strPDF End Sub
Damit können wir das PDF-Dokument nun mit einem Dateiauswahl-Dialog öffnen.
Programmierung der PDF-Ansicht
Die PDF-Ansicht des Acrobat-Readers im WebBrowser-Steuerelement bietet einige Möglichkeiten zum Anzeigen von Seiten, Drucken des Dokuments oder zum Einstellen der verschiedenen Ansichten. Hier ist eine Übersicht der nachfolgend vorgestellten Methoden:
- gotoFirstPage: Navigiert zur ersten Seite des Dokuments.
- gotoPreviousPage: Navigiert zur vorherigen Seite des Dokuments.
- gotoNextPage: Navigiert zur nächsten Seite des Dokumetns.
- gotoLastPage: Navigiert zur letzten Seite des Dokuments.
- setCurrentPage: Zeigt die Seite mit der als Parameter angegebenen Seitennummer an.
- setLayoutMode: Stellt das Layout auf einen der folgenden Werte ein, den Sie als Parameter bei Aufruf übergeben: DontCare – verwendet die aktuellen Einstellungen, SinglePage – zeigt eine einzelne Seite an, OneColumn: zeigt jeweils eine Seite an, Two-ColumnLeft – zeigt zwei Seiten nebeneinander an, wobei die erste Seite auf der linken Seite beginnt (das heißt, Seite eins und zwei erscheinen ganz oben), Two-ColumnRight – zeigt ebenfalls zwei Seiten nebeneinander an, aber in der obersten Reihe erscheint nur die erste Seite, und zwar rechts.
- setPageMode: Stellt den Seitenmodus auf einen der folgenden Werte ein, den Sie als Parameter beim Aufruf der Methode übergeben: none – zeigt das Dokument ohne Lesezeichen oder Thumbnails an (Standardeinstellung), bookmarks – zeigt das Dokument und Lesezeichen an, thumbs – zeigt das Dokument und Thumbnails an.
- setView: Stellt die Ansicht ein und erwartet zum Beispiel einen der folgenden Werte als Parameter: Fit – passt die Seite so in das Steuerelement ein, dass es sowohl horizontal als auch vertikal hineinpasst, FitH – passt die Seitenbreite so an, dass die Seite horizontal in das Steuerelement hineinpasst, FitV – passt die Seitenhöhe so an, dass die Seite vertikal in das Steuerelement passt, FitB – passt die Seite ebenfalls horizontal und vertikal an das Steuerelement an.
- setShowScrollbars: Erwartet einen Boolean-Wert als Parameter, der angibt, ob die Bildlaufleisten angezeigt werden sollen oder nicht.
- setShowToolbar: Erwartet einen Boolean-Wert als Parameter, der angibt, ob die Menüleiste angezeigt werden soll oder nicht.
- LoadFile: Lädt das als Parameter angegebene PDF-Dokument und zeigt es an. Dies funktioniert allerdings erst, wenn das WebBrowser-Steuerelement bereits ein PDF-Dokument anzeigt und die Variable mit dem Verweis auf das PDF-Objekt gefüllt ist.
- printAll: Druckt den kompletten Inhalt des Dokuments, ohne einen Drucken-Dialog anzuzeigen.
- printAllFit: Druckt den kompletten Inhalt des Dokuments und erwartet einen Boolean-Wert als Parameter, der angibt, ob die PDF-Seite in den bedruckbaren Bereich des Druckers eingepasst werden soll.
- printWithDialog: Soll einen Drucken-Dialog öffnen, mit dem der Benutzer selbst die Druck-Einstellungen festlegen kann. Der Drucken-Dialog wurde unter unserer Konfiguration allerdings nicht angezeigt.
- printPages: Erwartet zwei Parameter, die angeben, welche die erste und welche die letzte zu druckende Seite ist. Bleibt einer dieser Parameter leer, wird die erste beziehungsweise letzte Seite angenommen.
- printPagesFit: Erwartet drei Parameter, von denen die ersten beiden angeben, welche die erste und die letzte zu druckende Seite ist. Der dritte Parameter legt fest, ob die PDF-Seite in den bedruckbaren Bereich des Druckers eingepasst werden soll. Bleiben der erste oder zweite Parameter leer, verwendet die Methode die erste oder letzte Seite des Dokuments als Werte.
- src: Eine der wenigen Eigenschaften des Objekts. Hiermit können Sie den Pfad zum aktuell angezeigten PDF-Dokument ermitteln.
- setZoom: Erwartet einen Parameter, der angibt, welcher Zoom-Faktor eingestellt werden soll. Der Wert 100 entspricht 100%.
- setZoomScroll: Erwartet drei Parameter. Der erste Parameter gibt wie bei setZoom den Zoom-Faktor an. Der zweite und dritte Parameter geben an, wie weit vom oberen oder linken Rand nach unten beziehungsweise rechts gescrollt werden soll. Dies hat für uns nur für die vertikale Komponente funktioniert.