FIleMaker Magazin - MonkeyBread Software
Transcription
FIleMaker Magazin - MonkeyBread Software
Weblink MBS Plugin © 1994 – 2013 K&K Verlag GmbH, Hamburg Plugins Christian Schmitz (Jg. 1981) entwickelt seit 11 Jahren Software und seit 2006 auch FileMaker Plugins. Außerdem Plugins für Real Studio und allerlei Software für Mac OS X, Windows, Linux und iOS. Webshop support@monkeybreadsoftware.de Nachdruck aus dem FileMaker Magazin siehe auch: www.filemaker-magazin.de Zip-Archive auslesen Bilder aus OpenOffice-Dokumenten extrahieren Wer schon einmal mit einer Mediendatenbank gearbeitet hat, weiß, wie schwer es sein kann, einzelne Dateien zu verarbeiten, um enthaltene Bilder oder Metadaten zu ermitteln. Grundlage für den vorliegenden Artikel ist eine konkrete Anwendung aus genau diesem Bereich. Microsoft Word (.docx-Format) und OpenOffice legen ihre Texte in Dateien ab, die eigentlich Zip-Archive sind. Dort befinden sich das Vorschaubild, eingebettete Bilder und der Text als XML. Die eingebetteten Bilder wollen wir nun in eine FileMaker Datenbank extrahieren. Sesam, öffne dich Mit dem MBS-Plugin kann man seit Version 3.4 Zip-Archive lesen und schreiben. Zum Öffnen kann man zwischen zwei Funktionen wählen: „UnZipFile.OpenContainer“ erwartet ein Containerfeld als Parameter, „UnZipFile.OpenFile“ einen Dateipfad. Der Dateityp bleibt dabei unberücksichtigt, sodass wir problemlos ein Dokument von OpenOffice öffnen können. Im Script sieht das so aus: ◆◆Variable Setzen Name: $r Wert: MBS ("UnZipFile.OpenContainer"; Unzip::DocFile) Zahl zurückgibt – ist das Ergebnis ≤ 0, handelt es sich entweder um ein leeres Archiv oder um eine Fehlermeldung. In beiden Fällen wird das Script abgebrochen. Schleife Zunächst setzen wir die Variable $index mit dem Wert 0. Anschließend starten wir die Schleife, innerhalb derer wir den Index für die aktuelle Datei um 1 erhöhen. Verlassen wird die Schleife, wenn $index >= $count ist. Im letzten Schritt wird das Archiv mit der Funktion „UnZipFile.Close“ geschlossen. Innerhalb der Schleife betrachten wir die Dateien genauer. Das Plugin bietet diesbezüglich ein Dutzend verschiedener Abfragen, aber uns interessant zunächst nur der Dateiname, der mithilfe der Funktion „UnZipFile.ItemName“ zurückgegeben wird. Bei einem Zip-Archiv kann der Dateiname auch Pfadangaben enthalten. Die Ordnernamen sind dabei durch einen Schrägstrich voneinander getrennt – der eigentliche Dateiname steht hinter dem letzten Schrägstrich: Pictures/ test.png. Den Dateinamen kopieren wir in eine lokale Variable und holen uns anschließend die Dateierweiterung. Da uns nur die JPEG- und PNG-Dateien interessieren, genügt es, die ersten vier Buchstaben von rechts abzufragen. Wenn es sich bei der Erweiterung um .jpg oder .png handelt, geht es weiter. Im Script sieht das folgendermaßen aus: Anschließend überprüfen wir, wie viele Dateien sich in dem Archiv befinden. Zu diesem Zweck stellt das MBS-Plugin die Funktion „UnZipFile.ItemCount“ zur Verfügung. Kennt man die Anzahl der Dateien, kann man in einer Schleife von „0“ bis „Anzahl -1“ hochzählen und Informationen zu den jeweiligen Dateien abfragen. Man beachte bitte, dass die beiden Funktionen durchaus einen Fehler zurück geben können. Mit der Formel „LiesAlsZahl“ können wir prüfen, ob „UnZipFile.ItemCount“ eine FMM_201306 ◆◆Variable Setzen Name: $name Wert: MBS ("UnZipFile.ItemName"; $index) ◆◆Variable Setzen Name: $extension Wert: ZeichenRechts ($name; 4) ◆◆Wenn Formel: $extension = ".jpg" ▼ Die Bildtypen verarbeiten wir einzeln. Bei einer PNG-Datei erstellen wir zunächst einen neuen Datensatz. Danach werden 31 Nachdruck aus dem FileMaker Magazin Plugins siehe auch: www.filemaker-magazin.de die PNG-Daten mithilfe der Funktion „UnZipFile.ReadAsPNGContainer“ gelesen und als Containerwert verpackt. Damit FileMaker die Datei anzeigen kann, benötigen wir noch ein Vorschaubild im JPEG-Format und Angaben über die Größe des Bildes. Auch darum kümmert sich die Funktion „UnZipFile.ReadAsPNGContainer“. Anschließend wird der Containerwert einem Medienfeld in der Datenbank zugewiesen. Zusätzlich speichern wir den Dateinamen (inkl. Pfadangabe) in ein Textfeld. Außerdem erhalten wir über die Funktion „UnZipFile.ItemUncompressedSize“ die Größe des PNG-Bildes in Bytes, die wir uns auch notieren. Zum Schluss speichern wir den neuen Datensatz: ◆◆Neuer Datensatz/Abfrage Import ◆◆Alle Datensätze löschen Option: Ohne Dialog feld ◆◆Kommentar Text: Zip-Archiv öffnen aus Containerfeld ◆◆Variable setzen Name: $r Wert: MBS ("UnZipFile.OpenContainer"; Unzip::DocFile) ◆◆Kommentar Text: Anzahl Elemente abfragen ◆◆Variable setzen Name: $count Wert: MBS ("UnZipFile.ItemCount") ◆◆Kommentar Text: Schleife für alle Dateien im Archiv ◆◆Wenn Formel: LiesAlsZahl ($count) <= 0 ▼ ◆◆Variable setzen Name: $img Formel: MBS ("UnZipFile.ReadAsPNGContainer"; $index) ◆◆Kommentar Text: Da ist was schief gegangen ◆◆Aktuelles Script verlassen u ◆◆Feldwert setzen Feld: Unzip::ImageFile Formel:$img ◆◆Ende (wenn) ▲ ◆◆Feldwert setzen Feld: Unzip::ImageName Formel:$name ◆◆Feldwert setzen Feld: Unzip::FileSize Formel: MBS ("UnZipFile.ItemUncompressedSize"; $Index) ◆◆Schreibe Änderungen Datens./Abfrage Option: Dateneingabeüberprüfung unterdrücken Option: Ohne Dialog feld Mit ähnlichen Funktionen können Sie Dateien natürlich auch anders verarbeiten. „UnZipFile.ReadAsFileContainer“ ermöglicht zum Beispiel das Speichern einer allgemeinen Datei aus dem Archiv in einen Container. Für Bilddateien empfiehlt es sich aber, die spezifischen Funktionen zu verwenden. Enthält die Datei einen Text, kann man sich diesen mit der Funktion „UnZipFile.ReadAsText“ auch direkt holen. ◆◆Variable setzen Name: $index Wert: 0 ◆◆Schleife (Anfang) ▼ ◆◆Kommentar Text: Eine Datei mal genauer anschauen ◆◆Variable setzen Name: $name Wert: MBS ("UnZipFile.ItemName"; $index) ◆◆Variable setzen Name: $extension Wert: ZeichenRechts ( $name ; 4) ◆◆Wenn Formel: $extension = ".jpg" ▼ ◆◆Kommentar Text: JPEG Bild übernehmen ◆◆Neuer Datensatz/Abfrage ◆◆Variable setzen Name: $img Wert: MBS ("UnZipFile.ReadAsJPEGContainer"; $index) ◆◆Feldwert setzen Feld: Unzip::ImageFile Formel:$img ◆◆Feldwert setzen Feld: Unzip::ImageName Formel:$name ◆◆Schreibe Änderung Datens./Abfrage Option: Dateneingabeüberprüfung unterdrücken Option: Ohne Dialog feld ◆◆Ende (wenn) s ◆◆Wenn Formel: $extension = ".png" ▼ ◆◆Kommentar Text: PNG Bild übernehmen ◆◆Neuer Datensatz/Abfrage ◆◆Variable setzen Name: $img Wert: MBS ("UnZipFile.ReadAsPNGContainer"; $index) ◆◆Feldwert setzen Feld: Unzip::ImageFile Formel:$img ◆◆Feldwert setzen Feld: Unzip::ImageName Formel:$name Die Beispieldatenbank zeigt die Eingabedatei test.odt in einem Containerfeld und die Datensätze mit den Bildern in den Containern darunter. 32 ◆◆Feldwert setzen Feld: Unzip::FileSize FMM_201306 Nachdruck aus dem FileMaker Magazin Plugins siehe auch: www.filemaker-magazin.de Formel: MBS ("UnZipFile.ItemUncompressedSize"; $Index) ◆◆Schreibe Änderung Datens./Abfrage Option: Dateneingabeüberprüfung unterdrücken Option: Ohne Dialog feld ◆◆Ende (wenn) s ◆◆Kommentar Text: Nächste Datei ◆◆Variable setzen Name: $index Wert: $index + 1 ◆◆Verlasse Schleife wenn Formel: $index >= $count u ◆◆Schleife (Ende) s ◆◆Kommentar Text: Aufräumen ◆◆Variable setzen Name: $r Wert: MBS ("UnZipFile.Close") FMM_201306 33 2008 01 Deutschland e 9,50 | www.filemaker-magazin.de Das unabhängige Magazin für FileMaker Anwender und Entwickler FMM_200801 Geschüttelt, nicht gerührt … Das FileMaker Magazin ● Einzige, deutschsprachige Fachzeitschrift zu FileMaker ● Wissen aus erster Hand von anerkannten FileMaker Fachautoren ● Große Themenvielfalt für Anwender, Entwickler und Fortgeschrittene Gut zu wissen Ist Maintenance eigentlich ansteckend? FileMaker für Einsteiger Wie Sie in FileMaker Ihre ersten „Felder bestellen“ Buchbesprechungen © 1994 - 2008 K&K Verlag GmbH, Hamburg Neue Fachbücher zu FileMaker 9 FMM_2008_01.Titel.indd 1 Exklusiv für Premium-Abonnenten 29.04.2008 10:09:42 Uhr ● Sechs FMM Ausgaben pro Jahr ● Kostenlose Nutzung des Abonnentenbereichs auf www.filemaker-magazin.de ● PDF-Online-Archiv mit allen bisher erschienenen Ausgaben ● Jede Ausgabe mit kostenlosen Beispieldateien und Zusatzinfos zum Download Unser Service ● Aktuelle Neuheiten, Tipps und Infos, Kleinanzeigen und vieles mehr jederzeit online auf unseren Webseiten ● Hilfe bei allen Fragen zu FileMaker im FMM Forum ● Kompetente Beratung zum Kauf von FileMaker Lizenzen: Einfach anrufen +49 (0)40 589 65 79 70. Hier finden Sie Aktuelles zu FileMaker Produkten, egal ob Sie kaufen, mieten oder sich einfach informieren möchten. Eine kostenlose Leseprobe des FileMaker Magazins erhalten Sie, wenn Sie hier klicken. Wenn Sie sich für ein FileMaker Magazin Abo interessieren, klicken Sie bitte hier! K&K Verlag GmbH · www.filemaker-magazin.de · Telefon +49 40 589657970