Bearbeitung von InDesign® Büchern
Allgemeine Beispiele zur Verwendung der Klasse book finden sie hier.
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. |
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. |
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; }
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
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
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
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
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
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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.
|
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!
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:
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; }
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; }
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. |
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; }
Alphabetic index HTML hierarchy of classes or Java