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.

  1. Obereintrag mit Anzeige der verknüpften URL. Beim aufklappen werden alle Untereinträge sichtbar, die mit dieser URL verknüpft sind sichtbar.
  2. Untereintrag. Diese Einträge repräsentieren eine Bildverknüpfung im Dokument.
  3. Statusanzeige der Verknüpfung. Ein farbiger Punkt zeigt den aktuellen Bildstatus an. Obereinträge zeigen die gesammelten Stati aller Untereinträge an, Untereinträge nur ihren eigenen Status. Der Status wird dabei farblich gekennzeichnet:
  4. Selektionsknopf (Verknüpft). Dieser Knopf selektiert das Bild im Dokument und zeigt gleichzeitig den Verknüpfungstyp an (hier: verknüpft)
  5. Selektionsknopf (Eingebettet). Dieser Knopf selektiert das Bild im Dokument und zeigt gleichzeitig den Verknüpfungstyp an (hier: eingebettet)
  6. Verbindungsanzeige
  7. 'Neu laden' Knopf. Dieser Knopf lädt die Einträge der Liste neu, führt aber keine Überprüfung durch

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:

  1. Kopieren Sie die Bild-URL in die Zwischenablage.
  2. Erstellen sie ein Platzhalterbild entweder über Objekt->priint:comet->Platzhalterbild einfügen, oder fügen Sie selbst ein Bild ins Dokument ein
  3. Wählen Sie das Platzhalterbild aus
  4. Wählen Sie die Aktion Objekt->priint:comet->URLLink->Erstellen
  5. Im erscheinenden Dialog fügen sie die URL ein und wählen die Verknüpfungsmethode

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:

  1. Wenn sich die URL ändert, wird das Bild bei jeder Prüfung als 'Verändert' erkannt.
  2. Wenn die URL fest bleibt, dann kann das Bild nicht aktualisiert werden.

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:

  1. Eine Login-URL loginURL.
  2. Die passenden Zugangsdaten credentials. Zugangsdaten müssen als JSON formatiert sein!

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:

  1. $PREFS/werkii/sessions_data.xml
  2. $PLUGINS/sessions_data.xml
Die erste gefundene Datei wird verwendet.

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:

  1. Anlegen der Header-Definition in sessions_data.xml
  2. Eintragen der Definition in die URL mit =getHeaderData(name)

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 *

Lokaler Name der Bilddatei

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:

  • [+]kEllipsize~ : Namen länger als 31 Zeichen werden auf 31 Zeichen gekürzt. Die Kürzung erfolgt nur im Basisnamen des Dateinamens, die Endung bleibt immer unverändert. Kürzungen werden durch drei Punkte (...) ersetzt.
    • kEllipsizeStart : Am Anfang kürzen
    • kEllipsizeMiddle : In der Mitte kürzen
    • kEllipsizeEnd : Am Ende kürzen
  • [+]kNoHash Den Hash-Code der Gesamt-URL nicht dem (mglw. gekürzten) Namen voranstellen. In diesem Fall müssen Sie selbst für die Eindeutigkeit der Dateinamen sorgen!

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:

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 pdf
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:

Die Suche erfolgt case insensitive. Ein heruntergeladenes Bild wird als geändert angesehen, wenn mindestens eine der oben genannten Informationen einen anderen Wert hat als zum Zeitpunkt des Download. Sind alle Informationen leer, werden Bilder immer als geändert angesehen (und beim Aktualisieren jedesmal neu geladen!).

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:

  1. Bild A wird geladen
  2. Der Rahmen mit Bild A wird gelöscht (oder mit einem anderen Bild verknüpft)
  3. Bild A wird auf dem Server verändert zu A'
  4. Ein neuer Rahmen wird Bild A verknüpft.

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