AFP / Modca ResourceLoader-API
Übersicht ResourceLoader-API
Die ResourceLoader-API wird verwendet um externe Resource-Objekte, die nicht im Dokumentdatenstrom enthalten sind, der Anwendung zur Verfügung zu stellen, folgende Implementationen stehen zur Verfügung (Basis ist das Interface com.levigo.jadice.format.resource.ResourceLoader):
Die API bietet das erstellen eigener ResourceLoader-Implementationen an.
Das Resourcen-Objekt wird über die Methode getResourceStream(String, Type) mit dem Parameter Resourcenname (java.lang.String) und Resourcentyp (com.levigo.jadice.format.modca.resource.ResourceLoader.Type) angefordert, wird es nicht gefunden wird null zurückgegeben.
Ein nicht gefundenes Resourcen-Objekt hat in der Regel Auswirkung auf die Darstellung des Dokuments, es können Teile einer Seite fehlen, wie z.B. Kopf- / Fusszeilen, Logos, aber auch die Schriftdarstellung kann nicht korrekt sein, z.B. falsche Laufweite / Schriftgrösse, Zeichendarstellung usw.
Enum-Implementation com.levigo.jadice.format.modca.resource.ResourceLoader.Type
Um das angeforderte Resourcen-Objekt eindeutig identifizieren zu können, gibt es den Datentyp com.levigo.jadice.format.modca.resource.ResourceLoader.Type:
CharacterSet
Schriftobjekte, i.d.R. Raster- und Outline-Fonts, beinhaltet Schriftinformationen, Laufweiten einzelner Zeichen usw., ist diese Resource nicht vorhanden kann der Text meist nicht korrekt dargestellt werden.
CodedFont
Definiert ein Schrift- und Codepage-Objekt, ist diese Resource nicht vorhanden kann der Text meist nicht korrekt dargestellt werden.
CodePage
beinhaltet Zeicheninformationen, wird zur Darstellung von Text in Zusammenhang mit Schriftarten verwendet, ist diese Resource nicht vorhanden, kann die zugehörige Schriftart nicht dargestellt werden.
DataMap
verweist auf zusätzliche Seiteninformationen, wird im AFP-Linemode Kontext verwendet.
FormMap
beinhaltet zusätzliche Seiteninformationen, wie z.B. zusätzliche Overlay-Resource Verweise, Druckinformationen, usw.
ObjectContainer
Resource die ein beliebiges Objekt wie z.B. Grafik, Schrift usw. enthalten kann
Overlay
Overlay-Resource beinhaltet i.d.R. ein Teil einer Seite, z.B. Kopf- / Fusszeile, Formular, usw.
PageSegment
PageSegment-Resource beinhaltet Grafik-Objekte, z.B. Logos, Hintergrundgrafiken usw.
Beschreibung der Implementationen
ResourceFileLoader
Wird zum Laden einzelner Resource-Objekte aus dem Dateisystem verwendet. Die Resourcenamen werden intern alle zu Grossbuchstaben konvertiert, d.h. bei Betriebssystemen die Gross- / Kleinschreibung im Dateisystem beachten müssen die Resourcedateinamen entsprechend angepasst werden.
Funktion: Wenn die Resource 'S1LOGO' angefordert wird, muss die Datei S1LOGO im Pfad vorhanden sein.
Beim Erstellen der Instanz muss der Pfad zu den einzelnen Resourcen angegeben werden:
String path = "D:\\resources\\"; ResourceFileLoader loader = new ResourceFileLoader(path);
Zudem ist es möglich zum Pfad noch ein Array mit Dateiendungen anzugeben, wird z.B. nach 'S1LOGO' angefordert, wird zuerst nach 'S1LOGO', dann 'S1LOGO.300 und zuletzt nach 'S1LOGO.240' im Pfad gesucht.
String path = "D:\\resources\\"; String[] extensions = new String[] {"300", "240"}; ResourceFileLoader loader = new ResourceFileLoader(path, extensions);
Die Erweiterungen können auch nachträglich gesetzt werden:
String[] extensions = new String[] {"300", "240"}; loader.setExtensions(extensions);
ResourceGroupLoader
Wird zum Laden von gruppierter Resource-Objekten verwendet, Quelle ist ein java.io.InputStream-Objekt
Erstellen einer Instanz:
ResourceGroupLoader loader = new ResourceGroupLoader();
Nun können die gruppierten Resourcen hinzugefügt werden, z.B.:
// Datei mit gruppierten Resourcen String fileName = "D:\\resources\\all_resources.res"; loader.addFile(fileName); // Datenstrom mit gruppierten Resourcen InputStream is = <Datenstrom mit gruppierten Resourcen>; loader.addStream(is);
ResourceUrlLoader
Wird zum Laden einzelner Resource-Objekte von einer URL-Quelle verwendet. Die Resourcenamen werden intern alle zu Grossbuchstaben konvertiert, d.h. die Resourcedateinamen müssen entsprechend auf dem HTTP-Server abgelegt werden.
String baseURL = "http://localhost/resources/"; ResourceUrlLoader loader = new ResourceUrlLoader(baseURL);
ResourceMultiLoader
Spezielle Implementation, die mehrerer ResourceLoader-Implementationen verwaltet. ResourceLoader-Implementationen werden in einer Liste verwaltet, bei einer Resourcen-Anfrage wird die Liste abgearbeitet, es ist also darauf zu achten die Reihenfolge beim Erstellen korrekt festzulegen.
Erstellen einer Instanz:
ResourceMultiLoader loader = new ResourceMultiLoader(); // Hinzufügen einer ResourceLoader-Instanz, wird immer an das Ende der Liste gesetzt loader.addLoader(<ResourceLoader-Instanz>); // Entfernen einer ResourceLoader-Implemenation loader.removeLoader(<ResourceLoader-Instanz>);
Alternativ können beim Erstellen ResourceLoader-Instanzen deklariert werden:
ResourceMultiLoader loader = new ResourceMultiLoader(<ResourceLoader-Instanz 1>, <ResourceLoader-Instanz 2>, ...);
DefaultResourceLoader
Spezielle Implementation, die die Funktionalität von ResourceGroupLoader und ResourceFileLoader vereint und somit die gängisten Arten von Resource-Quellen verarbeiten kann.
Erstellen einer Instanz via Standard-Konstruktor, Resource-Quellen können nachträglich hinzugefügt werden:
DefaultResourceLoader loader = new DefaultResourceLoader(); // Resource-Quelle über eine weitere ResourceLoader-Instanz hinzufügen loader.addLoader(<ResourceLoader-Instanz>);
Erstellen einer Instanz mit Zugriff auf das lokale Dateisystem. Es können auch gruppierte Resourcen ins angegebene Verzeichnis abgelegt werden, die Datei muss mit .res oder .fde enden, damit sie als gruppierte Resource erkannt wird:
String path = "D:\\resources\\"; DefaultResourceLoader loader = new DefaultResourceLoader(path);
Erstellen einer Instanz wie bei Konstruktor #2 Beispiel mit dem Zusatz Dateiendungen zu definieren, Funktionsweise wie bei der ResourceFileLoader-Implementation:
String path = "D:\\resources\\"; String[] extensions = new String[] {"240", "300"}; DefaultResourceLoader loader = new DefaultResourceLoader(path, extensions);
Anwendung ResourceLoader-Implementation via Reader-API
Die ResourceLoader-Impementation kann über die MODCAReaderSettings-Klasse beim Laden des Dokuments via Reader-API (siehe auch jadice documentplatform Dokumentation) gesetzt werden und ist für jede Seite im Dokument verfügbar, z.B.:
Reader reader = new Reader(); reader.getSettings(MODCAReaderSettings.class).setResourceLoader(<ResourceLoader-Implementation>); reader.read(<AFP/Modca-Dokument>);
Die Anwendung mehrere ResourceLoader-Instanzen kann über die ResourceMultiLoader-Implementation realisiert werden.