Hyperlinkmethoden

Ein allgemeines Beispiel zur Verwendung der Klasse hyperlink finden sie hier.

Letzte Änderung :
30.07.2025, 07:35 Uhr

Hyperlinkmethoden

static int hyperlink::is_valid(ItemRef itemRef)

Zeigt die Referenz auf einen gültigen Link?

Name Typ Default Beschreibung
Return int   1 : Die Referenz zeigt auf einen gültigen und existierenden Link.

0 : Die Referenz ist ungültig und darf nicht als Link verwendet werden.
itemRef ItemRef - Beliebige Referenz oder 0

Version 1.4.1 R383, 28. Juni 2007

priint:comet InDesign® Plug-Ins

item::defined

static int hyperlink::count(ItemRef frameRef)

Ermittle die Anzahl der Hyperlinks in einem Textrahmen.

Name Typ Default Beschreibung
Return int   ≥ 0 : Anzahl der Hyperlinks im Text des Rahmens

-1 : Fehler
frameRef ItemRef 0 Gültige Rahmenreferenz

0 : Aktueller Skriptrahmen

v4.1.8 R29140, 21. Sep 2021

priint:comet InDesign® Plug-Ins, comet_pdf

get_nth
get_pos
itemlist::hyperlinks

static int hyperlink::get_nth(
  ItemRef frameRef,
  int nth,
  ItemRef* result = 0,
  int* start = 0,
  int* len = 0)

Hole den n-ten Hyperlink eines Textrahmens. Die Ergebnisse sind nicht nach Textpositionen sortiert! Für eine nach Textpositionen sortierte Liste der Hyperlinks eines Textes verwenden Sie die Funktion itemlist::hyperlinks.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
frameRef ItemRef - Gültige Rahmenreferenz

0 : Aktueller Skriptrahmen
nth int - 0-basierter Index des Hyperlinks

-1 : Benannter Anker des Rahmens selbst. In diesem Fall darf der Rahmen auch ein Bildrahmen sein.
result ItemRef 0 Allokierter ItemRef für das Ergebnis oder 0
start int* 0 ≠ 0 : Nach erfolgreicher Ausführung enthält die Variable die Startposition des Hyperlinks im Text.

0 : Ignorieren

Bei nth = -1 wird die Variable ignoriert.
len int* 0 ≠ 0 : Nach erfolgreicher Ausführung enthält die Variable die Länge des Hyperlinks im Text.

0 : Ignorieren

Bei nth = -1 wird die Variable ignoriert.

Besuche alle Hyperlinks eines Rahmens.

int by_nth (ItemRef fr)
{
    ItemRef	hy		= item::alloc ();
    int		count	= hyperlink::count (fr);
    int		i, start, len;
for (i = 0; i < count; i++) { hyperlink::get_nth (fr, i, hy, &start, &len); wlog ("", "XXXXX %d : %d %d\n", i+1, start, len);
start = hyperlink::get_pos (hy, &len); wlog ("", "YYYYY %d : %d %d\n", i+1, start, len); }
return 0; }

v4.1.8 R29140, 21. Sep 2021
nth = -1 unterstützt für InDesign® seit v4.3 R36020

priint:comet InDesign® Plug-Ins, comet_pdf

count
get_pos
itemlist::hyperlinks

static int hyperlink::get_pos(
  ItemRef hyRef,
  int* len = 0,
  ItemRef parentFrame = 0)

Ermittle Textposition und Länge eines Hyperlinks in einem Text.

Name Typ Default Beschreibung
Return int   ≥ 0 : Textposition des Hyperlinks (0-basiert)

-1 : Fehler
hyRef ItemRef - Gültige Referenz auf einen Hyperlink eines Textes.
len int* 0 ≠ 0 : Nach erfolgreicher Ausführung enthält die Variable die Länge des Hyperlinks im Text.

0 : Ignorieren
parentFrame ItemRef 0 Elternrahmen. Der Parameter ist nur für comet_pdf benötigt, sonst wird er ignoriert.

0 : Aktueller Skriptrahmen

Besuche alle Hyperlinks eines Rahmens in der Reihenfolge ihrer Textposition.

int by_list (ItemRef fr)
{
    ItemList 	hys		= itemlist::hyperlinks (fr);
    ItemRef		hy		= item::alloc ();
    int			i, start, len;
for (i = 0; i < itemlist::length (hys); i++) { itemlist::get (hys, hy, i);
start = hyperlink::get_pos (hy, &len); printf ("YYYYY %d : %d %d\n", i+1, start, len); }
return 0; }

Parameter parentFrame set v4.1.8 R29660, 4. Jan. 2022 v4.1.8 R29140, 21. Sep 2021

priint:comet InDesign® Plug-Ins, comet_pdf

count
get_nth
itemlist::hyperlinks

static ItemRef hyperlink::get_source(
  ItemRef frameRef,
  ItemRef hyRef = 0,
  int* startpos = 0,
  int* endpos = 0)

Ermittle den Hyperlink eines Rahmens oder eines Textbereiches.

Name Typ Default Beschreibung
Return ItemRef/int   0 : Der Rahmen hat keinen Hyperlink definiert

hyRef : Der Rahmen hat einen definierten Hyperlink

UID des Hyperlinks : Der Rahmen hat einen definierten Hyperlink aber hyRef ist 0
frameRef ItemRef 0 gültiger Rahmenverweis

0 : aktueller Skriptrahmen
hyRef ItemRef 0 allokierter Speicher für das Ergebnis oder 0
startPos int* 0 (in/out) Ist die Variable ungleich 0 und hat einen Inhalt >= 0, wird (wenn vorhanden) im Text des Rahmens an dieser Textstelle nach einem Hyperlink gesucht. Wird dort ein Hyperlink gefunden, bekommt die Variable die 0-basierte Anfangsposition des gefundenen Hyperlinks.
endPos int* 0 (in/out) Ende des Textbereiches, der durchsucht werden soll. Die Variable wird nur ausgewertet, wenn startPos != 0 ist. Ist sie != 0, enthält sie am Ende der Ausführung die Endposition des gefundenen Hyperlinks.

-1 : Ende des Textbereiches, der bei startPos beginnt. In Tabellenzellen ist das das Ende der Tabellenzelle, sonst des gesamtes Textes.

Hyperlinks werden nicht zwangsläfig in der Reihenfolge ihrer Textpositionen gefunden. Enthält der Textbereich mehrere Hyperlinks, ist also nicht festgelegt, welchen der Links Sie erhalten. Wie Sie alle Hyperlinks eines Textbereiches ermitteln, sehen Sie im zweiten Beispiel.

Für einen Rahmen soll ein neuer URL-Hyperlink anegelgt werden. Zuerst wird dafür ein mglw. bestehender Hyperlink gelöscht. Achten Sie darauf, dass Hyperlinks nicht automatisch sichtbar sind. Auch im Beispiel wird der neue Hyperlink nur dann sichtbar, wenn ebereits ein Link existierte und der sichtbar war. Sie können das Skript leicht so ändern, dass auch ein neuer Link sichtbar wird.

int main ()
{
    ItemRef		hy			= item::alloc ();
    ItemRef		src			= item::alloc ();
    int			visible		= 0;
    int			width		= 0;
    int			style		= 0;
    int			hilite		= 0;
    ItemRef		colref		= item::alloc ();
    int			result;
if (hyperlink::get_source (gFrame, src)) { visible = hyperlink::visible (src); width = hyperlink::borderwidth (src, &style); hilite = hyperlink::hilight (src); hyperlink::color (colref, src);
hyperlink::delete_ (src); } result = hyperlink::frame_create_urldest (   hy,   "not shared",   gFrame,   "http://www.priint-ii.com", 0); if (!result) return 0;
if (visible) hyperlink::appearance (hy, width, hilite, colref, 1, style);
return 0; }

Ermittle alle Hyperlinks eines Textes.

int main ()
{
    ItemRef		hy		= item::alloc ();
    int			start	= 0;
    int			end		= -1;
    int			p		= 0;
while (1) { if (p >= frame::textlength (gFrame, 1)) break; start = p; end = p; if (hyperlink::get_source (gFrame, hy, &start, &end)) { wlog ("", "[%d, %d] : '%s'\n", start, end, hyperlink::name (hy)); p = end; } else p = p +1; }
return 0; }

3.4 R7021, 18. Nov. 2014
Parameter startPos und endPos seit v3.4 R7022, 21. Nov. 2014

priint:comet InDesign® Plug-Ins

static int hyperlink::add_nameddest(
  ItemRef createdItem = 0,
  char* name = 0,
  ItemRef frameRef = 0,
  int pos = -1,
  int len = 1,
  float zoomPercent = 0.0,
  int destType = 0,
  float zoomRLeft = 0.0,
  float zoomRTop = 0.0,
  float zoomRRight = 0.0,
  float zoomRBottom = 0.0)

Erzeuge einen benannten Textanker im Dokument. Textanker können als Sprungziele für Lesezeichen und Inhaltsverzeichnisse z.B. mit book::create_toc verwendet werden. Alternativ können Sie zum Anlegen von Textankern auch die Funktion textmodel::insert_crossref verwenden.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
createdItem ItemRef 0 Allokierter Speicher für den erzeugten Anker.

0 : Ergebnis wird nicht benötigt
sonst : mit item::alloc reservierter Speicher
name char* oder String 0 Name des Ankers. Anker müssen eindeutig benannt sein!

(0 oder "") und len ≤ 4 : Empfohlen! Ankername automatisch vergeben, siehe auch get_next_unique_key

sonst : Auf 32 Buchstaben gekürzter Textinhalt
frameRef ItemRef 0 Zielrahmen des Ankers
0 : Skriptrahmen
startpos int -1 Textposition, an dem der Verweis beginnen soll.

-1 : Linke obere Ecke des Rahmen als Ziel verwenden. Diese Einstellung ist nur für comet_pdf verfügbar. In InDesign® wird bei Textpositionen kleiner 0 der Textanfang verwendet.
≥ 0 : Textposition des Ankers. Die Textpositionen sind relativ zum Textmodel nicht zum eventuellen Platzhalter des Skriptes!
len int 1 Länge des Ankers. Die Länge wird ausschließlich zur Ermittlung des Namens des Ankers verwendet. Namen werden auf 32 Zeichen beschränkt.
⇨ Nach dem Sprung zu einem Verweisziel kann die SeitenGröße der Zielseite geändert werden.
zoomPercent float 0.0 Skalierungsfaktor für die Zielseite (1.0 entspricht 100%). Es sind Werte zwischen 0.05 und 40.0 erlaubt.

0.0 : Skalierung beibehalten.
destType int kBookmarkDestInheritZoom Angaben zur Seitenpositionierung um Fensterrahmen. Die Werte entsprechen der Auswahl " Zoom-Einstellung" des Dialoges "Hyperlink bearbeiten" der Palette "Hyperlinks".

kBookmarkDestInheritZoom : Zoom übernehmen
kBookmarkDestFitWindow : In Fenster einpassen
kBookmarkDestFitWidth : Breite einpassen
kBookmarkDestFitHeight : Höhe einpassen
kBookmarkDestFitView : Ansicht einpassen
kBookmarkDestFitVisible : Sichtbaren Bereich einpassen

Die Einstellung "Fester Wert" erreichen Sie dadurch, dass Sie für zoomPercent den Wert 0.0 angeben.
⇨ Mit den folgenden Angaben können Sie den Ausschnitt der Zielseite festlegen. In unseren Tests ist es uns allerdings nicht gelungen, Hyperlinks zu erzeugen, die diese Einstellungen auch tatsächlich verwenden. Zudem sind die erlaubten Werte für destType, die den Ausschnitt der Zielseite ebenfalls beeinflußen, in JavaScript und C++-API unterschiedlich. Wir übergeben die Werte der Parameter daher hier ohne weitere Garantie!
zoomRLeft float 0.0 linke Seite des Zielausschnittes
zoomRTop float 0.0 obere Seite des Zielausschnittes
zoomRRight float 0.0 rechte Seite des Zielausschnittes
zoomRBottom float 0.0 untere Seite des Zielausschnittes
#include "internal/types.h"

Hier ein vollständige Beispiel zum Anlegen von Lesenzeichen in einem von comet_pdf erzeugten PDF. Im unteren Teil des Skriptes werden dazu die Zielanker der Lesezeichen als benannte Ziele definiert. Das Skript setzt die Existenz von Rahmen mit festgelegten UID voraus. Eine passende Testdatei finden Sie hier. Mit der folgenden Terminal-Anweisung kann das Skript ausgeführt werden:

    /.comet_pdf -i \$DESKTOP/bm.w2ml -e \$DESKTOP\bookmarks.cpp -L

Hier ein Screenshot des Ergebnisses:

#include "internal/types.h"
#include "internal/text.h"
int main () { ItemRef head = item::alloc (); ItemRef bm = item::alloc (); ItemRef bb = item::alloc (); ItemRef hy = item::alloc (); ItemRef fr = item::alloc (); ItemRef colid = item::alloc (); IDTypeList anchors = idtypelist::alloc (-1); IDType anchor; Table T = table::alloc (); int i, start, len; ItemList hyperlinks;
color::define_rgb ("", 255, 128, 0, 0, colid);
// Create some book marks // bookmark::create (head, 0, 0, 1, "pg. 1"); // jump to pg 1 bookmark::change_fontstyle (head, bold+italic); bookmark::change_color (head, colid);
bookmark::create (bm, 0, 0, 2, "pg. 2", "pg. 1"); // jump to pg 2 bookmark::change_fontstyle (bm, bold); bookmark::create (bm, 0, 0, 3, "pg. 3", "pg. 1"); // jump to pg 3
bookmark::create (bm, 0, 0, 4, "Seite 4", "pg. 1", -1, 0.0, kBookmarkDestXYZ, 0.0, 263.0, 1.0, 300.0); bookmark::create (bm, 0, 0, 2, "Seite 2", "pg. 1"); bookmark::create (bm, 0, 0, 3, "Seite 3", "pg. 1"); bookmark::create (bm, 0, 0, 4, "Seite 4", "pg. 1");
bookmark::create (bm, 0, 0, 4, "pg. 4");
printf ("UID_AAA of 'a4' : %d\n", item::getint (bm)); bookmark::add (bm, 0, 0, 1, "Sivu 1", head); bookmark::change_fontstyle (bm, italic); bookmark::add (bm, 0, 0, 2, "Sivu 2", head); bookmark::add (bm, 0, 0, 3, "Sivu 3", head);
// Check bookmark functions //
// name bookmark::find (bm, 0, "pg. 4"); printf ("UID_BBB of '%s' : %d\n", bookmark::name (bm), item::getint (bm));
// parent bookmark::find (bm, 0, "Seite 2"); bookmark::parent (bb, bm); printf ("Parent of 'b2' is '%s' with UID %d\n", bookmark::name (bb), item::getint (bb)); printf ("'b2' has UID %d\n", item::getint (bm));
// childs bookmark::find (bm, 0, "pg. 1"); printf ("'a2' has %d children\n", bookmark::childs (bm));
// nthchild bookmark::nthchild (bb, bm, 2); printf ("3rd child of 'a2' is '%s\n", bookmark::name (bb));
// child bookmark::find (bm, 0, "pg. 1"); bookmark::child (bb, bm, "Seite 2", 0); printf ("'a1' has direct child 'b2' ? %d\n", item::getint (bb));
bookmark::child (bb, bm, "Seite 2", 1); printf ("'a1' has child 'b2' ? %d\n", item::getint (bb));
// is_valid printf ("%d is a valid book mark ? %d\n", item::getint (bb), bookmark::is_valid (bb)); item::define (bb, 0, 123, 0); printf ("%d is a valid book mark ? %d\n", item::getint (bb), bookmark::is_valid (bb));
// change_pos bookmark::find (bm, 0, "Seite 4"); bookmark::change_pos (bm, 3);
bookmark::find (bm, 0, "Seite 4"); bookmark::change_pos (bm, 0);
// change_name bookmark::find (bm, 0, "Seite 4"); bookmark::change_name (bm, "New name of 'Seite 4'");
// change_parent bookmark::find (bm, 0, "Seite 4"); bookmark::find (bb, 0, "Sivu 1"); bookmark::change_parent (bm, bb, 1);
// remove bookmark::find (bm, 0, "Sivu 1"); //bookmark::remove (bm);
// Create named destinations to some text and add bookmarks // item::define (fr, 0, 330); hyperlink::add_nameddest (hy, 0, fr, 1089, 0); printf ("AA-> hyperlink dest of uid %d created at text position 1089\n", item::getint (hy)); bookmark::create2 (bm, 0, hy, "occusamus", 0, -1);
hyperlink::add_nameddest (hy, 0, fr, 1697, 0); printf ("BB-> hyperlink dest of uid %d created at text position 1690\n", item::getint (hy)); bookmark::create2 (bm, 0, hy, "oditasim", 0, -1);
table::get (T, fr, 0); table::cell::get_textpos (T, 1, 2, &start, &len); hyperlink::add_nameddest (hy, 0, fr, start, 7); inside a table printf ("CC-> hyperlink dest of uid %d created at text position %d\n", item::getint (hy), start); bookmark::create2 (bm, 0, hy, "AAAAA", 0, -1);
// Create named destinations to some frames and add bookmarks // item::define (fr, 0, 327); hyperlink::add_nameddest (hy, 0, fr, -1, 0); frame printf ("hyperlink dest of uid %d created\n", item::getint (hy)); bookmark::create2 (bm, 0, hy, "Blue Frame", 0, -1);
item::define (fr, 0, 369); hyperlink::add_nameddest (hy, 0, fr, -1, 0); frame bookmark::add2 (bb, 0, hy, "Yellow Frame", bm);
// Get anchors of frames // item::define (fr, 0, 327); if (hyperlink::get_nth (fr, -1, hy) == 0) { printf ("Frame %d has an named dest : '%s'\n", item::getint (fr), hyperlink::name (hy)); } else { printf ("Frame %d has no named anchor\n", item::getint (fr)); }
item::define (fr, 0, 330); if (hyperlink::get_nth (fr, -1, hy) == 0) { printf ("Frame %d has an named dest : '%s'\n", item::getint (fr), hyperlink::name (hy)); } else { printf ("Frame %d has no named anchor\n", item::getint (fr)); }
// Get hyperlinks of text // item::define (fr, 0, 330);
printf ("Frame %d has %d hyperlinks\n", item::getint (fr), hyperlink::count (fr));
hyperlinks = itemlist::hyperlinks (fr); printf ("Frame %d has %d hyperlinks\n", item::getint (fr), itemlist::length (hyperlinks)); for (i = 0; i < itemlist::length (hyperlinks); i++) { itemlist::get (hyperlinks, hy, i); start = hyperlink::get_pos (hy, &len, fr); printf (" %d : %d %d (%s) Type = %d\n", i+1, start, len, hyperlink::name (hy), hyperlink::type (hy)); }
return 0; }

v4.1.8 R29650, 22. Dez. 2021
Verfügbar für InDesign® seit v4.3 R36410, 28. Mär 2025

priint:comet InDesign® Plug-Ins, comet_pdf

bookmark

static int hyperlink::create_textdest(
  ItemRef createdItem,
  char* name,
  ItemRef frameRef,
  int startpos,
  int endPos,
  ItemRef textAnchorRef)

Anlegen eines Textverweises zu einem benannten Textanker. Der Textanker kann auch in einem beliebigen anderen aber geöffneten Dokument liegen.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
createdItem ItemRef - Allokierter Speicher für den erzeugten Link.

0 : Ergebnis wird nicht benötigt
sonst : mit item::alloc reservierter Speicher
name String oder char* - Name des Verweises. Ist der Name leer, wird er aus dem Text ermittelt (und auf max. 32 Zeichen gekürzt.)
frameRef ItemRef - Rahmen des Textmodelles, in dem der Verweis erstellt werden soll.
0 : Textmodell des Skriptes
startpos int - Textposition, an dem der Verweis beginnen soll. Die Textpositionen sind relativ zum Textmodel nicht zum eventuellen Platzhalter des Skriptes.
endPos int - Textposition, an dem der Verweis enden soll. Die Länge des Verweises muss mind. 1 betragen. Die Textpositionen sind relativ zum Textmodel nicht zum eventuellen Platzhalter des Skriptes.
textAnchorRef ItemRef - Sprungziel. Das Ziel muß ein gültiger Textanker eines geöffneten Dokumentes sein. Textanker erhalten Sie z.B. mit der Funktion hyperlink::find.

Hier ein vollständiges Beispiel, das zu den Textankern der Dokumente eines Buches ein klickbares Inhaltsverzeichnis erstellt. Das Dokument mit dem Zielrahmen für das Inhaltsverzeichnis muß sich in einem aktuell geöffneten Buch befinden! Hier finden Sie eine Testumgebung inklusive Beschreibung.

Hinweis: Das Skrpit dient nur zur Demonstration und zur Lösung besonders hartnäckiger Fälle. Beim Testen werden Sie bemerken, dass das Skript den aktuellen Rahmeninhalt komplett durch das Inhaltsverzeichnis ersetzt. Das können Sie mit etwas Aufwand korrigieren, einfacher ist es aber, einen CrossRef-Platzhalter und die Funktion book::create_toc zu verwenden.

#pragma plain
int main() { LinkList lks = linklist::alloc (); Link lk; String str = string::alloc (); String entry = string::alloc (); int olen; int id;
// Remove all old entries // frame::replace (gFrame, "");
// Collect all hyperlinks of all documents of the book // hyperlink::find (   lks, // Result list   0, // Current document   "", // Ignore the cross-reference name   3, // Search for 'Product's only   0, 0, 0, "",   1, // Search the entire book   1, 1, 1, 1, // Formatting the page names   1, // We need the xy co-ordinates to sort the results   0); // Sort col wise
for (lk = linklist::first (lks); lk != 0; lk = linklist::next (lks)) { // Get the document text at the destination // frame::gettext (   link::crossref::frame (lk),   str,   link::crossref::src_textpos (lk)+1,   link::crossref::src_textlen (lk)-1);
if (link::crossref::type (lk) == 0 && string::length (str)) { // Remember the current insertion point. // We need this so that we can position // the hyperlink correctly. // olen = frame::textlength (gFrame);
id = placeholder::get_value (link::crossref::frame (lk), "ID", link::crossref::pos (lk)+1);
// Insert the toc entry text // string::set (entry, "%!TT"); if (olen > 0) { string::append (entry, "<ParaStyle:TOC-Entry>"); if (id % 100 == 0) string::append (entry, "<ParaStyle:TOC-Entry>"); }
if (id % 100 == 0) { string::append (entry, "<ParaStyle:TOC-Entry><CharStyle:Bold>%s\t%d<CharStyle:>", str, link::crossref::page (lk, 0)); } else { string::append (entry, "<ParaStyle:TOC-Entry>%s\t%d", str, link::crossref::page (lk, 0)); } frame::append (gFrame, entry);
// Link the toc entry to the destination // if (id % 100 == 0) { int pp = olen;
if (olen > 0) pp += 2; hyperlink::create_pagedest (   0, 0,   gFrame,   pp, -1,   link::crossref::document (lk, 0),   link::crossref::page (lk, 1)); } else { hyperlink::create_textdest (   0, 0,   gFrame,   olen + 1, -1,   link::crossref::hyperlink_ref (lk)); } } }
string::release (str); string::release (entry); linklist::release (lks);
return 0; }

v4.3 R35900, 7. Jan 2025

priint:comet InDesign® Plug-Ins

hyperlink::find

static int hyperlink::create_pagedest(
  ItemRef createdItem,
  char* name,
  ItemRef frameRef,
  int startpos,
  int endpos,
  char* destDoc,
  int pageNum,
  float zoomPercent = 0.0,
  int destType = 0,
  float zoomRLeft = 0.0,
  float zoomRTop = 0.0,
  float zoomRRight = 0.0,
  float zoomRBottom = 0.0)

Anlegen eines Textverweises auf eine Dokumentseite. Verweise werden im Dokument gemäß der Dokumenteinstellung für Hyperlinks dargestellt. Verwenden Sie die Funktion hyperlink::appearance, um die Darstellung von Verweisen zu ändern.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
createdItem ItemRef - Allokierter Speicher für den erzeugten Link.

0 : Ergebnis wird nicht benötigt
sonst : mit item::alloc reservierter Speicher
name String oder char* - Name des Verweises. Ist der Name leer, wird er aus dem Text ermittelt (und auf max. 32 Zeichen gekürzt.)
frameRef ItemRef - Rahmen des Textmodelles, in dem der Verweis erstellt werden soll.
0 : Textmodell des Skriptes
startpos int - Textposition, an dem der Verweis beginnen soll. Die Textpositionen sind relativ zum Textmodel nicht zum eventuellen Platzhalter des Skriptes.
endpos int - Textposition, an dem der Verweis enden soll. Die Länge des Verweises muss mind. 1 betragen. Die Textpositionen sind relativ zum Textmodel nicht zum eventuellen Platzhalter des Skriptes.
destDoc String oder char* - Zieldokument

0, "" oder Pfad des aktuellen Dokumentes : Verweis auf eine Seite innerhalb des aktuellen Dokumentes

sonst : Vollständiger Pfad des Zieldokumentes. Das Dokument muß nicht geöffnet sein. Bitte beachten Sie, dass als Zieldokument das InDesign® -Dokument erwartet wird.
pageNum int - Zielseite (1-basiert)
⇨ Nach dem Sprung zu einem Verweisziel kann die Seitengröße der Zielseite geändert werden.
zoomPercent float 0.0 Skalierungsfactor für die Zielseite (1.0 entspricht 100%). Es sind Werte zwischen 0.05 und 40.0 erlaubt.

0.0 : Skalierung beibehalten.
destType int "Fester Wert" Angaben zur Seitenpositionierung um Fensterrahmen. Die Werte entsprechen der Auswahl " Zoom-Einstellung" des Dialoges "Hyperlink bearbeiten" der Palette "Hyperlinks".

kBookmarkDestInheritZoom : Zoom übernehmen
kBookmarkDestFitWindow : In Fenster einpassen
kBookmarkDestFitWidth : Breite einpassen
kBookmarkDestFitHeight : Höhe einpassen
kBookmarkDestFitView : Ansicht einpassen
kBookmarkDestFitVisible : Sichtbaren Bereich einpassen

Die Einstellung "Fester Wert" erreichen Sie dadurch, dass Sie für zoomPercent den Wert 0.0 angeben.
⇨ Mit den folgenden Angaben können Sie den Ausschnitt der Zielseite festlegen. In unseren Tests ist es uns allerdings nicht gelungen, Hyperlinks zu erzeugen, die diese Einstellungen auch tatsächlich verwenden. Zudem sind die erlaubten Werte für destType, die den Ausschnitt der Zielseite ebenfalls beeinflußen, in JavaScript und C++-API unterschiedlich. Wir übergeben die Werte der Parameter daher hier ohne weitere Garantie!
zoomRLeft float 0.0 linke Seite des Zielausschnittes
zoomRTop float 0.0 obere Seite des Zielausschnittes
zoomRRight float 0.0 rechte Seite des Zielausschnittes
zoomRBottom float 0.0 untere Seite des Zielausschnittes
#include "internal/types.h"


priint:comet InDesign® Plug-Ins, comet_pdf

create_urldest
frame_create_pagedest
frame_create_urldest
appearance
comet.hyperlink.createPageDestination

static int hyperlink::create_urldest(
  ItemRef createdItem,
  char* name,
  ItemRef frameRef,
  int startpos,
  int endpos,
  char* url,
  int shared = 1)

Anlegen eines Textverweises auf eine URL. Verweise werden im Dokument gemäß der Dokumenteinstellung für Hyperlinks dargestellt. Verwenden Sie die Funktion hyperlink::appearance, um die Darstellung von Verweisen zu ändern.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
createdItem ItemRef - Allokierter Speicher für das Ergebnis.

0 : Ergebnis wird nicht benötigt
sonst : mit item::alloc reservierter Speicher
name String oder char* - Name des Verweises. Ist der Name leer, wird er aus dem Text ermittelt (und auf max. 32 Zeichen gekürzt.)
frameRef ItemRef - Rahmen des Textmodelles, in dem der Verweis erstellt werden soll.
0 : Textmodell des Skriptes
startpos int - Textposition, an dem der Verweis beginnen soll. Die Textpositionen sind relativ zum Textmodel nicht zum eventuellen Platzhalter des Skriptes.
endpos int - Textposition, an dem der Verweis enden soll. Die Länge des Verweises muss mind. 1 betragen. Die Textpositionen sind relativ zum Textmodel nicht zum eventuellen Platzhalter des Skriptes.
url String oder char* - Sprungziel, vollständige URL. Als URLs sind auch eMails erlaubt. eMail-Links haben die Form mailto:name@...subject=.... Der subject-Teil ist optional.
shared int 1 [Ab v3.3 R3820, 4. Juni 2013] Soll der Hyperlink auf ein freigegebenes Hyperlink-Ziel zeigen? Aus Gründen der Rückwärtskompatibilität hat der Parameter den Defaultwert 1. Wir empfehlen, ihn auf den Wert 0 zu setzen.

0 : Nein
1 : Ja
#include "internal/text.h"
#include "internal/types.h"

Erzeuge einen eMail-Hyperlink um die aktuelle Textauswahl.

#include "internal/types.h"
#include "internal/text.h"
int main() { int start, len; ItemRef hy = 0; char hname [512]; char hlink [512]; ItemRef colref = 0; int err = 0;
textmodel::selection (&start, &len); if (start == kEnd || len <= 0) { showerror ("No text selection."); return 0; }
strcpy(hname, "Paul"); strcpy(hlink, "mailto:paul@werk.ii.com?subject=cScript question");
hy = item::alloc (); err = hyperlink::create_urldest(   hy,   hname,   0, start, start + len,   hlink,   0); // do not create a shared destination inside the document if (err) { showerror ("Could NOT create hyperlink."); item::release(hy); return 0; }
colref = item::alloc (); color::define_rgb ("", 255, 128, 0, 0, colref); hyperlink::appearance (   hy,   1, // border width is of type int!   kOutlineHyperlinkHilight,   colref,   1, // visible   1); // dashed
item::release(hy); item::release(colref);
return 0; }

v1.4.1, R406, 4. Juli 2007
Parameter shared seit v3.3 R3820, 4. Jun 2013

priint:comet InDesign® Plug-Ins, comet_pdf

create_pagedest
bookmark
create_pagedest
frame_create_pagedest
frame_create_urldest
comet.hyperlink.createURLDestination

static int hyperlink::frame_create_pagedest(
  ItemRef createdItem,
  char* name,
  ItemRef frameRef,
  char* destDoc,
  int pageNum,
  float zoomPercent = 0.0,
  int destType = 0,
  float zoomRLeft = 0.0,
  float zoomRTop = 0.0,
  float zoomRRight = 0.0,
  float zoomRBottom = 0.0)

Anlegen eines Rahmenverweises auf eine Dokumentseite. Verweise werden im Dokument gemäß der Dokumenteinstellung für Hyperlinks dargestellt. Verwenden Sie die Funktion hyperlink::appearance, um die Darstellung von Verweisen zu ändern.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
createdItem ItemRef - Allokierter Speicher für den erzeugten Link.

0 : Ergebnis wird nicht benötigt
sonst : mit item::alloc reservierter Speicher
name String or char* - Name des Verweises. Ist der Name leer, wird er aus dem Text ermittelt (und auf max. 32 Zeichen gekürzt.)
frameRef ItemRef - Hyperlink an diesem Rahmen anlegen

0 : Aktueller Skriptrahmen
sonst : Gültiger Rahmenverweis
destDoc String or char* - Zieldokument

0, "" oder Pfad des aktuellen Dokumentes : Verweis auf eine Seite innerhalb des aktuellen Dokumentes

sonst :
  • InDesign® : Vollständiger Pfad des InDesign®-Zieldokumentes. Das Dokument muß nicht geöffnet sein.
  • comet_pdf : Vollständiger oder relativer Pfad des Zieldokumentes. Die Endung 'indd' ist erlaubt und wird automatisch durch 'pdf' ersetzt.
$-Aliasse am Pfadbeginn sind erlaubt.
pageNum int - Zielseite (1-basiert)
⇨ Nach dem Sprung zu einem Verweisziel kann die SeitenGröße der Zielseite geändert werden.
zoomPercent float 0.0 Skalierungsfactor für die Zielseite (1.0 entspricht 100%). Es sind Werte zwischen 0.05 und 40.0 erlaubt.

0.0 : Skalierung beibehalten.
destType int "Fester Wert" Angaben zur Seitenpositionierung um Fensterrahmen. Die Werte entsprechen der Auswahl " Zoom-Einstellung" des Dialoges "Hyperlink bearbeiten" der Palette "Hyperlinks".

kBookmarkDestInheritZoom : Zoom übernehmen
kBookmarkDestFitWindow : In Fenster einpassen
kBookmarkDestFitWidth : Breite einpassen
kBookmarkDestFitHeight : Höhe einpassen
kBookmarkDestFitView : Ansicht einpassen
kBookmarkDestFitVisible : Sichtbaren Bereich einpassen

Die Einstellung "Fester Wert" erreichen Sie dadurch, dass Sie für zoomPercent den Wert 0.0 angeben.
⇨ Mit den folgenden Angaben können Sie den Ausschnitt der Zielseite festlegen. In unseren Tests ist es uns allerdings nicht gelungen, Hyperlinks zu erzeugen, die diese Einstellungen auch tatsächlich verwenden. Zudem sind die erlaubten Werte für destType, die den Ausschnitt der Zielseite ebenfalls beeinflußen, in JavaScript und C++-API unterschiedlich. Wir übergeben die Werte der Parameter daher hier ohne weitere Garantie!
zoomRLeft float 0.0 linke Seite des Zielausschnittes
zoomRTop float 0.0 obere Seite des Zielausschnittes
zoomRRight float 0.0 rechte Seite des Zielausschnittes
zoomRBottom float 0.0 untere Seite des Zielausschnittes
#include "internal/text.h"
#include "internal/types.h"

v1.4.1, R446, 27. Aug 2007

priint:comet InDesign® Plug-Ins, comet_pdf ab v4.3 R36328

frame_create_urldest
create_pagedest
create_urldest
comet.hyperlink.createPageDestination

static int hyperlink::frame_create_urldest(
  ItemRef createdItem,
  char* name,
  ItemRef frameRef,
  char* url,
  int shared = 1)

Anlegen eines Rahmenverweises auf eine URL. Verweise werden im Dokument gemäß der Dokumenteinstellung für Hyperlinks dargestellt. Verwenden Sie die Funktion hyperlink::appearance, um die Darstellung von Verweisen zu ändern.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
createdItem ItemRef - Allokierter Speicher für den erzeugten Link.

0 : Ergebnis wird nicht benötigt
sonst : mit item::alloc reservierter Speicher
name String oder char* - Name des Verweises. Ist der Name leer, wird der Standardname "Hyperlink" verwendet.
frameRef ItemRef - Rahmen, für den der Verweis erstellt werden soll.
0 : aktueller Skriptrahmen
url String oder char* - Sprungziel, vollständige URL
shared int 1 Ist das Ziel freigegeben oder nicht?

0 : Nein, nicht freigegeben
1 : Freigegebenes Ziel

v1.4.1, R446, 27. Aug 2007

priint:comet InDesign® Plug-Ins

create_pagedest
bookmark
frame_create_pagedest
create_pagedest
create_urldest
comet.hyperlink.createURLDestination

static char* hyperlink::name(ItemRef hy)

Ermittle den Namen eines Verweises. Die Ergebnisvariable wird durch folgende Aufrufe der selben Funktion überschrieben!

Name Typ Default Beschreibung
Return char*   Name des Verweises oder ""

Der Rückgabewert darf nicht verändert werden und wird bei folgenden Aufrufen der Funktion überschrieben. Hier finden Sie Informationen zu readonly-Rückgaben von Funktionen.

hy ItemRef - Gültige Verweisreferenz

Schreibe den Namen eines Verweises ins Logfile.

wlog ("", "%s\n", hyperlink::name (hy));

Hebe den Namen eines Verweises für eine spätere Verwendung auf.

char		hyName[64];
strcpy (hyName, hyperlink::name (hy));


priint:comet InDesign® Plug-Ins, comet_pdf

setname
comet.CHyperlink.getName
comet.CHyperlinkDestination.getName

static int hyperlink::type(ItemRef hy)

Ermittle den Typ eines Hyperlinks.

Name Typ Default Beschreibung
Return int   Typ des Hyperlinks

0 : Undefiniert
1 : URL
2 : Datei
3 : Mail (nur comet_pdf). InDesign® gibt hier den Wert 1 (URL) zurück.
4 : Seite
5 : Textanker
8 : Benanntes Ziel (nur comet_pdf)
hy ItemRef - Gültige Verweisreferenz

v4.1.8 R29660, 4. Jan. 2022

priint:comet InDesign® Plug-Ins, comet_pdf

comet.CHyperlink.getType

static ItemRef hyperlink::destination(ItemRef dest, ItemRef hy)

Ermittle die Zielreferenz eines Verweises.

Name Typ Default Beschreibung
Return ItemRef   Der Parameter dest wird zurückgegeben. Wurde der Verweis nicht gefunden oder hat er kein Sprungzeil, wird 0 zurückgegeben.
hy ItemRef - Gültige Verweisreferenz
dest ItemRef - Mit item::alloc allokierte Variable für das Ergebnis.

Erstelle ein Lesezeichen zum Ziel eines Verweises.

int main ()
{
    ItemRef		hy		= item::alloc ();
    ItemRef		dest	= item::alloc ();
    ItemRef		bk		= item::alloc ();
hyperlink::create_pagedest (hy, 0, gFrame, 20, 30, "", 5); bookmark::create2 (   bk,   0,   hyperlink::destination (dest, hy),   hyperlink::name (hy),   "");
return 0; }


priint:comet InDesign® Plug-Ins

comet.CHyperlink.getDestination

static int hyperlink::visible(ItemRef hy)

Ist der Verweis sichtbar oder nicht?

Name Typ Default Beschreibung
Return int   0 : unsichtbar
1 : sichtbar
hy ItemRef - Gültige Verweisreferenz


priint:comet InDesign® Plug-Ins

show
hide
comet.CHyperlink.getVisible

static int hyperlink::hilight(ItemRef hy)

Wie wird der Verweis dargestellt?

Achtung

Die Einstellung wird nicht verwendet, um die Sichtbarkeit des Rahmens in InDesign® zu steuern. Hier ein Auszug aus der entsprechenden Adobe-Doku : This only matters when the file is exported to PDF. Um die Sichtbarkeit des Rahmens zu steuern, verwenden Sie die Funktionen show und hide.

Name Typ Default Beschreibung
Return int   kNoHyperlinkHilight
kInvertHyperlinkHilight
kInsetHyperlinkHilight
kOutlineHyperlinkHilight
hy ItemRef - Gültige Verweisreferenz
#include "internal/text.h"
#include "internal/types.h"


priint:comet InDesign® Plug-Ins

appearance
show
hide
comet.CHyperlink.getHilight

static int hyperlink::borderwidth(ItemRef hy)

Rahmenstärke eines Verweises.

Name Typ Default Beschreibung
Return int   Rahmenstärke des Verweises

1 : dünn
2 : mittel
3 : stark
hy ItemRef - Gültige Verweisreferenz


priint:comet InDesign® Plug-Ins

appearance
comet.CHyperlink.getBorderWidth

static ItemRef hyperlink::color(ItemRef colRef, ItemRef hy)

Aktuelle Farbe des Verweisrahmens. Es wird ein ItemRef auf die gesuchte Farbe zurückgegeben.

Name Typ Default Beschreibung
Return ItemRef   Die Variable colRef wird zurückgegeben. Bei Fehlern wird 0 zurückgegeben.
hy ItemRef - Gültige Verweisreferenz


priint:comet InDesign® Plug-Ins

appearance
comet.CHyperlink.getColor

static ItemRef hyperlink::setname(ItemRef hy, char* newname)

Ändere den Namen eines Verweises.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode.
hy ItemRef - Gültige Verweisreferenz
newname String oder char* - Neuer Name für den Verweis. Anders als beim Anlegen eines Verweises darf der Name hier nicht leer sein.


priint:comet InDesign® Plug-Ins

name
comet.CHyperlink.setName

static ItemRef hyperlink::show(ItemRef hy)

Mache den Verweis sichtbar.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode.
hy ItemRef - Gültige Verweisreferenz


priint:comet InDesign® Plug-Ins

visible
hide
comet.CHyperlink.setVisible

static ItemRef hyperlink::hide(ItemRef hy)

Mache den Verweis unsichtbar.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode.
hy ItemRef - Gültige Verweisreferenz


priint:comet InDesign® Plug-Ins

visible
show
comet.CHyperlink.setVisible

static ItemRef hyperlink::appearance(
  ItemRef hy,
  int borderwidth,
  int hstate,
  ItemRef colRef = 0,
  int visible = -1,
  int dashed = -1)

Ändere das Aussehen eines Verweises.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode.
hy ItemRef - Gültige Verweisreferenz
borderwidth int - Linienstärke

-1 : Unverändert
1 : dünn
2 : mittel
3 : stark
hstate int - Wählen Sie einen der folgenden Werte. Diese Einstellung wird nur in der exportierten PDF-Datei verwendet.

-1 : Unverändert
kNoHyperlinkHilight
kInvertHyperlinkHilight
kInsetHyperlinkHilight
kOutlineHyperlinkHilight

Die Angabe kNoHyperlinkHilight bewirkt nicht, dass der Rahmen unsichtbar wird, dazu wird der Parameter visible verwendet..
colRef ItemRef 0 Farbe des Verweisrahmens
0 : Farbe unverändert lassen
visible int -1 Sichtbar oder nicht?

-1 : unverändert
1 : sichtbar
0 : unsichtbar
dashed int -1 Soll der Rahmen gestrichelt sein?

-1 : unverändert
0 : Nein. Der Rahmen ist durchgezogen
1 : Ja, Rahmen stricheln
#include "internal/types.h"

Der Verweis soll einen orangen Rahmen bekommen.

int main ()
{
    ItemRef		hy		= item::alloc ();
    ItemRef		colid	= item::alloc ();
hyperlink::create_pagedest (hy, 0, gFrame, 20, 30, "", 5);
color::define_rgb ("", 255, 128, 0, 0, colid); hyperlink::appearance (   hy,   hyperlink::borderwidth (hy),   hyperlink::hilight (hy),   colid,   1);
return 0; }

Parameter visible und dashed seit Version 1.4.2 R 520, 7. Dez. 2007

priint:comet InDesign® Plug-Ins, comet_pdf

borderwidth
hilight
color
show
hide
comet.CHyperlink.setColor
comet.CHyperlink.setBorderWidth
comet.CHyperlink.setOutlineStyle
comet.CHyperlink.setVisible
comet.CHyperlink.setHilight

static ItemRef hyperlink::goto_source(ItemRef hy)

Gehe im Dokument zu der Stelle, an der der Verweis definiert ist.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode.
hy ItemRef - Gültige Verweisreferenz


priint:comet InDesign® Plug-Ins

static ItemRef hyperlink::goto_destination(ItemRef hy)

Gehe im Dokument zu der Seite, auf die der Verweis zeigt.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode.
hy ItemRef - Gültige Verweisreferenz


priint:comet InDesign® Plug-Ins

static int hyperlink::find(
  LinkList resultList,
  ItemRef docRef,
  char* crossRefName,
  long classid,
  long id,
  long id2 = 0,
  long id3 = 0,
  char* sid = 0,
  int findInBook = 1,
  int inclSection = 1,
  int intStyle = 1,
  int numType = 0,
  int abbrev = 1,
  int calcTextPos = 0,
  int sortType = -1)

Suche alle Querverweis-Definitionen eines bestimmten Namens mit einer gegebenen Comet-ID. Links dieser Art werden durch das Tag <w2cross> oder einen Aufruf der Funktion textmodel::insert_crossref angelegt. Eine ausführliche Beschreibung zu Comet-Querverweisen finden sie hier.

Beim Anlegen der Querverweis-Definitionen werden Name und Zielname (bestehend aus Klassennummer des Objektes, ID, ID2, ID3 und StringID) des Links zwar fest vorgegeben. Existiert ein Objekt gleichen Namens aber schon im Dokument, versieht InDesign® die Namen jeweils mit einer eindeutigen Nummer am Ende - es können also (bis auf diese Endung, die Sie nicht kennen), beliebig viele Links des gesuchten Namens und Zieles im Dokument existieren. Die Funktion findet alle Querverweis-Definitionen, deren Namen und/oder Ziel mit dem gegebenen String beginnen.

Verweise, die im Overset liegen, werden nicht gefunden.

Sie können die Links in allen Dokumenten des Buches suchen, zu denen das gegebene Dokument gehört. Das zugehörige Buch muß dazu geöffnet. Enthalten mehrere geöffnete Bücher das Dokument, wird das erste gefundene Buch verwendet. Nicht geöffnete Dokumente werden automatisch geöffnet (und wieder geschlossen). Beim Öffnen und Schließen dieser Dokumente wird der Comet-Mechanismus der Dokumentbeobachtung zwischenzeitlich abgeschaltet (siehe set_docwatch und get_docwatch).

Die Ergebisse stehen nach erfolgreichem Ende der Funktion in der Liste resultList. Seitennamen, die geöffnete Dokumente erfordern, werden in dieser Liste festgehalten und können nach dem Ende der Funktion erfragt werden, ohne dass die zugehörigen Dokumten noch einmal geöffnet werden müssen. Dazu müssen Sie der Funktion aber einige Informationen mitgeben, wie die Seitennamen aussehen sollen (inclSection, intStyle, numType, numType)

[Ab v3.3 R3116, 13.08.2012] Wird classid 0 übergeben, werden die Namen nicht automatisch mit den Comet-Objekt-IDs verlängert. Im Parameter sid können Sie dann den Namen des Textankers angeben, nach dem Sie suchen. Es werden alle Verweise gefunden, deren Ziel mit dieser Angabe beginnt. Auch hier bedeutet ein Leerstring, dass alle Textanker gefunden werden.

[Ab v3.3 R3116, 13.08.2012] Die Funktion kann auch verwendet werden, um ausschließlich nach den im Dokument definerten Textankern zu suchen. Geben Sie dazu dem Parameter crossRefName den Wert "ANCHORS#" in genau dieser Schreibweise. Die Ergebnisse haben dann keine Informationen über den Hyperlink sondern nur Informationen über den Textanker.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode.
resultList LinkList - Allokierte Ergebnisliste. Bestehende Einträge der Liste werden bei Funktionsbeginn gelöscht. Mit den linklist-Funktionen können Sie diese Liste durchlaufen und mit den link-Funktionen die Werte der einzelnene Einträge erfragen.
docRef ItemRef - Dokument, in dem gesucht werden soll
0 : aktuelles Dokument
crossRefName String oder char* - Name des Links. Finde alle Links, die mit diesem String beginnen. Die Angabe darf leer sein.

Anker suchen : "ANCHORS#" : Suche nach Textankern anstelle nach Hyperlinks.

Namensanfang : Einschränkungen auf einen festgelegten Namensanfang machen Sie wie folgt : Setzen Sie classid auf 0 und geben Sie im Parameter sid den Namensanfang ein.

Name und/oder Zielname enthält : [seit v4.3 R35900]
[name: 'regex'] [destname : 'regex']
Name und/oder Zielname enthalten den jeweils festgelegten regulären Ausdruck. Ist destname definiert, werden die Angaben in classid, id, ... ignoriert.

Suche alle Textanker auf Produkte

destname: '^3 [0-9]+ [0-9]+'

Suche alle Textanker auf Produkte deren ID mit 1 endet.

destname: 'destname: '^3 ([0-9]+1|1) [0-9]+'

Definitionen von Verweiszielen : Suche nach den Defintionen von Verweiszielen. Diese Informationen sind bei der Anlage von Hyperlinks wichtig. Der typische Fall ist wie folgt:

  1. Im TaggedText meiner Eingabe steht eine <Hyperlink:=...> zu einer URL.
  2. Ich bekomme zwar den Hyperlink hin. Aber leider besteht die URL dieses Links nur aus dem Sinnlos-Kürzel http://.
Das ist natürlich unerfreulich. Das Problem liegt daran, dass der Hyperlink erst funktionieren wird, wenn es im gleichen Dokument eine entsprechende sogenannte HyperlinkDestinationDefintion gibt, auf die der Hyperlink mit Hilfe von <HyperlinkDestKey:...> verweisen muß.

Diese fehlenden Defintionen können mit Hilfe von <HyperlinkDestDefn:...>'s an den Eingabetext angefügt werden - was das Problem erst einmal löst. Erst einmal? Ja, leider. Das nächste Problem folgt nämlich sofort - man siehts nur nicht gleich: Man hat sich ja Mühe gegeben und hyperlink::get_next_unique_key auch wirklich eindeutige Keys verwendet. Aber InDesign nimmt das etwas zu ernst und legt jetzt jedesmal eine neue Definition an (url, url 1, url 2, ...). Um das zu vermeiden, muß man also vor dem Anfügen der <HyperlinkDestDefn:...>'s zuerst einmal prüfen, ob es nicht vielleicht bereits ein Ziel mit der gewünschten URL gibt (und dann diesen Key verwenden). Deshalb also die beiden folgenden Präfixe:

  • [Ab v5.0 R37000] "defn: 'regex | *'" : Sammle alle Hyperlink-Zieldefintionen, deren Name auf den angegebnen regulären Ausdruck passen. Mit * werden alle Zieldefintionen gefunden.
  • [Ab v5.0 R37000] "defn_info: 'regex | *'" Sammle alle Hyperlink-Zieldefintionen, deren Info (bei URL-Verweisen ist das die URL selbst) auf den angegebnen regulären Ausdruck passen. Mit * werden alle Zieldefintionen gefunden.

Ein Beispiel finden Sie hier.

classid int 0 Klassennummer des Objektes

≤0 : Verwende lediglich die StringID des Objektes
id, id2, id3 int, int, int 0, 0, 0 Comet-Objekt-ID. Mit classid > 0 und id = 0 wird die Objekt-ID ignoriert.
sid String oder char* 0 Comet-StringID. Aus den IDs und der StringID wird der Zielname des Links ermittelt und nach allen Links gesucht, deren Ziele mit dieser Angabe beginnen.

classid 0 : Namensanfang der Textanker
findInBook int 0 Sollen alle Dokumente, die zum gleichen Buch gehören, ebenfalls durchsucht werden?

0 : Nein

1 : Ja. Automatisch geöffnete Dokumente werden zur nächsten Idle-Time ohne Sichern geschlossen

2 : Ja. Automatisch geöffnete Dokumente werden zur nächsten Idle-Time gesichert und geschlossen (seit v4.3 R34280)

inclSection, intStyle, numType, abbrev int 1, 1, 0, 1 Angaben zur Formatierung der Seitenangaben, siehe page::get_str
calcTextPos int 0 Das Berechnen der XY-Position im Text ist recht aufwendig. Es muss dehalb extra eingeschaltet werden.

0 : Berechnung unnötig
1 : Textkoordinaten (in Punken relativ zum Textrahmen) berechnen. Y gibt dabei die Zeilenposition an.
sortType int -1 Sortierreihenfolge der Ergebnisliste (ab v4.3 R35900). Der Parameter wird nur ausgewertet wenn findInBook > 0 und calcTextPos > 0

-1 : Nur nach Seite im Buch
0 : Seitenweise und spaltenweise (kleinere x-Koordinate gewinnt) pro Seite
1 : Seitenweise und zeilenweise (kleinere y-Koordinate gewinnt) pro Seite
#include "internal/types.h"

Finde alle Hyperlinks eines Dokumentes.

int main ()
{
    LinkList	lks		= linklist::alloc ();
    int			res		= hyperlink::find (lks, 0, "", 0, -1, 0, 0, "", 1, 1, 1, 0, 0);
    Link		lk;
wlog ("", "Crossrefs in document\n"); for (lk = linklist::first (lks); lk; lk = linklist::next (lks)) { wlog ("", "%s --> '%s'\n",   link::crossref::name (lk), link::crossref::destination (lk)); wlog ("", "\tSeite %d (%d in '%s')\n",   link::crossref::page (lk, 0), link::crossref::page (lk, 1), link::crossref::document (lk, 1)); wlog ("", "\tSeitenname %s (%s)\n",   link::crossref::pagename (lk, 0), link::crossref::pagename (lk, 1)); } linklist::release (lks); return 0; }

Hier ein Skript, das alle Hyperlinks eines Dokumentes sammelt und für jeden Hyperlink, der auf einen Textanker zeigt, ein Button unter dem Textrahmen erzeugt. Die (lange) Funktion wcross wird für das Ergebnis nicht benötigt. Sie dient nur der Demonstration und kann weggelassen werden.

#include "internal/text.h"
#include "internal/types.h"
int wcross (Link lk) { int hasSource = item::defined (link::crossref::hyperlink_ref (lk)); int hasDest = item::defined (link::crossref::anchor_ref (lk)); int type = link::crossref::type (lk);
// headline if (hasSource && hasDest) { wlog ("", "Hyperlink '%s' --> '%s'\n",   link::crossref::name (lk),   link::crossref::destination (lk)); } else if (hasDest) { wlog ("", "Destination '%s'\n",   link::crossref::destination (lk)); } else { wlog ("", "Wrong cross reference %d --> %d\n",   item::getint (link::crossref::hyperlink_ref (lk)),   item::getint (link::crossref::anchor_ref (lk))); }
// hyperlink data if (hasSource) { wlog ("", "\t=== Source ===\n"); wlog ("", "\tFrame %d, page %d\n",   item::getint (link::crossref::src_frame (lk)),   page::get (link::crossref::src_frame (lk))); wlog ("", "\tText %d-%d\n",   link::crossref::src_textpos (lk),   link::crossref::src_textpos (lk)+link::crossref::src_textlen (lk)); }
// anchor data if (hasDest) { if (type == 0) { wlog ("", "\t=== Text anchor ===\n"); wlog ("", "\tPage %d (%d in '%s')\n",   link::crossref::page (lk, 0),   link::crossref::page (lk, 1),   link::crossref::document (lk, 1)); wlog ("", "\tPage name %s (%s)\n",   link::crossref::pagename (lk, 0),   link::crossref::pagename (lk, 1)); wlog ("", "\tFrame %d\n",   item::getint (link::crossref::frame (lk))); wlog ("", "\tText position %d\n",   link::crossref::pos (lk)); wlog ("", "\tCoordinates [%f x %f]\n",   link::crossref::x (lk),   link::crossref::y (lk)); wlog ("", "\tBbox [%f, %f] - [%f, %f]\n",   link::crossref::left (lk),   link::crossref::top (lk),   link::crossref::right (lk),   link::crossref::bottom (lk)); } else if (type == 1) { wlog ("", "\t=== Page ===\n"); wlog ("", "\tPage %d (%d in '%s')\n",   link::crossref::page (lk, 0),   link::crossref::page (lk, 1),   link::crossref::document (lk, 1)); wlog ("", "\tPage name %s (%s)\n",   link::crossref::pagename (lk, 0),   link::crossref::pagename (lk, 1)); } else { wlog ("", "\t=== URL ===\n"); wlog ("", "\t'%s'\n", link::crossref::info (lk)); }
wlog ("", "\n"); }
return 0; }
int main () { LinkList lks = linklist::alloc (); int res = 0; Link lk; ItemRef fr; ItemRef btn = item::alloc (); ItemRef action = item::alloc (); float l, t, r, b; ItemList buttons = itemlist::alloc (); ItemList states = itemlist::alloc (); float offset; int i; char path [2000];
res = hyperlink::find (   lks, // result list   0, // front document   "", // Hyperlink names   0, // classID (ignore Comet IDs)   0, 0, 0, // ID, ID2, ID3 (ignored if classID == 0)   "", // StringID or anchor name   0, // find in book   1, 1, 0, 1, // page name formatting   1); // Calculate text pos of anchor if (res) { wlog ("", "# Error %d (%s) while retreiving cross references\n",   res,   serror (res)); return 0; }
document::path (path); wlog ("", "Crossrefs in document '%s'\n", path);
for (lk = linklist::first (lks); lk; lk = linklist::next (lks)) { wcross (lk);
if (0 && link::crossref::type (lk) == 0 && item::defined (link::crossref::hyperlink_ref (lk))) { // One text model can contain N hyperlinks offset = 10.0; for (i = 0; i < itemlist::length (buttons); i++) { itemlist::get (buttons, fr, i); if (item::getint (fr) == item::getint (link::crossref::src_frame (lk))) { offset += 52.0; } }
// Create a simple text frame fr = link::crossref::src_frame (lk); frame::bbox (fr, &l, &t, &r, &b); frame::create2 (btn, kRectangle, l, b+offset, l+150.0, b+offset+42.0, page::get (fr)); frame::append (btn, ">> "); frame::append (btn, link::crossref::destination (lk)); itemlist::append (buttons, fr);
// Make *btn* a button itemlist::clear (states); itemlist::append (states, btn); itemlist::create_multistate (btn, states, 1);
// and finally a the action behavior::add_action (btn, 2, 1, action); behavior::change_action_data (btn, action, "", item::getint (link::crossref::anchor_ref (lk)), 2); } }
linklist::release (lks); return 0; }

Schreibe alle HyperlinkDestinationDefs des aktuellen Dokumentes in Logfile.

int main ()
{
    LinkList	lks		= linklist::alloc ();
    Link		lk;
wlog ("", "HyperlinkDestDefns by name:\n"); hyperlink::find (lks, 0, "defn:'*'"); for (lk = linklist::first (lks); lk; lk = linklist::next (lks)) { wlog ("", "'%s' [%d], type %d--> '%s'\n",   link::crossref::name (lk),   link::crossref::key (lk),   link::crossref::type (lk),   link::crossref::destination (lk)); }
wlog ("", "\nHyperlinkDestDefns by info:\n"); linklist::clear (lks); hyperlink::find (lks, 0, "defn_info:'*'"); for (lk = linklist::first (lks); lk; lk = linklist::next (lks)) { wlog ("", "'%s' [%d], type %d--> '%s'\n",   link::crossref::name (lk),   link::crossref::key (lk),   link::crossref::type (lk),   link::crossref::destination (lk)); }
return 0; }

Version 2.1 R668, 9. April 2008
"defn:'...' und "defn_info:'...' seit v5.0 R37000

priint:comet InDesign® Plug-Ins

find1
linklist
link
page::get_str
comet.hyperlink.find

static char* hyperlink::find1(
  int* res,
  char* property,
  int nth,
  ItemRef docRef,
  char* crossRefName,
  long classid,
  long id,
  long id2 = 0,
  long id3 = 0,
  char* sid = 0,
  int findInBook = 1,
  int inclSection = 1,
  int intStyle = 1,
  int numType = 0,
  int abbrev = 1)

Finde eine Information eines Links im Dokument. Im Normalfall benötigen Sie die Funktion find nicht, find1 wird Ihnen völlig ausreichen. Aber auch hier werden Textverweise im Overset nicht gefunden. Hier finden Sie eine Information eines Links - die Ergebnisse sind immer Strings. Abweichend von der Definition von find geben Sie hier an, welche Information und welchen Link Sie erhalten wollen.

Name Typ Default Beschreibung
Return char*   Als Ergebnis wird immer ein String geliefert. Im Fehlerfall ist er leer ("").

Der Rückgabewert darf nicht verändert werden und wird bei folgenden Aufrufen der Funktion überschrieben. Hier finden Sie Informationen zu readonly-Rückgaben von Funktionen.

res int*|float*|String oder char* - Der Parameter enthält nach erfolgreicher Ausführung das Ergebnis der Suche. Er darf 0 sein. ist er ungleich 0, müssen Sie darauf achten, abhängig vom Parameter what eine Variable vom richtigen Typ zu verwenden, also etwa für "Document" char*, für "Page" int* und für "TextX" float*. Und, äh, Sie wissen das, oder? Die Adresse einer int-Variable i ist &i, die einer float-Variable f &f. Und die Adresse eines char*-Strings s ist s selbst, nicht &s!!
property String oder char* - Welche Information wollen Sie erhalten? Geben Sie den Eigenschaftsnamen jeweils als String an (z.B. "Page"). Beachten Sie bitte, dass Sie als Ergebnis des Aufrufes immer einen String erhalten.

Eigenschaft Type Beschreibung
Document char* Name des Dokumentes, in dem der Link gefunden wurde.
DocumentFolder Ordner des Dokumentes, in dem der Link gefunden wurde.
DocumentPath Vollständiger Pfad des Dokumentes, in dem der Link gefunden wurde.
Page int buchrelative Seitennummer (1-basiert)
DocumentPage dokumentrelative Seitennummer (1-basiert)
PageName char* buchabhängiger Seitenname
DocumentPageName Seitenname abhängig von Ihren Funktionsangaben (inclSection, intStyle, numType, numType)
Name Name des Links wie er im Dokument verwendet wird
Destination Zielname des Links wie er im Dokument verwendet wird.
FrameLeft float Koordinaten des Texrahmens in Punkten
FrameTop
FrameRight
FrameBottom
TextPosX Koordinaten des Textes im Rahmen (in Punkten). Y ist die Zeilenposition.
TextPosY
TextPos int Textposition des Ankers (0-basiert)
nth int - Welchen Link wollen Sie verwenden, wenn mehrere gefunden wurden?

0 : Erster
-1 : Letzter
sonst : Diesen Link (0-basiert). Wurden weniger Links gefunden, gibt die Funktionen einen Leerstring (Fehler) zurück.
docRef ItemRef - Dokument, in dem gesucht werden soll
0 : aktuelles Dokument
crossRefName String oder char* - Name des Links. Finde alle Links, die mit diesem String beginnen. Die Angabe darf leer sein.
classid int 0 Klassennummer des Objektes

≤0 : Verwende lediglich die StringID des Objektes
id, id2, id3 int, int, int 0, 0, 0 Comet-Objekt-ID. Mit classid > 0 und id = 0 wird die Objekt-ID ignoriert.
sid String oder char* 0 Comet-StringID. Aus den IDs und der StringID wird der Zielname des Links ermittelt und nach allen Links gesucht, deren Ziele mit dieser Angabe beginnen.
findInBook int 0 Sollen alle Dokumente, die zum gleichen Buch gehören, ebenfalls durchsucht werden?

0 : Nein

1 : Ja. Automatisch geöffnete Dokumente werden zur nächsten Idle-Time ohne Sichern geschlossen

2 : Ja. Automatisch geöffnete Dokumente werden zur nächsten Idle-Time gesichert und geschlossen (seit v4.3 R34280)

inclSection, intStyle, numType, abbrev int 1, 1, 0, 1 Angaben zur Formatierung der Seitenangaben, siehe page::get_str

Das Beispiel zeigt die Verwendung verschiedener Schlüsselworte. Für ein reales Projekt ist es ungeeignet, für jede Information muss das gesamte Buch erneut durchsucht werden. Wollen Sie mehrere Infomationen gleichzeitig ermitteln, verwenden Sie besser die allgemeinere Funktione find.

int main ()
{
    int 		i;
    float		f;
    char		s[256];
wlog ("", "\n"); wlog ("", "Document %s\n", hyperlink::find1 (s, "Document",   0, 0, "", 3, 9, 4, 2008, "Matthias Seidel", 1, 1, 1, 1, 1)); wlog ("", "Docfolder %s\n", hyperlink::find1 (s, "Docfolder",   0, 0, "", 3, 9, 4, 2008, "Matthias Seidel", 1, 1, 1, 1, 1)); wlog ("", "Docpath %s\n", hyperlink::find1 (s, "Docpath",   0, 0, "", 3, 9, 4, 2008, "Matthias Seidel", 1, 1, 1, 1, 1)); wlog ("", "Page %s\n", hyperlink::find1 (&i, "Page",   0, 0, "", 3, 9, 4, 2008, "Matthias Seidel", 1, 1, 1, 1, 1)); wlog ("", "X %s\n", hyperlink::find1 (&f, "TextPosX",   0, 0, "", 3, 9, 4, 2008, "Matthias Seidel", 1, 1, 1, 1, 1)); wlog ("", "Y %s\n", hyperlink::find1 (&f, "TextPosY",   0, 0, "", 3, 9, 4, 2008, "Matthias Seidel", 1, 1, 1, 1, 1)); return 0; }

Version 2.1 R668, 9. April 2008

priint:comet InDesign® Plug-Ins

find1
linklist
link
page::get_str

static int hyperlink::delete_all(
  ItemRef docRef = 0,
  int direct = 0,
  int saveSteps = 0)

Entferne alle Hyperlinks aus einem Dokument. Der Befehl ist dafür gedacht, alte Dokumente, in denen die hyperlink::create~-Funktionen bestehende Hyperlinks zuvor nicht gelöscht haben (vor Comet 2.1 R 704, 8. Mai 2008), auf einen definierten Stand zu bringen. Diese Dokumente haben mitunter eine sehr lange Liste unbenutzter Hyperlinks. Es ist möglich, dass Hyperlinks auch mit InDesign®-Bordmitteln nicht mehr gelöscht werden können ohne einen Absturz von InDesign® zu provozieren. In diesem Fall rufen Sie die Anweisung mit dem Wert 1 für direct auf. Die Hyperlinks werden dann ohne weitere Tests aus der Dokumentstruktur gelöscht. Sonst werden Sie nach dem gleichen Verfahren gelöscht, das Sie auch beim Löschen über die Hyperlink-Palette anwenden . Wenn Sie die Hyperlinks direkt löschen, wird das Dokument zum Schluss gesichert und neu geladen. es geht also nicht bei neuen (in diesem Fall vielleicht eher konvertierten (und damit neuen)) Dokumenten.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode.
docRef ItemRef 0 Dokument, dessen Hyperlinks gelöscht werden sollen. Es werden alle Hyperlinks aus dem Dokument entfernt.

0 : Aktuelles Dokument
direct int 0 Siehe oben
saveSteps int 0 (nur bei direct = 0) : Nach jedem Löschen wird das Dokument neu gesichert.

Version 2.1 R 704, 8. Mai 2008

priint:comet InDesign® Plug-Ins

static int hyperlink::delete_(ItemRef hl)

Löschen eines Hyperlinks. Die Funktion erkennt selbständig, ob es sich bei der Referenz um einen Anker oder einen Verweis handelt. Anker können nicht gelöscht werden, wenn sie noch an anderer Stelle verwendet werden.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode.
hl ItemRef Gültiger Anker oder Verweis  
int main ()
{
    LinkList	lks		= linklist::alloc ();
    int			res		= hyperlink::find (lks, 0, "", 0, 9, 4, 2008, "Matthias Seidel", 1, 1, 1, 0, 0);
    Link		lk;
for (lk = linklist::first (lks); lk; lk = linklist::next (lks)) { hyperlink::delete_ (link::crossref::hyperlink_ref (lk)); } linklist::release (lks); return 0; }

v3.3 R3238, 25.10.2012

priint:comet InDesign® Plug-Ins

hyperlink::find

static int hyperlink::get_next_unique_key(ItemRef docRef = 0)

Ermittle den nächsten verfügbaren Hyperlink-Schlüssel eines Dokumentes. Die Funktion ist hilfreich bei der Erstellung von TaggedText mit Hyperlinks. Mehr Informationen finden Sie hier.

Name Typ Default Beschreibung
Return int   Nächster eindeutiger Hyperlink-Schlüssel

-1 : Fehler
docRef ItemRef 0 Dokument, in dem gesucht werden soll
0 : aktuelles Dokument

v4.1 R22201, 12. Apr 2018

priint:comet InDesign® Plug-Ins, comet_pdf

hyperlink::find
textmodel::insert
comet.Hyperlink.getNextUniqueKey

static char* hyperlink::get_alttext(ItemRef hyRef)

Ermittle den Alternativtext eines Hyperlinks. In InDesign® kann der Alternativtext unter der Rubrik Barrierefreiheit des Dialoges Hyperlink bearbeiten edittiert werden.

Name Typ Default Beschreibung
Return char*   Name des Verweises oder ""

Der Rückgabewert darf nicht verändert werden und wird bei folgenden Aufrufen der Funktion überschrieben. Hier finden Sie Informationen zu readonly-Rückgaben von Funktionen.

hy ItemRef - Gültige Verweisreferenz
int main()
{
    ItemRef		hy = item::alloc ();
showmessage ("%d", hyperlink::count (gFrame));
hyperlink::get_nth(gFrame, 0, hy); hyperlink::set_alttext (hy, "My Alttext (äöüß)"); showmessage ("-%s-", hyperlink::get_alttext (hy));
return 0; }

v4.3 R36020, 28. Jan 2025

priint:comet InDesign® Plug-Ins

hyperlink::set_alttext

static int hyperlink::set_alttext(ItemRef hyRef, char* altText = 0)

Setze den Alternativtext eines Hyperlinks. In InDesign® kann der Alternativtext unter der Rubrik Barrierefreiheit des Dialoges Hyperlink bearbeiten edittiert werden.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode.
hy ItemRef - Gültige Verweisreferenz
altText String oder char* 0 Neuer Alternativtext

0 oder "" : Alternativtext entfernen
int main()
{
    ItemRef		hy = item::alloc ();
showmessage ("%d", hyperlink::count (gFrame));
hyperlink::get_nth(gFrame, 0, hy); hyperlink::set_alttext (hy, "My Alttext (äöüß)"); showmessage ("-%s-", hyperlink::get_alttext (hy));
return 0; }

v4.3 R36020, 28. Jan 2025

priint:comet InDesign® Plug-Ins

hyperlink::get_alttext

Das Beispiel zeigt der Verwendung einiger hyperlink-Funktionen. Achten Sie insbesondere auf die Verknüpfung eines Hyperlinkziels mit einem Lesenzeichen. Hier wird nicht der Hyperlink selbst übergeben, sondern natürlich das Ziel des Hyperlinks (hyperlink::destination).

int main ()
{
    ItemRef	hy		= item::alloc ();
    ItemRef	dest	= item::alloc ();
    ItemRef	colid	= item::alloc ();
    ItemRef	bk		= item::alloc ();
hyperlink::create_pagedest (hy, 0, gFrame, 20, 30, "", 5); wlog ("", "name : %s\n", hyperlink::name (hy)); wlog ("", "visible : %d\n", hyperlink::visible (hy)); wlog ("", "border : %d\n", hyperlink::borderwidth (hy)); wlog ("", "hstate : %d\n", hyperlink::hilight (hy));
color::define_rgb ("", 255, 128, 0, 0, colid);
hyperlink::appearance (hy, 5, 1, colid); wlog ("", "border : %d\n", hyperlink::borderwidth (hy)); wlog ("", "hstate : %d\n", hyperlink::hilight (hy));
// Bookmark für den Hyperlink bookmark::create2 (   bk,   0,   hyperlink::destination (dest, hy),   hyperlink::name (hy),   "");
return 0; }

Seit
Plugin Version 1.3.4
Letzte Änderung
30.07.2025, 07:35 Uhr
Autor
Paul Seidel
Siehe auch
bookmark

Alphabetic index HTML hierarchy of classes or Java