Bearbeitung von InDesign® Büchern

Allgemeine Beispiele zur Verwendung der Klasse book finden sie hier.

Letzte Änderung :
30.07.2025, 07:35 Uhr

Bearbeitung von InDesign® Büchern

static int book::create(char* fullpath)

Erzeuge ein neues leeres Buch. das Buch wird nicht automatisch geöffnet.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
fullpath String oder char* - Vollständiger Pfad auf die Buchdatei mit Extender. Als Extender für InDesign®-Bücher wird üblicherweise indb verwendet. Der Pfad auf die Datei wird bei Bedarf automatisch generiert. Existiert die Datei, gibt die Funktion den Fehler -48 zurück.

Plugin Version 1.4.2 R 505, 14. Nov. 2007

priint:comet InDesign® Plug-Ins

open
save
close
comet.book.create

static int book::open(char* fullpath, ItemRef bookRef = 0)

Öffne ein Buch.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
fullpath String oder char* - Vollständiger Pfad auf die Buchdatei mit Extender.
bookRef ItemRef 0 Im Erfolgsfall Referenz auf das geöffnete Buch. Die Referenz muss zuvor mit item::alloc erzeugt worden sein.

Plugin Version 1.4.2 R 505, 14. Nov. 2007

priint:comet InDesign® Plug-Ins

create
save
close
comet.book.open

static int book::count()

Ermittle die Anzahl der aktuell geöffneten Bücher.

Name Typ Default Beschreibung
Return int   Anzahl der aktuell geöffneten Bücher

0 : keine Bücher geöffnet oder Fehler

Schreibe zuerst die Datepfade alle geöffneten Bücher ins Logfile. Dann schreibe den Pfad des ausgewählten Buches ins Log. Und hole schließlich das Buch mit dem Namen 'Buch 3' und wähle es aus.

int main ()
{
    int 		B	= book::count ();
    int 		b;
    ItemRef		bref= item::alloc ();
for (b = 0; b < B; b++) { book::get_nth (b, bref); wlog ("", "# %d. book : '%s'\n", b, book::get_path (bref)); }
book::get_current (bref); wlog ("", "Current book : '%s'\n", book::get_path (bref));
book::get_by_path ("$DESKTOP/Buch 3.indb", bref); wlog ("", "Third book : '%s'\n", book::get_path (bref));
book::set_current (bref); wlog ("", "Current book (2): '%s'\n", book::get_path (bref));
return 0; }

v4.1.6 R25445, 19. Jul 2019

priint:comet InDesign® Plug-Ins

get_nth
get_path
get_by_path
comet.book.getOpen

static int book::get_nth(int nth, ItemRef out_bookRef)

Hole das n-te geöffnete Buch. Das Ergebnis ist eine Referenz auf ein geöffnetes Buch. Der Pfad des Buches kann mit get_path ermittelt werden.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
nth int - 0-basierter Index des Buches
out_bookRef ItemRef 0 Nach erfolgreicher Ausführung enthält die Variable eine Referenz auf das nte Buch. Der Pfad des Buches kann mit get_path ermittelt werden.

Ein Beispiel finden Sie unter count.

siehe count

v4.1.6 R25445, 19. Jul 2019

priint:comet InDesign® Plug-Ins

count
get_path
get_by_path
comet.book.getOpen

static char* book::get_path(ItemRef bookRef)

Ermittle den vollständigen Pfad eines Buches.

Name Typ Default Beschreibung
Return char*   Vollständiger Pfad des Buches inkl. Name oder "" im Fehlerfall.

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.

bookRef ItemRef - Gültige Referenz auf ein geöffnetes Buch.

Ein Beispiel finden Sie unter count.

siehe count

v4.1.6 R25445, 19. Jul 2019

priint:comet InDesign® Plug-Ins

count
get_nth
get_by_path
open
create
comet.CBook.getPath

static int book::get_by_path(char* path, ItemRef out_bookRef)

Ermittle aus dem Datei-Pfad eines InDesign®-Buches die aktuelle Referenz im Programm. Um eine gültige Referenz zu erhalten muss die Buch-Datei existieren und das Buch in InDesign® geöffnet sein!

Name Typ Default Beschreibung
Return int   0 oder Fehlercode

Um eine gültige Referenz zu erhalten muss die Buch-Datei existieren und das Buch in InDesign® geöffnet sein!
path String oder char* - Vollständiger Pfad einer InDesign®-Buchdatei
bookRef ItemRef - Nach erfolgreicher Ausführung enthält die Variable eine Referenz auf das geöffnete Buch.

Ein Beispiel finden Sie unter count.

siehe count

v4.1.6 R25445, 19. Jul 2019

priint:comet InDesign® Plug-Ins

count
get_nth
open
create
comet.book.getByPath

static int book::get_current(ItemRef out_bookRef)

Hole das aktuell aktive Buch.

Achtung : Das aktive Buch ist das Buch, an dem Sie zuletzt gearbeitet haben. Das aktive Buch kann sich durch Skriptaufrufe für andere Bücher ändern!

Hier ein Beitrag dazu aus InDesign Secrets:

A note on "activeBook"

One more note, in case you’re going to be scripting book panels: Before you add your own custom options to the Book panel, you have to make sure it works as intended in a standalone script. Now there is something weird going on when using 'activeBook'. Other than, say, 'activeDocument', 'activeBook' does not always get right what book document is the active one! The reason for this is that you can have several book panels open at a time, scattered about your workspace. Which one is then "active"? So when experimenting with this, you’d better make sure you only have one single book open. I was kind of weary of this issue when testing my open/close script, but it seems that if you call a script from within the book panel itself, 'the' active book is indeed the one you called the menu from, so the problem resolved itself.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
out_bookRef ItemRef 0 Nach erfolgreicher Ausführung enthält die Variable eine Referenz auf das 'aktive' Buch. Der Pfad des Buches kann mit get_path ermittelt werden.

Ein Beispiel finden Sie unter count.

siehe count

v4.1.6 R25445, 19. Jul 2019

priint:comet InDesign® Plug-Ins

count
get_path
get_by_path
comet.book.getCurrent

static int book::set_current(ItemRef bookRef)

Setze das aktuell aktive Buch.

Achtung : Das aktive Buch ist das Buch, an dem Sie zuletzt gearbeitet haben. Das aktive Buch kann sich durch Skriptaufrufe für andere Bücher ändern!

Hier ein Beitrag dazu aus InDesign Secrets:

A note on "activeBook"

One more note, in case you’re going to be scripting book panels: Before you add your own custom options to the Book panel, you have to make sure it works as intended in a standalone script. Now there is something weird going on when using 'activeBook'. Other than, say, 'activeDocument', 'activeBook' does not always get right what book document is the active one! The reason for this is that you can have several book panels open at a time, scattered about your workspace. Which one is then "active"? So when experimenting with this, you’d better make sure you only have one single book open. I was kind of weary of this issue when testing my open/close script, but it seems that if you call a script from within the book panel itself, 'the' active book is indeed the one you called the menu from, so the problem resolved itself.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
bookRef ItemRef 0 Neues 'aktives' Buch

Ein Beispiel finden Sie unter count.

siehe count

v4.1.6 R25445, 19. Jul 2019

priint:comet InDesign® Plug-Ins

count
get_path
get_by_path
comet.CBook.setCurrent

static int book::is_valid(ItemRef bookRef)

Enthält die Referenz einen gültigen Verweis auf ein geöffnetes Buch

Name Typ Default Beschreibung
Return int   1 : Okay
0 : Referenz ist leer oder kein geöffnetes Buch
bookRef ItemRef - Referenz

Plugin Version 1.4.2 R 505, 14. Nov. 2007

priint:comet InDesign® Plug-Ins

open
comet.CBook.isValid

static int book::save(ItemRef bookRef)

Sichere ein Buch.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
bookRef ItemRef - Referenz auf ein geöffnetes Buch

Plugin Version 1.4.2 R 505, 14. Nov. 2007

priint:comet InDesign® Plug-Ins

create
save
close
comet.CBook.save

static int book::close(ItemRef bookRef, int doSave = 1)

Schließe ein Buch.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
bookRef ItemRef - Referenz auf ein geöffnetes Buch
doSave int 1 Soll das Buch vorher gesichert werden?

0 : Nicht sichern
sonst : Sichern

Plugin Version 1.4.2 R 505, 14. Nov. 2007

priint:comet InDesign® Plug-Ins

create
open
save
comet.CBook.close

static int book::insert(
  ItemRef bookRef,
  char* docPath,
  int location = -1,
  int updateCrossrefs = 0,
  int showProgress = 0,
  int repaginate = 1)

Füge ein Dokument in ein Buch ein. Das Buch muss geöffnet sein. Ist das Dokument bereits im Buch enthalten, wird der Aufruf ignoriert. Optional kann seit Version 2.1 R668 auch eine Neuberechnung aller Querverweis-Platzhalter im Buch gemacht werden.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
bookRef ItemRef - Referenz auf ein geöffnetes Buch
docPath String oder char* - Vollständiger Pfad auf ein existierendes InDesign®-Dokument
location int -1 0-basierte Einfügeposition
-1 : Anfügen
updateCrossrefs int 0 Querverweis-Platzhalter aktualisieren. Der Parameter wird nur ausgewertet wenn repaginate gleich 1 ist.

0 : Nein

1 : Ja. Durch die Aktualisierung von Querverweisen kann sich die Länge des Dokumentes ändern und eben aktualisierte Querverweise werden falsch. In der Hoffnung, dass eine direkt wiederholte Aktualisierung der Querverweise deren Länge nicht erneut ändert, werden deshalb immer jeweils zwei Durchläufe der Aktualisierungen gemacht.

2 : Lazy. Bleibt die Gesamtzahl der Seiten des Buches nach dem ersten Durchlauf unverändert, wird kein zweiter Durchlauf gemacht (seit v4.3 R35900).
showProgress int 0 Soll beim Aktualisieren der Querverweis-Platzhalter ein Progressbalken gezeigt werden?

0 : Nein
1 : Ja
repaginate int 1 Repaginieren (ab 4.1 R22155)

0 : Nein
1 : Ja

Plugin Version 1.4.2 R 505, 14. Nov. 2007
Parameter updateCrossrefs und showProgress seit Vesion 2.1 R 668, 10. April 2008

priint:comet InDesign® Plug-Ins

open
comet.CBook.insertDocument

static int book::moveto(
  ItemRef bookRef,
  char* docPath,
  int pos,
  int updateCrossrefs = 0,
  int showProgress = 0)

Verschiebe ein Dokument im Buch. Optional kann seit Version 2.1 R668 auch eine Neuberechnung aller Querverweis-Platzhalter.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
bookRef ItemRef - Referenz auf ein geöffnetes Buch
docPath String oder char* - Vollständiger Pfad auf ein InDesign®-Dokument
pos int - Neue Position innerhalb des Buches (0-basiert)

-1 : Ans Buchende
updateCrossrefs int 0 Querverweis-Platzhalter aktualisieren. Der Parameter wird nur ausgewertet wenn repaginate gleich 1 ist.

0 : Nein

1 : Ja. Durch die Aktualisierung von Querverweisen kann sich die Länge des Dokumentes ändern und eben aktualisierte Querverweise werden falsch. In der Hoffnung, dass eine direkt wiederholte Aktualisierung der Querverweise deren Länge nicht erneut ändert, werden deshalb immer jeweils zwei Durchläufe der Aktualisierungen gemacht.

2 : Lazy. Bleibt die Gesamtzahl der Seiten des Buches nach dem ersten Durchlauf unverändert, wird kein zweiter Durchlauf gemacht (seit v4.3 R35900).
showProgress int 0 Soll beim Aktualisieren der Querverweis-Platzhalter ein Progressbalken gezeigt werden?

0 : Nein
1 : Ja

Plugin Version 1.4.2 R 505, 14. Nov. 2007
Parameter updateCrossrefs und showProgress seit Vesion 2.1 R 668, 10. April 2008

priint:comet InDesign® Plug-Ins

open
comet.CBook.setDocumentPosition

static int book::remove(
  ItemRef bookRef,
  char* docPath,
  int updateCrossrefs = 0,
  int showProgress = 0)

Entferne ein Dokument aus einem geöffneten Buch. Ist das Dokument nicht im Buch enthalten, wird der Aufruf ignoriert. Optional kann seit Version 2.1 R668 auch eine Neuberechnung aller Querverweis-Platzhalter im Buch gemacht werden.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
bookRef ItemRef - Referenz auf ein geöffnetes Buch
docPath String oder char* - Vollständiger Pfad auf ein InDesign®-Dokument
updateCrossrefs int 0 Querverweis-Platzhalter aktualisieren. Der Parameter wird nur ausgewertet wenn repaginate gleich 1 ist.

0 : Nein

1 : Ja. Durch die Aktualisierung von Querverweisen kann sich die Länge des Dokumentes ändern und eben aktualisierte Querverweise werden falsch. In der Hoffnung, dass eine direkt wiederholte Aktualisierung der Querverweise deren Länge nicht erneut ändert, werden deshalb immer jeweils zwei Durchläufe der Aktualisierungen gemacht.

2 : Lazy. Bleibt die Gesamtzahl der Seiten des Buches nach dem ersten Durchlauf unverändert, wird kein zweiter Durchlauf gemacht (seit v4.3 R35900).
showProgress int 0 Soll beim Aktualisieren der Querverweis-Platzhalter ein Progressbalken gezeigt werden?

0 : Nein
1 : Ja

Plugin Version 1.4.2 R 505, 14. Nov. 2007
Parameter updateCrossrefs und showProgress seit Vesion 2.1 R 668, 10. April 2008

priint:comet InDesign® Plug-Ins

open
comet.CBook.removeDocument

static int book::repaginate(
  ItemRef bookRef,
  int updateCrossrefs = 0,
  int showProgress = 0)

Neuberechnung der Seitennummerierung im Buch. Optional kann seit Version 2.1 R668 auch eine Neuberechnung aller Querverweis-Platzhalter im Buch gemacht werden.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
bookRef ItemRef - Referenz eines geöffneten Buches
updateCrossrefs int 0 Querverweis-Platzhalter aktualisieren. Der Parameter wird nur ausgewertet wenn repaginate gleich 1 ist.

0 : Nein

1 : Ja. Durch die Aktualisierung von Querverweisen kann sich die Länge des Dokumentes ändern und eben aktualisierte Querverweise werden falsch. In der Hoffnung, dass eine direkt wiederholte Aktualisierung der Querverweise deren Länge nicht erneut ändert, werden deshalb immer jeweils zwei Durchläufe der Aktualisierungen gemacht.

2 : Lazy. Bleibt die Gesamtzahl der Seiten des Buches nach dem ersten Durchlauf unverändert, wird kein zweiter Durchlauf gemacht (seit v4.3 R35900).
showProgress int 0 Soll beim Aktualisieren der Querverweis-Platzhalter ein Progressbalken gezeigt werden?

0 : Nein
1 : Ja

Plugin Version 1.4.2 R 505, 14. Nov. 2007
Parameter updateCrossrefs und showProgress seit Vesion 2.1 R 668, 10. April 2008

priint:comet InDesign® Plug-Ins

insert
moveto
remove
comet.CBook.repaginate

static int book::position(ItemRef bookRef, char* docPath)

Bestimme die Position eines Dokumentes im Buch.

Name Typ Default Beschreibung
Return int   -1 : Dokument nicht im Buch gefunden
sonst : 0-basierte Position des Dokumentes im Buch
bookRef ItemRef - Referenz auf ein geöffnetes Buch
docPath String oder char* - Vollständiger Pfad auf ein InDesign®-Dokument

Plugin Version 1.4.2 R 505, 14. Nov. 2007

priint:comet InDesign® Plug-Ins

open
comet.CBook.getDocumentPosition

static int book::set_master(ItemRef bookRef, char* docPath)

Setze die Formatquelle des Buches.

Name Typ Default Beschreibung
Return int   -1 : Dokument nicht im Buch gefunden
sonst : 0-basierte Position des Dokumentes im Buch
bookRef ItemRef - Referenz auf ein geöffnetes Buch
docPath String oder char* - Vollständiger Pfad auf ein InDesign®-Dokument im Buch

Plugin Version 1.4.2 R 505, 14. Nov. 2007

priint:comet InDesign® Plug-Ins

get_master
comet.CBook.setMasterDocument

static char* book::get_master(ItemRef bookRef)

Ermittle die Formatquelle des Buches.

Name Typ Default Beschreibung
Return char*   Vollständiger Pfad des Dokumentes, das als Fomratquelle des Buches verwendet wird.
"" : Im Fehlerfall

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.

bookRef ItemRef - Referenz auf ein geöffnetes Buch

Plugin Version 1.4.2 R 505, 14. Nov. 2007

priint:comet InDesign® Plug-Ins

set_master
comet.CBook.getMasterDocument

static int book::count_docs(ItemRef bookRef)

Wieviele Kapitel (Dokumente) enthält das Buch?

Name Typ Default Beschreibung
Return int   Anzahl der Dokumente im Buch
bookRef ItemRef - Referenz auf ein geöffnetes Buch

Plugin Version 1.4.2 R 505, 14. Nov. 2007

priint:comet InDesign® Plug-Ins

nth_doc
comet.CBook.getDocuments

static char* book::nth_doc(ItemRef bookRef, int n)

Hole das n-te Dokument eines Buches.

Name Typ Default Beschreibung
Return char*   Vollständiger Pfad des n-ten Dokumentes des Buches. Der Wert wird bei weiteren Aufrufen der Funktion überschrieben.

"" : Im Fehlerfall
bookRef ItemRef - Referenz auf ein geöffnetes Buch
n i - 0-basierter Index des Dokumentes im Buch

Plugin Version 1.4.2 R 505, 14. Nov. 2007

priint:comet InDesign® Plug-Ins

count_docs
comet.CBook.getDocuments

static int book::create_toc(
  ItemRef frameRef,
  char* selector,
  int sortType,
  int functionPtr,
  ...)

Erzeuge ein Inhaltsverzeichnis der Textanker aller Dokumente eines Buches. Der Aufruf sammelt alle gewünschten Textanker, die in den Dokumenten des Buches gefunden werden, in dem auch das Inhaltsverzeichnis enthalten ist. Das Buch muß dafür geöffnet sein und InDesign® muß in der Lage sein, alle Dokumente des Buches gleichzeitig öffnen zu können. Für jeden gefundenen Textanker wird dann eine im aufrufenden Skript definierte Funktion ausgeführt. In dieser Funktion berechnen Sie den Textinhalt des jeweiligen Eintrages für das Inhaltsverzeichnis. Zusätzlich bestimmen Sie, ob der neue Inhalteintrag eine aktiven Link auf das Ziel bekommen soll. Für die aktiven Links muß das vollständige Buch als interaktives PDF exportiert werden.

Die Funktion zum Auswerten der Textanker hat streng festgelegte Datentypen für die Parameter und Fehler bei den Datentypen der Parameter führen zum Absturz von InDesign®. Die Namen der Parameter sind natürlich frei wählbar. Die in der folgenden Liste angegebenen Namen sind also nur Vorschläge:

Typ Name (Vorschlag) Beschreibung
ItemRef fr Zielrahmen für das Inhaltsverzeichnis. Die Varibale enthält den Wert gFrame des enthaltenden Skriptes.
Link lk Aktueller Textanker. Die Eigenschaften (Position, Länge, Name, ...) können mit Hilfe der Funktionen link::crossref:: erfragt werden.
int situation Aufrufsituation, für spätere Erweiterungen reserviert und aktuell immer 0
String txt Rückgabevariable : Text für das Inhaltsverzeichnis. Der Inhalt dieser Variable wird an der aktuellen Textposition in den Zielrahmen (erster Parameter der Funktion) eingefügt. Die aktuelle Textposition wird von book::create_toc berechnet. Der Text darf TaggedText-formatiert sein.

Dieser Aufruf ermittelt den Dokumenttext eines benannten Textankers.

frame::gettext (
 	link::crossref::frame (lk),
 	str,
 	link::crossref::src_textpos (lk)+1,
 	link::crossref::src_textlen (lk)-1);
int* entryType Rückgabevariable : Typ des Zieles. In der Variable legen Sie fest, ob der Text im Inhaltsverzeichnis ein klickbarer Link werden soll und wohin dieser Link zeigt. Verweise werden immer über den gesamten eingefügten Text de Eintrages gelegt. Um Links zu aktivieren, muß das Buch in ein interaktives PDF exportiert werden.

-1 : [Default] Kein Verweisziel (nur den Text einfügen)
0 : Textanker des übergebenen Links als Ziel verwenden
1 : Seite des übergebenen Links als Ziel verwenden

Beachten Sie bitte, dass die Variable ein Zeiger auf ein int ist.

Mit dieser Angabe produziert book::create_toc einen Link auf zur Seite des Textankers:

*entryType = 1
... ...

Obwohl die Bearbeitungsfunktion im gleichen Skript definiert ist, wird sie unabhängig von diesem Skript ausgeführt und hat keinen Zugriff auf die globalen Variablen des umgebenenden Skriptes.

Damit Sie auf globale Variablen (und andere mglw. benötigte Werte) zugreifen können, darf der Aufruf von book::create_toc hinter dem Parameter functionPtr bis maximal 20 beliebige Zusatzparameter bekommen. Die Datentypen dieser Zusazuparameter müssen 1:1 auch in der Bearbeitungsfunktion festgelegt sein.

book::create_toc myFunc Beschreibung
..., myFunc, 123 ..., int a a enthält den Wert 123
..., myFunc, intVar ..., int a a enthält den Wert intVar des enthaltenden Skriptes
..., myFunc, &intVar ..., int * a *a enthält den Wert intVar des enthaltenden Skriptes. Mit *a = *a + 1 erhöhen Sie den Wert von intVar auch im enthaltenden Skript.
..., myFunc, 123.45 ..., float a a enthält den Wert 123.45
..., myFunc, "Hallo" ..., char * a a enthält den Wert "Hallo". Der Inhalt von a darf nicht geändert werden!
..., myFunc, charString ..., char * a a enthält den gleichen char*-String wie das enthaltende Skript. Der Inahlt von a darf keinesfalls länger werden als von charString im enthaltenden Skript allokiert!
..., myFunc, myString ..., String a a ist der gleiche String wie im enthaltenden Skript. Änderungen von a ändern das Original myString im im enthaltenden Skript.
usw.

Zielanker für das Inhaltsverzeichnis können Sie z.B mit Hilfe der Funktion textmodel::insert_crossref anlegen.

Für das Beispiel ist InDesign® 2025 erforderlich!

  1. Laden und entpacken Sie das ZIP des Beispiels. Sie können das ZIP an beliebiger Stelle entpacken.
  2. Verbinden Sie sich in InDesign® mit Hilfe den Menüs Plug-ins -> Datenordner -> XML-Datenordner wählen... (Zusatzmodule statt Plug-ins in Versionen vor InDesign® 2025) mit dem Ordner CreateTOC/xmldata-flowers
  3. Öffnen Sie das Buch CreateTOC/Book.indb entweder durch Doppelklick auf die Datei oder mit Hilfe des InDesign®-Menüs Datei -> Öffnen....
  4. Öffnen Sie die Datei CreateTOC/TOC.indd entweder durch Doppelklick auf die Datei oder den Eintrag im geöffneten Buch.
  5. Wählen Sie das Fly-Out Menü Nummerierung aktualisieren -> Aktualisiere alle Seitennummern und Querverweise des geöffneten Buches.

Um aus dem Buch ein klickbares PDF zu erzeugen, wählen Sie das Fly-Out Buch als PDF exportieren ... des geöffnenten Buches. Achten Sie dabei bitte auf folgende zwei Dinge:

  1. Sie müssen zuvor die Listenauswahl im Buch aufheben. Klicken Sie dazu einfach in den leeren Bereich der Palettenliste.
  2. Wählen Sie im Export-Dialog das Format PDF (Interaktiv).

Das Skript zum Erzeugen des Inhaltsverzeichnes finden Sie in der Laden-Aktion 40 des Platzhalters List of Contents. Öffnen Sie dazu die Palette Platzhalterwerte. Dann setzen Sie den Textcursor in den Platzhalter. Mit Klicken des Edit-Buttons der Laden-Aktion können Sie das Skript öffnen. Für das Öffnen des Skriptes aus InDesign® ist eine Developer-Lizenz der priint:comet Plug-Ins erforderlich. Alternativ können Sie das Skript auch in jedem beliebigen Plaintext-Texteditor öffnen. Sie finden das Skript in der Datei CreateTOC/xmldata-flowers/actions/40.crpt.

Analog finden Sie die Platzhalter zum Erzeugen der Textanker in den Aktionen 20 ind 21. Diese Platzhalter sind in den Dokumeente 100-400 das Buches enthalten.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
frameRef ItemRef - Zielrahmen für das Inhaltsverzeichnis. Das Dokument des Zielrahmens muß sich in einem aktuell geöffneten Buch befinden!
selector String oder char* - Angabe zur Auswahl der Textanker, siehe crossRefName der Funktion hyperlink::find

0 oder "" : Keine Einschränkungen
sortType int - Sortierung der gefundenen Textanker

-1 : Seitenweise
0 : Seitenweise und spaltenweise pro Seite
1 : Seitenweise und zeilenweise pro Seite
functionPtr int - Funktion zum Berechnen der Texte der einzelnen Einträge des Inhaltsverzeichnisses. Die Funktion wird für jeden gefundenen Textanker gerufen und muß die hier beschriebenen Parameter haben.
... Zusätzliche Parameter Leer Zusatzparameter, siehe hier

So legen Sie in einem Textplatzhalter einen unsichtbaren Textanker an, der den gesamten Textplatzhalter enthält:

textmodel::insert_crossref (
 		0, textmodel::length(),
 		txt,
 		3, gRecordID, gRecordID2, gRecordID3, gRecordStringID,
 		0); // Invisible anchor

Hier ein vollständiges Beispiel zum Erzeugen eines Inhaltsverzeichnisses. Den Quelltext und eine Anleitung finden Sie hier. Das Beispiel verwendet den Zusatzparamter lastDocument für die Inhaltsfunktion functionPtr. Diese Variable enthält den Namen des Dokumentes des zuletzt bearbeiteten Textanker. Ändert sich das Dokument, wird ein zusätzlicher Verweis auf die erste Seite des neuen Dokumentes eingefügt.

#pragma plain
int create_entry (ItemRef fr, Link lk, int situation, String txt, int * entryType, String lastDocument) { String str = string::alloc (); int isHead = 0;
// The new entry should of course be on a new line. // But the new line should not become part of the link. // if (textmodel::length () > 1) textmodel::append ("%!TT<ParaStyle:TOC-Entry><ParaStyle:TOC-Entry>", 0);
// If the document changes, an additional blank line is inserted // if (string::compare (lastDocument, link::crossref::document (lk))) { if (textmodel::length () > 1) textmodel::append ("%!TT<ParaStyle:TOC-Entry><ParaStyle:TOC-Entry>", 0); string::set (lastDocument, link::crossref::document (lk)); isHead = 1; }
// Get the placeholders text content // frame::gettext (   link::crossref::frame (lk),   str,   link::crossref::pos (lk)+1,   link::crossref::src_textlen (lk)-1);
// Build the TOC entry text // if (isHead) { entryType = 1; // Make it a page-link string::set (txt, "%%!TT<ParaStyle:TOC-Entry><CharStyle:Bold>%s\t%d<CharStyle:>", str, link::crossref::page (lk, 0)); } else { entryType = 0; // Make it a text-link string::set (txt, "%%!TT<ParaStyle:TOC-Entry>%s\t%d", str, link::crossref::page (lk, 0)); }
string::release (str); return 0; }
int main() { String lastDocument = string::alloc ();
// Ignore normal LOAD calls // if (!gRepagination) { placeholder::set_sync (-1); gSyncChanged = 1; return 0; }
string::set (lastDocument, ""); textmodel::replace ("");
book::create_toc (gFrame, "", 0, create_entry, lastDocument);
string::release (lastDocument); return 0; }

v4.3 R34950, 20. Jan 2025

priint:comet InDesign® Plug-Ins

hyperlink::create_textdest

static int book::all_documents_do(
  char* bookPath,
  int actionID,
  int saveOnClose = 0)

Bearbeitung aller Dokumente eines Buches. Die Dokumente werden in der im Buch fetsgelegten Reihefolge geöffnet, bearbeitet und wieder geschlossen. Vorher geöffnete Dokumente bleiben geöffnet.

Die Funktion löst das Problem, dass InDesign® Dokumente erst zur nächsten Ruhephase (Idle Time) wirklich schließt. Dieses Verhalten führt dazu, dass Bücher mit vielen Dokumenten bei der Bearbeiting in einem einzigen Skript schnell zum Speicherüberlauf und Absturz von InDesign® führen. all_documents_do löst das Problem dadurch, dass die Bearbeitung der einzelnen Dokumente jeweils in eigenen IdleTime-Sequenzen durchgeführt wird. Zwiswchen diesen Schritten erhält InDesign® genügend Zeit, um geschlossene Dokumente auch 'wirklich' zu schließen.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
bookPath String oder char* - Vollständiger Pfad des zu bearbeitenden Buches
actionID int - ID aus actions des Skriptes zur Bearbeitung der einzelnen Dokumente. Die Dokumente sind zur Ausführzeit geöffnet und jeweils im Vordergrund.

Globale Variablen (read only!)
char* gMyBook : Pfad (Parameter bookPath) des Buches
int gMyChapter : 0-basierter Index des Dokumentes im Buch

Rückgabewerte
0 : Okay
sonst : Fehler und Abbruch der Bearbeitung weiterer Dokumente
saveOnClose int 0 Sollen die einzelnen Dokumente nach der Bearbeitung gesichert werden?

0 : Nein, Dokumente ohne Sichern schließen
1 : Ja, Änderungen an den Dokumenten sichern

Mit folgender Zeile bearbeiten Sie alle Dokumente eines Buches. Die Dokumente selbst werden von action 170 bearbeitet.

book::all_documents_do ("/Users/paul/Desktop/ID_19.0/Buch 1.indb", 170, 1);

Die Action 170 erzeugt im ersten Dokument einen orangen Rahmen. Zu Demo-Zwecken wird nach dem dritten Dokument gefragt, ob die Bearbeitung fortgesetzt werden soll.

#include "internal/types.h"
int main () { ItemList frames; ItemRef fr = item::alloc (); char pp [5000]; int res = 0;
wlog ("", "BOOK %s, CHAPTER %d\n", gMyBook, gMyChapter);
if (gMyChapter == 0) { frame::create (fr, kRectangle, 0.0, 0.0, 300.0, 50.0, 1); frame::color_rgb (fr, 255, 128, 0); }
frames = itemlist::allframes (); wlog("", "### %d frame(s) found in doc '%s'\n",   itemlist::length (frames),   document::path (pp));
itemlist::release (frames); item::release (fr);
// For demonstration purposes only // if (gMyChapter == 2) { res = alert ("Proceed", "Cancel", 0, 1, 2,   "%d documents proceeded. Should I proceed with the next documents?",   gMyChapter+1); if (res == 1) res = 0; // Proceed }
return res; }

v4.3 R34900, 11. Jun 2024

priint:comet InDesign® Plug-Ins

static int book::export_(
  ItemRef bookRef,
  char* pdfPath = 0,
  char* styleName = 0)

Exportiere ein Buch als PDF-Dokument.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
bookRef ItemRef - Referenz auf ein geöffnetes Buch
pdfPath String oder char* 0 Pfad für die Exportdatei

0 : Verwende Pfad und Namen der Buchdatei mit der Dateieindung pdf.
sonst : Vollständiger Pfad und Name der Exportdatei. Der Pfad wird bei Bedarf automatisch angelegt.
styleName String oder char* 0 Name des Exportstiles :

0 : Aktuelles Default-Format
sonst : Name eines existierenden PDF-Exportformates

Stilnamen sind case-sensitiv.

Plugin Version 1.4.2 R 505, 14. Nov. 2007

priint:comet InDesign® Plug-Ins

open
comet.CBook.exportPDF

Das Beispiel demonstriert einige book-Anweisungen und schreibt die Ergebnisse ins Logfile. Legen Sie vorher auf Ihrem Desktop drei Dateien book.indd, book2.indd und book3.indd an.

int main ()
{
    ItemRef		bookRef	= item::alloc ();
    int       	rt;
    char		bookPath[256];
    char		doc1[256];
    char		doc2[256];
    char		doc3[256];
    char*		masterDoc;
strcpy (bookPath, "$DESKTOP/book.indb"); strcpy (doc1, "$DESKTOP/book.indd"); strcpy (doc2, "$DESKTOP/book2.indd"); strcpy (doc3, "$DESKTOP/book3.indd");
rt = book::create (bookPath); wlog ("", "Create book returned %d.\n", rt);
rt = book::open (bookPath, bookRef); wlog ("", "Open book returned %d.\n", rt);
rt = book::is_valid (bookRef); wlog ("", "bookRef valid? %d\n", rt); if (!rt) return 0;
rt = book::insert (bookRef, doc1, 0); wlog ("", "Insert doc1 in book returned %d.\n", rt);
rt = book::insert (bookRef, doc2, 1); wlog ("", "Insert doc2 in book returned %d.\n", rt);
rt = book::insert (bookRef, doc3, 1); wlog ("", "Insert doc3 in book returned %d.\n", rt);
rt = book::position (bookRef, doc1); wlog ("", "Position of '%s' in book : %d\n", doc1, rt);
rt = book::position (bookRef, doc3); wlog ("", "Position of '%s' in book : %d\n", doc3, rt);
wlog ("", "Style source is '%s'\n", book::get_master (bookRef)); rt = book::set_master (bookRef, doc2); wlog ("", "Set style source returned : %d\n", rt); wlog ("", "Style source is now '%s'\n", book::get_master (bookRef));
rt = book::save (bookRef); wlog ("", "Saving book returned : %d\n", rt); return 0; }

Öffne ein Buch und schreibe alle Dokumente des Buches ins Logfile.

int main ()
{
    ItemRef		bookRef	= item::alloc ();
    int       	rt, i;
    char		doc1[256];
    char		bookPath[256];
strcpy (bookPath, "$DESKTOP/book.indb"); rt = book::open (bookPath, bookRef); wlog ("", "Open book returned %d.\n", rt); if (rt) return 0;
wlog ("", "Book contains %d doc(s)\n", book::count_docs (bookRef)); for (i = 0; i < book::count_docs (bookRef); i++) { wlog ("", "Doc %d : '%s'\n", i+1, book::nth_doc (bookRef, i)); }
return 0; }

Entferne ein Dokument aus einem Buch.

int main ()
{
    ItemRef		bookRef	= item::alloc ();
    int       	rt;
    char		bookPath[256];
    char		doc3[256];
    char*		masterDoc;
strcpy (bookPath, "$DESKTOP/book.indb"); strcpy (doc3, "$DESKTOP/book3.indd"); rt = book::open (bookPath, bookRef); wlog ("", "Open book returned %d.\n", rt); if (rt) return 0;
rt = book::remove (bookRef, doc3); wlog ("", "Removing doc3 in book returned %d.\n", rt);
rt = book::save (bookRef);
return 0; }

Exportiere ein Buch als PDF-Datei. Für den Export wird der Exportstil 'Vorschau' verwendet.

int main ()
{
    ItemRef		bookRef	= item::alloc ();
    int       	rt;
    char		bookPath[256];
strcpy (bookPath, "$DESKTOP/book.indb"); rt = book::open (bookPath, bookRef); if (rt) return 0; rt = book::export_ (bookRef, "", "Vorschau"); wlog ("", "Export book returned %d.\n", rt);
book::save (bookRef); return 0; }

Seit
Plugin Version 1.4.2 R 505
Letzte Änderung
30.07.2025, 07:35 Uhr
Autor
Paul Seidel

Alphabetic index HTML hierarchy of classes or Java