Das Plugin "URLLink" stellt die Palette "Web Bilder" zur Verfügung.
Das Plugin stellt lediglich die Benutzeroberfläche zur Verfügung und ist optional.
Illustrator® erwartet, dass verwendete Bilder im lokalen Netz liegen oder direkt in Dokumente eingebettet werden. Bilder aus dem Internet (Stichwort Cloud) können von Illustrator® nicht verarbeitet werden. Die priint:comet Plugins bieten eine Möglichkeit, auch Bilder aus dem Netz verwenden zu können. Bilder werden dafür zurerst lokal heruntergeladen und die Bildverknüpfung dann mit dieser lokalen Datei gemacht.
Gleichzeitig enthalten die Bildrahmen alle nötigen Informationen, um die Bilder jederzeit aktualisieren zu können. Für die Abfrage, ob ein Bild noch aktuell ist, werden dabei jeweils nur wenige Bytes, die sogenannten HEADER-Daten, vom Server geladen und mit lokalen Daten verglichen.
Beachten Sie bitte Eigentumsrechte und Lizenzen der verwendeten Bilder.
Um unnötigen Netzwerk-Verkehr zu vermeiden, werden Statusprüfungen der URL-Bilder nur auf Benutzeranfragen hin gemacht. Ein automatischer Abgleich wird nicht gemacht.
Die Palette URL Link zeigt alle URL-Bilder des aktuellen Dokumentes und den jeweiligen Status der Bilder an. Beim Aufklappen eines Eintrages werden die Rahmen angezeigt, die das jeweilige Bild verwenden. Ein Klick auf das Icon eines untereintrages wählt den Rahmen im Dokument aus.
Mit den Menüs der Palette können URL-Bilder überprüft aktualisiert und gelöscht werden.
Jeder Listeneintrag hat zusätzlich ein Rechtsklick-kontextmenu um diesen Eintrag (bzw. im Falle von Obereinträgen alle Untereinträge) zu überprüfen, aktualisieren oder zu entfernen.
Bitte beachten Sie, dass zum Anlegen von URL-Bildern das Dokument möglicherweise mindestens einmal gesichert werden muß, damit ein Zielpfad für den Downoad bestimmt werden kann. Weitere Informationen dazu finden Sie hier.
Zum manuellen Anlegen eines URL-Bildes gehen Sie wie folgt vor:
Die cScript-Funkion frame::image, Rahmenplatzhalter für Bildrahmen erkennen selbständig, ob eine übergebene Bildadresse eine URL ist und legen bei Bedarf automatisch URL-Bilder an.
Folgende Protokolle werden für den Download der Bilder unterstützt:
Eventuell nötige Logindaten werden entsprechend der URL-Syntax angegeben, also etwa
http://paul:passwort@www.hi13.de/aaa.png
Passworte innerhalb der URLs werden im Dokument verschlüsselt und in ///*****/// eingeschloseen im Dokument hinterlegt und bei Bedarf automatisch entschlüsselt.
Wird Ihr Internet-Zugang ganz oder teilweise über einen Proxy gesteuert, müssen die Proxyeinstellungen auch den Webbildern bekannt sein. Wählen Sie dazu das Flyout-Menü Proxy... der Palette Web-Bilder. Im erscheinenden Dialog können Sie die Proxydaten angeben. Die Proxyeinstellungen sind auch nach Neustart des Programmes aktiv. Die Adresse des aktiven Proxies wird hinter dem Menünamen Proxy | angezeigt.
Alternativ zum Proxy-Dialog kann der Proxy auch mit den folgenden Skriptfunktionen bearbeitet werden. Auch hier sind die gemachten Einstellungen neustart-resistent und gelten insbesondere auch nach Trennen der aktuellen Datenverbindung:
Bild-URLs können Session-IDs und andere zeitlich begrenzten Angaben enthalten. Hier ein Beispiel:
Die Bild-URL enthält den Parameter session, dessen Wert wird vom Server www.company.com geprüft wird. Ist die Session ungültig oder abgelaufen, liefert der Server das Bild nicht (mehr) aus:
https://www.company.com/service/object_image/get?id=...&session=8bed0851-dad5-41b5-bcca-c2b7d3e888dc&p2=12
Web-Bilder mit "flüchtigen" URLs haben damit also zwei Probleme:
Die Lösung ist naheliegend: Die flüchtigen Teile der URL müssen durch feste Angaben ersetzt werden, die beim Prüfen und/oder Laden des Bildes eine Neuberechnung der flüchtigen Teile ermöglichen. Zur Lösung haben wir eine neue "Funktion" eingeführt, mit der die flüchtigen Teile der URL bei Bedarf neu berechnet und ersetzt werden können:
getSessionData(name,attribute)
Der Name getSessionData ist fest. name und attribute werden so festgelegt, dass der ersetzte flüchtige Wert neu berechnet werden kann. Wie das geschieht wird weiter unten beschriieben. Die Angabe erfolgt ohne Leerzeichen!
Die obige URL ändert sich also z.B. wie folgt:
https://www.company.com/service/object_image/get?id=...&session=getSessionData(paul,session)&p2=12
Am Web-Bild des Rahmens wird die neue und unveränderlliche Bild-URL gesichert. Aber wenn die URL beim Überprüfen bzw. Laden des Bildes angewendet wird, wird getSessionData(name,attribute) automatisch durch seinen aktuellen Wert ersetzt. Damit sind beide oben genannten Probleme gelöst. Im Folgenden erfahren Sie, wie die Neuberechnung konfiguriert wird.
Für die Ermittlung des aktuellen Wertes von getSessionData muß zuerst der Server befragt werden. Dazu benötigen Sie zwei Dinge:
Diese Angaben müssen Sie bei der IT der Firma erfragen, die den Server der Bild-URL betreibt. Die erhaltenen Daten tragen Sie in die Datei sessions_data.xml ein. sessions_data.xml wird an den folgenden Stellen gesucht:
Der Eintrag bekommt den Namen, den Sie in der Definition von getSessionData verwendet haben. (Im obigen Beispie paul.) Namen müssen eindeutig sein.
Die Datei muß folgendes Format haben:
<sessions>
<session>
<name>UniqueName</name>
<url>loginURL</url>
<data>credentials</data>
</session>
<!-- More Entries -->
</sessions>
Hier ein Beispiel eines Credentials. Passwörter sind hier normalerweise verschlüsselt.
{ "username": "demo", "password": "****", "clientType": "Web", "language": "en_US", "token": null, "connectorName": "default" }
Mit Hilfe dieser Daten kann Web-Bilder eine automatische Serveranfrage zusammenstellen und ausführen (lassen). In CURL-Notation entspricht die Anfrage der folgenden Terminal-Anweisung:
curl -X POST loginURL -H "Content-Type: application/json" -d credentials
Die Server-Antwort auf diese Anfrage muß alle nötigen flüchtigen Daten enthalten. Als Antwortformat wird zwingend JSON erwartet!
Eine gültige Anwort könnte besipielsweise so aussehen:
{
"session" : "ab96150a-36e3-4880-87fc-10d23644aaaa",
"userId" : "03b83f47-0c76-426a-a2e5-b24c1c8a7c04",
"language" : "en_US",
"message" : null,
"code" : 0
}
Im zweiten Schritt wird mit Hilfe des Parameter attribute aus getSessionData der gewünschte aktuelle Wert des gegebenen Attributes ermittelt.
Mit der Angabe getSessionData(paul,session) in der Bild-URL erhalten wir aus der obigen Anwort den Wert ab96150a-36e3-4880-87fc-10d23644aaaa und die aktuell angewendete URL ändert sich wie folgt:
https://www.company.com/service/object_image/get?id=...&session=ab96150a-36e3-4880-87fc-10d23644aaaa&p2=12
Mit dieser URL kann das Bild jetzt überprüft und geladen werden. Zu einem späteren Zeitpunkt wird sie automatisch neuberechnet werden.
Mitunter ist es nötig, einer URL weitere Informationen im sogenannten HTTP-Header mitzugeben. In curl-Notation entspricht das den Angaben der Option -H. Hierfür gehen Sie wie folgt vor:
Legen Sie für jede Sammlung benötigter HTTP-Header einen eindeutig benannten Eintrag in der Datei sessions_data.xml an. Die Einträge dürfen jeweils beliebig viele Header-Daten festlegen und müssen folgender Syntax haben:
<session>
<name>myName</name>
<header>headerData_1 OR ##actionID</header>
...
</session>
Die Angabe kann entweder ein direkter Wert, also z.B. Content-Type: application/png sein oder die mit ## eingeleitete ID einer definierten Aktion Ihres Datenpools.
Achten Sie bitte darauf, dass bei Verwendung von Aktionen Ihre Bild-URL unterschiedliche (oder keine) Bilder laden wird, wenn Sie die Datenverbindung trennen!
Folgende Variablen Sind in dem cSkript definiert:
Variable | Art | Typ | Beschreibung |
gURL | r/o | char* |
Aktuelle URL |
gName | r/o | char* |
Name der Header-Daten |
gHeaderData | w | StringList | Ergebnisliste. Tragen Sie in diese Liste alle gewünschten Header-Daten ein. |
Hier ein Beipiel eines cSkriptes:
#pragma plain #include "internal/types.h" int main () { wlog ("", "___UU (%s)\n", gURL); wlog ("", "___NN (%s)\n", gName); stringlist::append (gHeaderData, "AAA: aaa"); stringlist::append (gHeaderData, "BBB: bbb"); return 0; }
Dieses Script kann auch ein Python Skript sein. Nähere Informationen finden Sie hier.
Hier ein Beipiel eines Python Skriptes:
#!py #pragma plain import comet def main(): comet.wlog(f'___UU ({comet.gURL})') comet.wlog(f'___NN ({comet.gName})') comet.setOutput('gHeaderData', ['AAA: aaa', 'BBB: bbb']) return 0
Fügen Sie für jede benötigte Sammlung von HTTP-Headerdaten an beliebiger Stelle aber in genau dieser Schreibweise und ohne weitere Leerzeichen folgende Angabe ein:
=getHeaderData(myName)
Hier ein Beispiel:
http://www.hi13.de/aaa.png=getHeaderData(pp)
oder auch
http://www.hi13.de=getHeaderData(pp)/aaa.png
Damit URL-Bilder in Illustrator® funktionieren, müssen sie als lokale Dateien existieren und die Bildverweise muß entweder relativ eindeutig zum Dokument gemacht werden oder global eindeutig sein.
Die einzige eindeutige relative Adresse zu einem beliebigen Dokument ist ein Ordner festen Namens direkt neben dem Dokument. Wir verwenden als relative Bildadresse den Ordner
DoumentName_Links
direkt neben dem Dokument.
Damit relative Bildverweise funktionieren können, muss das Dokument einen Pfad haben. Das Dokument muß also mindestens einmal gesichert worden sein!
Im Panelstatement 141 einer priint:comet Konfiguration kann ein Skript hinterlegt werden, das zu einer gegebenen URL den Ablageordner der Bilddatei berechnet. Gibt das Skript einen Leerstring zurück, wird das Bild relativ neben dem Dokument abgelegt.
Variable | Typ | Beschreibung |
gDestFolder | String |
String für das Ergebnis. Ist der String leer, wird das Bild im Standardordner relativ neben dem Dokument abgelegt, sonst muß das Ergebnis einen gültigen Ordnerpfad enthalten. Existiert der Ordner nicht, wird er - wenn möglich - automatisch angelegt. Beachten Sie bitte, die Variable ist vom Typ String, nicht char*! |
gURL | char* |
Vollständige URL des Bildes |
gDocumentID | char* |
Dokument-ID des aktuellen Dokumentes Hinweis: Die Dokument-ID wird mitgegeben, um Ihnen die Arbeit zu erleichtern. Name und Pfad des Dokumentes können Sie mit den Skriptfunktionen document::name und document::path leicht bestimmen. |
gDestName | char * |
Hier ein sehr einfaches Skript zum Festlegen eines globalen Bildordners für URL-Bilder
int main ()
{
string::set (gDestFolder, "/Volumes/Images");
return 0;
}
Ist nichts anderes angegeben, wird der MD5-Hashcode der Bild-URL als Dateiname für den Download verwendet. Zusätzlich wird hinter Domain und Pfad der Bild-URL nach einem Namenszusatz für das Bild gesucht. Wird ein Name gefunden, wird er (durch _ getrennt) an den Hashcode angefügt und als Anzeigename in der Palette Web-Bilder verwendet.
Namen heruntergeladener Web-Bilder haben also in der Regel keine oder möglicherweise sogar falsche Dateiendungen.
Die Namensvergabe mit Hashcodes hat zwei Gründe:
Die in den URLs gefundenen Bildnamen können oft recht technisch oder lang sein. Und fehlende oder unpassende Dateiendungen führen zu Fehlern in Illustrator®. Hier ein Screenshot der Namen zwei solcher URLs:
Um diese Probleme zu verhindern, können Sie hinter der eigentlichen Bild-URL Zusatzangaben zu Anzeige- und Dateinamen machen. Fügen Sie dazu am Ende der URL den Trenner //// an. Nach dem Trenner können Sie eigene Anzeige- und Dateinamen festlegen. Für das Laden der Bilddateien werden diese Angaben entfernt. Folgende Syntax wird erwartet:
URL | Anzeigename | Dateiname | Bemerkungen |
http://www.hi13.de/schnipp | schnipp | 163...f8_schnipp |
Am Ende der URL wurde ein Name gefunden. Der gefundene Name wird durch _ getrennt an den MD5-Hashcode der URL angefügt. Aber da der Name keine Dateiendung hat, bleibt die geladene Datei ebenfalls ohne Endung und die Verwendung der Bilddatei in Drittprogrammen ist möglicherweise eingeschränkt. |
...////My Title | My Title | 163...f8_schnipp |
Der direkt hinter dem Trenner //// folgende Text wird als Anzeigename in der Palette verwendet. Hier finden Sie weitere Informationen zu Anzeigename. Der Name der Bilddatei ist von dieser Angabe unbetroffen und bleibt daher in diesem Fall weiter ohne Dateiendung. |
...////--NAMEFLAGS | schnipp.gif | bei kNoHash z.B.: schnipp.gif |
Benutze den Namen der in der URL gegeben ist. Als Name wird der Teil hinter dem letzten / der URL verwendet. Folgende Schlüsselwörter werden unterstützt:
Der Anzeigename darf leer sein. Dann folgt der Trenner '--' direkt dem '////' am Ende der URL. |
...////--gif[NAMEFLAGS] | schnipp.gif | 163...f8_schnipp.gif |
Ändern/Anfügen einer Dateiendung. Die Endung wird an den Anzeigenamen angefügt. Zusätzlich dürfen die oben beschriebenen Flags zur Verkürzung des Dateinamens angefügt werden, also z.B ////--gif+kNoHash. Der Anzeigename darf leer sein. Dann folgt der Trenner '--' direkt dem '////' am Ende der URL. |
...////My Title--gif[NAMEFLAGS] | My Title | 163...f8_schnipp.gif |
Ändern von Anzeigename und Dateiendung. Zusätzlich dürfen die oben beschriebenen Flags zur Verkürzung des Dateinamens angefügt werden, also z.B ////My Title--gif+kNoHash. Der Anzeigename folgt direkt nach dem ////-Trenner. Darauf folgt, durch '--' getrennt, die Dateiendung. |
...////My Title--!myImage.gif | My Title | myImage.gif |
Ändere den Anzeigename und den Dateinamen der Bilddatei. In diesem Fall müssen Sie selbst für die Eindeutigkeit der Dateinamen sorgen! Mit '--!' ändern Sie den gesamten Dateinnamen der geladenen Bilddatei. |
...////My Title--!A/B/myImage.gif | My Title | myImage.gif |
Vor dem Dateinamen darf ein relativer Pfad angegeben werden. Das Bild wird dann im angegebenen Unterordner das aktuellen Downloadordners abgelegt. In diesem Fall müssen Sie selbst für die Eindeutigkeit der Dateinamen sorgen! Der Teilpfad darf keine ..-Ordner enthalten. Existiert der Ordner noch nicht, wird er automatisch angelegt. |
...////My Title--!/A/B/myImage.gif | My Title | myImage.gif |
Vor dem Dateinamen darf ein absoluter Pfad angegeben werden. Das Bild wird dann im angegebenen Ordner abgelegt (und nicht im aktuellen Standard-Download!). Der Pfad darf mit einem definierten Alias beginnen. In diesem Fall müssen Sie selbst für die Eindeutigkeit der Dateinamen sorgen! Sie benötigen die entsprechenden Schreibberechtigungen! Existiert der Ordner noch nicht, wird er automatisch angelegt. |
Allgemein gilt für die Angaben:
Anzeigenamen werden über den allgemeinen Übersetzungsprozeß in die aktuelle Illustrator®-Sprache übersetzt.
So ergibt ...////reference in einem deutschen Illustrator® den Anzeigenamen Referenz und in einem englischen Illustrator® den Anzeigenamen Reference.
Mit dem Präfix notrans_ kann die automatische Übersetzung unterdrückt werden. ...////notrans_reference ergibt dann also den Anzeigenamen reference.
Anzeigenamen können eine beliebige Anzahl von $key$ Angaben enthalten. Jeder key wird dabei einzeln durch Übersetzungsprozeß geschickt und entsprechend ersetzt.
So ergibt ...////$Image$ 1 in einem deutschen Illustrator® den Anzeigenamen Bild 1 und in einem englischen Illustrator® den Anzeigenamen Image 1.
Der Anzeigename gilt jeweils nur für diesen einen Rahmen.
Neu hinzugefügte Web-Bilder ohne Anzeigenamen werden nicht automatisch benannt, auch dann nicht, wenn es bereits Web-Bilder mit der gleichen URL gibt!
Es wird keine Prüfung auf Eindeutigkeit gemacht. Wenn verschiedene URLs den gleichen Anzeigenamen verwenden, erscheinen die Rahmen mit dem gleichen Anzeigenamen in der Palette.
Wird das gleiche Bild in verschiedenen Rahmen unterschiedlich benannt, wird der erste gefundene Name in der Palette angezeigt. Untereinträge zeigen die davon abweichenden Namen jeweilsmit einem • getrennt an.
Auf die Illustrator® Standard-Palette Verknüpfungen haben wir keinen Einfluß. Hier wird immer der Name der lokalen Bilddatei angezeigt.
Anzeigenamen können auch nach dem Laden der Bilder festgelegt oder geändert werden. Folgende Möglichkeiten stehen zur Verfügung:
Wenn Sie eigene Dateinamen (!--) verwenden, müssen Sie selbst auf die Eindeutigkeit der Dateinamen achten! Nicht eindeutig benannte Downloads führen zu Fehlern bei der Verwendung und beim Überprüfen der Bilder.
[seit v4.2 R32690] Anstelle eines Dateinamens kann auch ein relativer oder vollständiger Pfad angegeben werden. Relative Pfade werden innerhalb des aktuellen Download-Ordners aufgelöst. Vollständige Pfade dürfen mit definierten Alias-Namen beginnen. Fehlende Ordner werden automatisch angelegt. Der etags-Ordner wird jeweils im untersten Ordner angelegt.
Die folgenden Zeichen sind in Dateinamen zumindest unter Windows verboten und werden jeweils durch '-' (Minus) ersetzt. Aus Kompatibilitätsgründen werden unter Linux und Mac OS die gleichen Ersetzungen gemacht.
< > : | ? *
Die nachträgliche Änderung von Dateinamen sollte vermieden werden! Die Umbennung führt in jedem Fall dazu, dass der Link out of date ist und neu geladen werden muß.
Nicht jede URL lässt auf den dahinter liegenden Dateinamen schließen. Üblicherweise spielt das keine Rolle, da wir zum ablegen der heruntergeladenen Bilder einen hash der URL verwenden.
Illustrator® allerdings kann mit Dateinamen ohne Endung nicht umgehen. Bei URLs aus denen sich die Dateiendung nicht erschließen lässt und auch der Header keine Sinnvollen Informationen diesbezüglich liefert, wird versucht anhand der Binärdaten den Dateitypen zu ermitteln. Die ermittelte Dateiendung wird anschließend an die heruntergeladene Datei angehängt und versucht sie in Illustrator® zu verknüpfen.
Folgende Formate können dabei erkannt werden:
Dateiformat | Endung | Bemerkung |
SGI ImgLib Files | rgb | |
GIF 87a and 89a Files | gif | |
Portable Bitmap Files | pbm | |
Portable Graymap Files | pgm | |
Portable Pixmap Files | ppm | |
TIFF Files | tiff | |
Sun Raster Files | rast | |
X Bitmap Files | xbm | |
JPEG data in JFIF or Exif formats | jpeg | |
BMP Files | bmp | |
Portable Network Graphics | png | |
WebP Files | webp | |
OpenEXR Files | exr | |
Adobe Illustrator Files | ai | Unterscheidung nicht möglich. Es wird '.pdf' als Dateiendung verwendet. |
Adobe PDF Files | ||
Scalable Vector Graphics | svg | |
Encapsulated Post Script | eps |
Bitte beachten Sie dass nicht alle Dateitypen von Illustrator® unterstützt werden!
Zu jeder URL werden vom Server auch sogenannte Header-Informationen bereitgestellt. Diese Infos enthalten üblicherweise Angaben zum Dateidatum, der Größe der Datei und meist ein sogenanntes ETag. Header-Infos sind meist nicht länger als 500-1000 Bytes. Wird eine URL serverseitig geändert, werden (hoffentlich) auch die Headerinfos entsprechend angepasst.
Beim Laden eines URL-Bildes vom Server werden vor den eigentlichen Bilddaten aurtomatisch die aktuellen Header-Infos geladen. Um den aktuellen Status zu prüfen, genügt es dann, lediglich die aktuellen Header-Infos zu holen und mit den hinterlegten Daten zu vergleichen.
Folgende Daten der Header-Informationen werden zum Vergleich verwendet:
Es werden keine Binärvergleiche der Bilder gemacht. Manuelle Änderungen an den lokalen Bildern beeinflußen den Status eines URL-Bildes nicht!
Die Header-Infos der Bilder werden im Unterordner etags des jeweiligen Downloadordners der Bilder hinterlegt. Dort wird für jedes geladene Bild eine Datei gleichen Namens mit der Endung txt abgelegt, die die Header-Infos zum Zeitpunkt des Downloads enthält. Beim Aktualisieren eines Bildes wird die ETAG-Datei ebenfalls aktualisiert.
Fehlt die Datei mit den Header-Infos, wird ein Bild automatisch als "Geändert" angesehen und beim nächsten Aktualisieren automatisch neu geladen.
Es genügt leider nicht, die Headerdaten im jeweiligen Bildrahmen zu hinterlegen. Stellen Sie sich folgende Situation vor:
Jetzt gibt es zwei Möglichkeiten:
Beim Öffnen eines Dokumentes werden automatisch alle im Dokument enthaltenen Web-Bilder überprüft: Fehlt die lokale (heruntergeladene) Bilddatei, bekommt der Bildrahmen den Status Unbekannt (blau). Aus Performancegründen wird nicht geprüft, ob die lokale Datei noch aktuell ist und fehlende Bilder werden nicht automatisch geladen. Das Gleiche gilt für Copy/Paste und das Platzieren von Snippets. Auch hier wird aus Performancegründen lediglich überprüft, ob die lokale Bilddatei vorhanden ist.
Beim Drag and Drop zwischen geöffneten Dokumenten wird keine Prüfung der Web-Bilder vorgenommen!
Eingebettete Bilder werden wie normale Bilder zuerst vom Server geladen. Nachdem das heruntergeladene Bild eingebettet wurde, wird es jedoch automatisch sofort wieder gelöscht.
Die folgende Aufzählung enthält alle cScript-Funktionen zur Bearbeitung von URL-Bildern.
Die Palette hat die ClassID 421