Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Achtung: Dies ist nicht der vollständige Artikel, sondern nur ein paar Seiten davon. Wenn Sie hier nicht erfahren, was Sie wissen möchten, finden Sie am Ende Informationen darüber, wie Sie den ganzen Artikel lesen können.

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 1/2007.

Unser Angebot für Sie!

Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'!

Diesen Beitrag twittern

Zusammenfassung

Lernen Sie das Snapshot-Format, das Snapshot Viewer-OCX und seine Programmierung kennen.

Techniken

Snapshot Viewer-OCX, VBA

Voraussetzungen

Access 2000 und höher

Beispieldatei

snapshots.mdb, snapshots2003.mdb

Shortlink

345

Schnappschüsse von Berichten

Sascha Trowitzsch, Berlin

Access-Berichte auf dem Bildschirm darzustellen, ist die eine Sache, die Weitergabe eine andere. Bei der papierlosen Weitergabe (etwa für den Versand per E-Mail) kommt meist das PDF-Format zum Einsatz. Ohne Hilfsmittel wie Adobe Acrobat oder kostenlose Alternativen ist das nicht möglich. Leider fristet das in Access integrierte Snapshot-Format, das einige Ähnlichkeiten mit PDF aufweist, ein Schattendasein. Wir werfen einen genaueren Blick auf dieses Format.

Schnappschüsse erzeugen und anzeigen

Einen Bericht kann man in Access per Menübefehl in eine Snapshot-Datei umwandeln: Markieren Sie einen Bericht im Datenbankfenster und wählen Sie nach einem Rechtsklick den Eintrag Exportieren... aus dem Kontextmenü aus. Alternativ steht dieser Menüeintrag auch über das Hauptmenü und Datei/Exportieren... zur Verfügung. Im nun erscheinenden Dateiauswahldialog stellen Sie als Dateityp Snapshot Format (*.snp) ein. Ein anschließender Klick auf OK öffnet die Drucken-Fortschrittsanzeige von Windows und zeigt die Zahl der exportierten Berichtsseiten an. Wenn Sie im Dateiauswahldialog ein Häkchen auf Autostart gesetzt hatten, öffnet sich anschließend der Snapshot Viewer und zeigt den Bericht an – allerdings nur, wenn der Snapshot Viewer als Teil von Office oder nachträglich installiert wurde. Sollte das nicht der Fall sein, dann springt wahrscheinlich der Installer von Office an und versucht, die Installation des Viewers nachzuholen. Gelingt auch das nicht – etwa, weil die Installationsquelle nicht verfügbar ist –, dann kommt es zur Fehlermeldung „OLE-Server nicht verfügbar“. Die Installations-CD brauchen Sie nicht zwingend: Der Snapshot Viewer kann kostenlos bei Microsoft heruntergeladen werden [1].

Snapshots weisen unter der Voraussetzung, dass keine Bilder in den Bericht eingefügt wurden, eine ähnliche Dateigröße wie entsprechende PDF-Dokumente auf. Jeder, der den Snapshot Viewer auf seinem Rechner hat, kann sie ansehen. Ein installiertes Office ist nicht notwendig.

Neben der EXE-Version des Snapshot Viewers installiert das Setup immer auch ein ActiveX-Steuerelement namens snapview.ocx. Mit diesem Steuerelement können Sie Snapshot-Dateien auch innerhalb von Formularen anzeigen.

Die EXE-Version wie auch das ActiveX-Steuerelement können übrigens nicht nur lokale Dateien öffnen, sondern auch Snapshots direkt aus dem Internet herunterladen und anzeigen. Dazu wählen Sie den Menübefehl Datei/Öffnen des Snapshot Viewers aus und geben als Dateiname eine Internetadresse wie http://www.moss-soft.de/public/aiu/test.snp ein.

Was sind Snapshots?

Da eine Snapshot-Datei keine Verbindung mehr zur Datenquelle des Ursprungsberichts hat, kann es sich nur um ein grafisches Abbild des Berichts handeln. Die recht kleinen Dateigrößen deuten auf ein hoch komprimiertes Format hin. Da sich ein Snapshot im Viewer ohne Qualitätsverlust nahezu beliebig vergrößern lässt, liegt offensichtlich eine Vektorgrafik vor – Pixelgrafiken würden verschwimmen.

Tatsächlich enthält eine Snapshot-Datei eingebettete EMF-Grafiken (Enhanced Metafile Format). Solche Dateien lassen sich etwa mit der Windows-Bildvorschau betrachten.

Der genaue Aufbau sieht folgendermaßen aus: Die SNP-Datei ist in Wirklichkeit ein CAB-Archiv (ein CAB ist ein mit dem LZ77-Ableger MSZIP komprimiertes Archiv). Machen Sie den Test: Benennen Sie eine SNP-Datei in CAB oder ZIP um, und öffnen Sie sie mit einem Archivierer Ihrer Wahl. Sie werden feststellen, dass sich im Archiv jeweils eine Datei namens _AccRpt_.snp befindet.

Diese wiederum ist ein so genanntes Compound Document, eine Storage-Datei. Eine Storage-Datei kann selbst viele Dateien beherbergen, die Storage-Streams (Word- oder Exceldateien beispielsweise sind ebenfalls Storage-Dateien). Wenn Sie einen Blick auf den Inhalt werfen wollen, installieren Sie den unter [2] als Freeware erhältlichen Storage Viewer. Er wird, wenn Sie die extrahierte Datei _AccRpt_.snp auf ihn ziehen, eine durchnummerierte Liste von Streams anzeigen. Das sind die einzelnen Seiten des Berichts im EMF-Format. Daneben gibt es noch einen Stream namens „Header“, der Eigenschaften des Berichts wie den für ihn eingestellten Drucker oder diverse Abmessungen enthält.

EMF-Format

Grafik-Dateien im Enhanced Metafile Format enthalten keine Bildpunkte, sondern Steueranweisungen, so genannte Meta Records. Diese Steueranweisungen korrelieren eng mit den Grafikfunktionen des Windows-GDI32-API. Wenn etwa ein Schriftzug angezeigt werden soll, dann gibt ein Meta Record lediglich die Formatierung des Fonts, die Positionierung auf der Seite und den Text-String an. Die Viewer-Anwendung übernimmt dann das Rendern dieser Information auf die grafische Oberfläche über GDI32-Funktionen. Der Vorteil ist eine beliebige Skalierbarkeit ohne Qualitätseinbußen. Eine Berichtsseite wird im entsprechenden EMF-Stream, also als Folge von Grafikanweisungen gespeichert, die im Allgemeinen von oben nach unten gemäß der Positionen der Steuerelemente im Bericht übersetzt werden. Es gibt nur zwei Ausnahmen, bei denen die Grafik nicht als Vektorformat übergeben wird: In den Bericht eingebettete Bilder und ActiveX-Steuerelemente. Beide werden in einem Bitmap-Format in den EMF-Stream aufgenommen. Das ist zugleich ein Nachteil gegenüber dem PDF-Format, in dem solche Pixel-Bilder zum Beispiel JPG-komprimiert enthalten sind. Bilder und ActiveX-Steuerelemente im Bericht sorgen damit für eine unverhältnismäßige Vergrößerung der Snapshot-Datei.

EMF-Extractor

Muss man das alles wissen? Nun, wenn Sie davon Kenntnis haben, können Sie beispielsweise Routinen programmieren, die aus dem Berichts-Snapshot die EMF-Grafiken extrahieren. Diese können dann weiterverwendet werden, um sie beispielsweise in einer Bildverarbeitung zu Pixelformaten umzuwandeln oder um die EMF-Grafiken verlustfrei in ein Word-Dokument einzubetten.

Das Formular frmEMFExtractor der Beispieldatenbank snapshots.mdb ermöglicht dies. Man kann mit ihm eine Snapshot-Datei laden und die enthaltenen EMF-Grafiken in ein Verzeichnis ausgeben lassen. Eine Vorstellung der dabei zum Einsatz kommenden Routinen würde an dieser Stelle den Rahmen sprengen, da diese vor API-Aufrufen nur so strotzen und die geniale OLE-Typelibrary olelib.tlb des Visual Basic MVP Eduardo Morcillo [3] einsetzen, die der Demo-Datenbank beigefügt ist. Dass es auch ohne einen TLB-Verweis funktioniert, zeigen die Report Utilities von Stephen Lebans [4], die allerdings erheblich aufwändiger gestaltet sind.

Um brauchbare Ergebnisse zu erhalten, ist noch etwas zu beachten: Es ist nicht egal, welcher Drucker in den Einstellungen des Berichts, aus dem die Snapshot-Datei erzeugt wird, angegeben wurde. Unter Seite einrichten können Sie im Berichtsentwurf den Drucker festlegen und außerdem Einstellungen für ihn vornehmen. Diese Einstellungen speichert Access im Bericht, sie beeinflussen die EMF-Grafiken des Snapshots. Wenn nämlich für die Druckeinstellung eine hohe Auflösung, sagen wir 600 dpi, gewählt wurde, muss das Ausgabeprogramm diesen Wert auf 96 dpi für die Anzeige am Bildschirm herunterrechnen. Das führt eventuell dazu, dass die Umrandungen von Steuerelementen sehr dünn ausfallen und verschluckt werden. Beim Konvertieren der EMF-Dateien in Pixelformate zeigt sich der gleiche Effekt. Darum ist es sinnvoll, für den als Snapshot zu exportierenden Bericht einen Drucker zu wählen, der geringe dpi-Einstellungen zulässt. Ein Beispiel wären PDF-Drucker oder der Microsoft Office Document Imaging Writer, der sich mit Office XP oder Office 2003 installieren lässt.

Snapshots per VBA erzeugen

Statt über das Menü kann ein Bericht über die Docmd.OutputTo-Methode auch mit VBA in eine Snapshot-Datei exportiert werden (in eine Zeile):

DoCmd.OutputTo acOutputReport, „rptKunden“, acFormatSNP, CurrentProject.Path & „\bericht.snp“, False

Diese Anweisung speichert den Bericht rptKunden im aktuellen Verzeichnis der Datenbank als Snapshot-Datei bericht.snp ab. Der Aufruf der Methode führt zur Anzeige des Druckfortschritts von Windows. Das lässt sich leider nicht umgehen. Wenn Sie für den letzten Parameter der Methode den Wert True übergeben, öffnet sich anschließend automatisch der Snapshot Viewer.

Ein wichtiger Hinweis zur Access-Konstanten acFormatSNP: Dahinter verbirgt sich ein String mit dem Inhalt Snapshot Format (*.snp). Leider gibt es in der Version Access 2003 einen Bug, der zum Scheitern der Methode führt, wenn man diese Konstante verwendet, weil sie dort offenbar anders definiert ist und den Ausdruck Snapshot Format oder Snapshot-Format (*.snp) erwartet. Das Service Pack 2 von Office 2003 behebt diesen Bug. Dieser Umstand ist bedauerlich, weil man ja nicht wissen kann, auf welcher Version die Datenbank betrieben wird. Als Workaround empfiehlt sich deshalb der Einsatz einer alternativen Funktion zum Ausgeben eines Snapshots (s. Listing 1).

Listing 1: Routine zum Erzeugen von Snapshot-Dateien aus Berichten unter Umgehung des acFormatSNP-Bugs

Sie haben das Ende des frei verfügbaren Teils des Artikels erreicht. Lesen Sie weiter, um zu erfahren, wie Sie den vollständigen Artikel lesen und auf viele hundert weitere Artikel zugreifen können.

Sind Sie Abonnent?Jetzt einloggen ...
 

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

© 2003-2015 André Minhorst Alle Rechte vorbehalten.