Go to the english version of this article.
Eine der am häufigsten gestellten Fragen unserer Kunden ist diese: “Ist die IDMLlib in der Lage, Snippets (.idms) in ein IDML Dokument zu importieren?”. Glücklicherweise können darauf wir seit dem ersten Milestone der IDMLlib 1.1 mit ja antworten, allerdings war dies bis jetzt eine sehr Sourcecode intensive Aufgabe. Wir werden Ihnen später zeigen, wie einfach die Lösung mit unserem neuen IDMLlib Utility Framework ist. Aber zuerst ein paar Erklärungen, was die Idee hinter Snippets ist und was Sie brauchen, um ein Snippet zu importieren.
Das Arbeiten mit Snippets ist ein geeigneter Weg, InDesign Seiten zu modularisieren. Die Idee dahinter ist, ein oder mehrere PageItems in eine externe Datenstruktur zu exportieren, um sie auf verschiedenen Seiten und Dokumenten wiederzuverwenden. PageItems können exportiert werden, indem im InDesign Dokument ein oder mehrere Elemente mit dem Auswahlwerkzeug angewählt und über Datei/Exportieren exportiert werden. Wählen Sie das Format InDesign-Snippet (nur möglich, wenn das Auswahlwerkzeug benutzt wurde) und exportieren Sie die PageItems als .idml Datei.
Das exportierte Snippet ist nichts anderes als eine XML-Datei, die auf dem Schema der InDesignMarkupLanguage beruht, und alle Informationen über die exportierten PageItems enthält. Im Grunde genommen ist ein IDML-Snippet eine XML Datei, die das ganze IDML Schema abbilden kann. Das Snippet kann über den Menübefehl Datei/Platzieren in das gleiche oder in ein anderes Dokument importiert werden.
Was hat das Arbeiten mit Snippets also für Vorteile? So wie ein IDML Dokument enthält das Snippet nur Referenzen zu allen enthaltenen Werten wie Schriften oder Bilder, und ist dadurch sehr klein (Dateigröße) und einfach weiterzuverwenden. Es ist ein mächtiges Konzept in InDesign, aber es wird noch leistungsfähiger in einem IDML Workflow. Stellen Sie sich zum Beispiel eine Anzeigenkampagne mit verschiedenen Werbeaussagen und/oder Bildern vor, die außerhalb von InDesign zusammengestellt und später in einem InDesign Server verarbeitet und fertiggestellt wird. Eine mögliche Realisierung wäre über einen Anzeigen-Baukasten, der über eine Webapplikation zur Verfügung gestellt wird und so keiner Standortbeschränkung unterliegt.
Einen weiteren Vorteil, den Sie durch die Verwendung von IDML und Snippets außerhalb von InDesign haben, ist die Möglichkeit, Snippets nach Ihren Wünschen zu modifizieren: ändern Sie im Snippet verwendete Bilder oder Texte oder fügen Sie weitere PageItems hinzu.
Was müssen wir also tun, um ein Snippet außerhalb von InDesign in ein IDML Dokument einzufügen und so den Datei/Platzieren Befehl zu simulieren?
Die folgenden Schritte sind nötig, um das Snippet zu importieren. Dies kann entweder programmatisch geschehen oder mit einem Werkzeug wie Oxygen XML, welches die Verarbeitung von IDML Dokumenten vereinfacht, indem es IDML Container Dateien unterstützt:
- Das IDML Dokument entpacken
- Den Spread lokalisieren, an den die Snippet-PageItems angehangen werden sollen
- Das IDMS Snippet laden und die zu importierenden PageItems lokalisieren
- Die PageItems an de gewählten Spread anfügen
- Neue Stories/Story_xxx.xml Dateien für jedes importierte TextFrame PageItem erstellen
- Jede Story vom Snippet zum korrespondierenden Stories/Story_xxx.xml kopieren
- Self-ID Kollisionen für jedes importierte Objekt überprüfen, neue IDs für kollidierte PageItems erstellen und Self-IDs der PageItems aktualisieren
- Einen neuen IDML Container (.idml) erstellen
Wir haben dies hier vereinfacht dargestellt, indem das Snippet in das Dokument importiert wird, aus dem es exportiert worden ist. Daher brauchen keine Stile, Farben und Ähnliches importiert werden.
Sogar mit Hilfe der IDMLlib wären es 20-30 Zeilen Code gewesen. Aber mit der aktuellen Version der IDMLlib sind wir in der Lage, die Länge des Codes enorm zu verkürzen, ohne dabei die Flexibilität zu verlieren.
Idml idml = new Idml("docs/4pager.idml"); Idml idms = new Idml("docs/product.idms"); DocumentUtil.importSnippet(idml,idms,1); idml.saveAs("processes/merged.idml"); idml.close(); idms.close();
Der eigentliche Import ist nur eine einzige Zeile Code, welcher alle oben gelisteten Schritte beinhaltet – der Rest ist das Laden, Speichern und Schließen des IDML Dokuments:
DocumentUtil.importSnippet(idml,idms,1);
Die importSnippet() Methode nimmt 3 oder 5 Parameter an:
- targetIdml
- sourceIdms
- targetSpreadIndex
- xOffset (optional)
- yOffset (optional)
Mit dem x- und y-Offset sind Sie in der Lage, importierte PageItems von ihrer ursprünglichen Position an eine andere Position auf dem Spread zu verschieben.
Aber was ist, wenn man importierte PageItems vorab bearbeiten muss, z.B. Text- und Bildänderungen oder zusätzliche Ebenen? Und woher weiss man, welche PageItems importiert worden sind? Nichts einfacher als das: die DocumentUtil.importSnippet() Methode gibt einen PageItemIterator zurück, mit welchem es ganz einfach möglich ist, über alle importierten PageItems zu iterieren und alle PageItems so zu modifizieren, wie es gewünscht ist.
Ein Beispiel, wie man alle PageItems auf die Ebene u3b stellt:
PageItemIterator pageItemIterator = DocumentUtil.importSnippet(idml, idms, 1); while(pageItemIterator.hasNext()) { AbstractIdmlPageItem pageItem = pageItemIterator.next(); pageItem.setItemLayer("u3b"); }
Dies war der erste Blogbeitrag über unseren neuen IDMLlib-Utility-Framework innerhalb der IDMLlib, welcher das Arbeiten mit IDML einfacher macht als jemals zuvor. In den nächsten Tagen und Wochen werden wir an dieser Stelle weitere Teile dieses Frameworks vostellen.
Wir hoffen, dass Ihnen dieser Beitrag über IDML Snippets gefallen hat und Sie bemerkt haben, wir einfach es ist, mit Hilfe der IDMLlib mit Snippets zu arbeiten. Ihr Feedback nehmen wir gerne an, und auch die Kommentarfunktion steht zur Verfügung.