Ich suche ein script für indesign mit dem man Seiten, auf denen sich ein bestimmter Text "XXX" befindet komplett aus dem Indesign Dokument gelöscht werden.
Das Lösen Deiner Aufgabe sollte keinen grossen Aufwand erfordern.
Doch wünschenswert ist, nähere Angaben zu bekommen: Die Version von InDesign, Mac OS X oder Windows? Und – vor allem – ein Musterdokument: Sind es Doppelseiten? Wenn ja: behalten die nicht entfernten Seiten ihren Platz oder rutschen sie nach? Ist der Text alleine in einem Textrahmen? Und so weiter.
Also: Bitte ein Dokument zur Verfügung stellen.
Gruss, Hans
(Dieser Beitrag wurde von Hans Haesler am 27. Okt 2018, 08:52 geändert)
Hallo Hans, es sind Einzelseiten in Indesign CC am Mac. Generell gibt es 2 Varianten der Rückseite eine Postkarte. Bei Personen bei denen ein Betrag XX,XX auf der Seite in der Textbox steht, soll die komplette Seite entfernt werden.
Ich habe mal das Dokument hochgeladen https://we.tl/t-IjVKqkGytx
beim privaten Austausch mit Armin wurden meine Vermutungen bestätigt: – Wenn die erste Seite nicht "XX,XX" enthält, sondern einen Euro-Betrag: Die zweite Seite entfernen. – Das Dokument besteht aus mehr als zwei Seiten. Wieviel? Deren 600 !!!...
Als hiess es, das Script ergänzen. Eine gebrauchsfertige Datei ist unten angehängt.
Zuerst werden – wie gehabt – die Seiten entfernt, in welchen "XX,XX" enthalten ist. Dann wird ein Grep-Suchstring definiert (und angewendet), mit welchem Beträge ab 0,01 gefunden werden. Nach oben unbegrenzt. Wieder werden die Seitenzahlen ermittelt. Aber jede wird um eins erhöht, weil die nächste Seite entfernt werden muss.
Hans hat ein prima Script geschrieben. Ich habe es gerade nochmal getestet. Das Ausgangsdokument hat 1719 Seiten !!!! Lief bei mir in Indesign ca. 1 Stunde. Habe mich nicht von dem drehenden "Glücksrad" in Indesign verunsichern lassen, sondern habe einfach abgewartet.
hast Du aber eine Ausdauer und eine Zuversicht! Ich hätte die Übung schon nach fünf Minuten abgebrochen und dem Hans geschrieben, dass sein Script nichts taugt ...
Um die Ausführung etwas zu beschleunigen, könnte das Script zu Beginn das Dokument schliessen und gleich wieder öffnen, aber unsichtbar. Wenn zusätzlich das Auffrischen der Bildschirmanzeige abgestellt und der Preflight deaktiviert wird, sollte die Ausführung spürbar schneller sein.
Ich werde zunächst ein Testdokument mit 99 Seiten erzeugen und dann das Script erweitern. Bis später.
Zwischenbericht: Zusätzlich zu den schon genannten Massnahmen wird in der Version 03d darauf verzichtet, bei jedem Vorkommen zu prüfen, ob sich die aktuelle Seitenzahl schon im Array befindet.
Aktuelle Version 02d: Mit den 99 Seiten dauert die Ausführung knapp sechs Sekunden: 5.895
Erweiterte Version 03d: Die Meldung kommt nur eine knappe Sekunde früher: 5.003 Die erhoffte Halbierung ist es also bei weitem nicht ...
Doch sehr wahrscheinlich wird sich mit einer höheren Anzahl Seiten eine grössere Differenz ergeben. Zunächst werde ich ein Dokument mit 891 Seiten fabrizieren. Aber den Test kann ich erst nachmittags starten.
Ich habe solch eine Funktion in der Hoffnung auf eine große Geschwindigkeitssteigerung in meinen Projektmanager eingebaut, aber das Ergebnis hat mich eher enttäuscht.
Gerade das Seitenbedienfeld würde ich hier als Problemkandiaten sehen, da es sich bei der Löscherei und evtl. bereits bei der Auswahl der betreffenden Kandidaten zu Tode aktualisiert.
Das übelste ist aber in der Regel das aktivierte Preflight, das bei jedem Eingriff meint, unverzüglich alles erneut prüfen zu müssen.
Hm. Also befinden sich auf den zu löschenden Seiten keine Textrahmen, die mit anderen Rahmen auf anderen Seiten verkettet sind? ***** Mit herzlichem Gruß, Uwe Laubender
(Dieser Beitrag wurde von Uwe Laubender am 29. Okt 2018, 18:34 geändert)
soeben entdeckt: Dein Pseudo ist mit einem P ausgezeichnet worden. Herzlichen Dank für die Spende ans Forum! Vorbildlich.
Ich habe Dir per PM die Version 04d zugestellt.
Noch eine Spur schneller, als die Version 03d, weil der Ansatz von Manan Joshi verwendet wird. Aber im Gegensatz zu seinem Vorschlag, läuft die Schleife rückwärts. Sonst dauert die Ausführung zu lange.
Ich habe Dokumente verschiedenen Umfangs erstellt: 21, 99, 198, 297, 396, 594 und 891 Seiten. Und insgesamt nahezu 100 Testläufe durchgeführt: A. ohne Massnahmen; B. unsichtbar geöffnet; C. Preflight aus; D. Auffrischung aus; E. Preflight+Auffrischung aus. Für C, D und E wird das Dokument ebenfalls unsichtbar geöffnet.
Die besten Ergebnisse gab es mit E.
***** @ Werner: Je nach Anzahl Seiten, wirken sich die Massnahmen (unsichtbar geöffnet, Preflight aus, Auffrischung aus) nicht gross aus. Aber je mehr Seiten ein Dokument enthält, desto besser wird eine Geschwindigkeitssteigerung spürbar. Zum Beispiel: Mit 891 Seiten wird die Ausführungszeit mehr als halbiert (statt 570 nur 258 Sekunden).
Ach ja: Der Fortschrittsbalken ist noch nicht drin.
***** @ Thomas: Der Preflight ist nicht die vermutete grosse Bremse. Aber sein Ausschalten hilft schon. Unterschiedlich sind die Ergebnisse für das Seiten-Bedienfeld. Erstaunlicherweise ist der Wert öfter besser, wenn es sichtbar ist.
***** @ Uwe: Im Beitrag #3 findest Du einen WeTransfer-Link zu einem zweiseitigen Dokument. Beides sind Rückseiten (die Vorderseite fehlt). Wenn die erste Rückseite den Euro-Betrag "XX,XX" enthält, dann muss diese Seite entfernt werden. Sind aber Ziffern da (z.B. "72,48"), dann muss die zweite Rückseite gelöscht werden.
Vielleicht stellt Dir Armin sein 21-Seiten-Dokument zur Verfügung.
Danke für den Link zur Diskussion im Adobe-Forum. Ich habe die Idee von Manan Joshi adoptiert. Aber wie schon oben erwähnt: Die Schleife muss rückwärts laufen. Sonst dauert es viel zu lange.
jetzt habe ich ein Dokument erstellt, welches 1719 Seiten umfasst.
Und die Version 04d des Scripts gestartet. Nach 1696 Sekunden kam die Meldung "Fertig." Das sind 28 Minuten und 15 Sekunden. Also weniger als die Hälfte der Zeit, welche die Version 02d benötigte.
Ich werde noch versuchen, einen Fortschrittsbalken einzubauen. Wird nicht einfach sein, weil die Seiten in zwei Sitzungen abgeräumt werden.
Zudem dauert es – bei einem umfangreichen Dokument – nach dem Entfernen der letzten Seite eine schöne Weile, bis InDesign seine "Buchhaltung" nachgeführt hat und wieder ansprechbar ist.
Hallo Hans, das Aussortieren der Seiten wegen doppelter Seitennamen würde ich mit einem assoziativen Array machen. Davon abgesehen würde ich das nicht mit den Seitennamen, sondern mit der ID einer Seite versuchen.
Das Löschen geht dann über eine for x in-Schleife mit pages.itemByID(n).remove(). Da braucht nicht darauf geachtet werden, ob rückwärts oder vorwärts.
Könnte mir vorstellen, dass dies die Angelegenheit noch etwas beschleunigt, da die die direkten DOM-Zugriffe möglicherweise minimiert werden.
Hier ein Beispiel, das nur mit "XXX" als gefundener String funktioniert:
danke für Deinen Vorschlag. Ich werde ihn übernehmen, um zu prüfen, ob damit eine Beschleunigung herausschaut.
Das Aussortieren von eventuell doppelten Seitennamen hatte ich nur im Anfang drin. Aber als dann klar war, dass keine doppelten Vorkommen möglich sind, habe ich die Prüfung herausgenommen. In der Version 04d werden auch keine Seitennamen mehr benutzt, sondern die Methode von Hanan.
das Erstellen eines Arrays (statt jedes Mal direkt die Seite zu löschen) bringt tatsächlich etwas. Mit dem 1719-Seiten-Dokument macht der Unterschied 204 Sekunden aus: Nur noch knapp 25 Minuten.
Anstelle der IDs verwende ich den documentOffset. Damit ist es einfacher, an die nächste Seite zu kommen, welche bei vorhandenen Euro-Beträgen entfernt werden muss.
Zudem habe ich den Code noch etwas vereinfacht. parentPage == null kann es in diesem Dokument nicht geben. Kein Rahmen ist ausserhalb einer Seite. Und es muss auch nicht jedes Mal geprüft werden, ob das Dokument noch mehr als eine Seite umfasst.
Und noch die zweite Aktion zum Entfernen der zweiten Rückseite:
Okay, ich weiss, wir sind hier nicht in der Skriptwerkstatt ... :-)
Dank der Anregung von Uwe dauert die Ausführung "nur" noch knapp 25 Minuten.
Fortschrittsanzeige: Hatte ich in einer Beta-Version eingefügt. Aber weil das Auffrischen nicht abgestellt werden darf – sonst sieht man den Dialog nicht – dauert die Ausführung viel länger. Deshalb kommt die Version 05d noch ohne aus.
bitte sehr. Ich habe Dir soeben per PM die Version 06d zugestellt.
Jetzt mit einer Fortschritts-Anzeige, welche die Ausführung nicht verlängert.
Das Script erzeugt einen Ordner auf dem Schreibtisch und benennt ihn mit dem Ausgangswert der Seiten, welche abgeräumt werden müssen. Per Countdown ändert diese Zahl jedes Mal, wenn eine Seite weg ist.
Also: – Script starten; – Umschalten auf den Schreibtisch.
Seit Jahren benutze ich dazu die Option "Aktive Ecke" der "Mission Control": Den Mauszeiger in die Ecke oben rechts bewegen – alle Fenster werden ausgeblendet und der Schreibtisch ist sichtbar.
Jetzt kann man sehen, dass die ersten hundert Seiten relativ schnell fort sind. Aber dann verlangsamt sich die Ausführung. Siehe den angehängten Screen-shot ("Kurve.png").
Wenn die Datenmenge für die Geschwindigkeit solch eine große Bedeutung hat, könnte man dann nicht die Datei temporär teilen und nach Ausführung der Arbeit wieder zusmmenfügen?
Ich habe allerdings keine Ahnung, wie groß der Aufwand dafür wäre.
dann habe ich inzwischen vielleicht noch eine bessere Idee. :-)
Vorweg: Ich habe mir Dein Skript nicht angesehen, weiß also nicht, ob man so die Seiten löschen kann:
1. die entsprechenden Seiten suchen, als Ergebnis müsste es doch ein Array geben, oder? 2. das Array mit einem Zusatzfeld Indexnummer versehen. 3. das Array nach Trefferseite (enthält XXX) sortieren, Trefferseiten nach hinten, 4. Trefferelemente löschen. 5. Array nach Indexfeld sortieren -> absteigend 6. Neue Datei erzeugen und mit Hilfe des Arrays die Parentpages der Arrayelemente nacheinander in das neue Dokument duplizieren.
So, das war mehr eine logische Spielerei, aber zeitlich müsste diese Lösung, wenn sie denn überhaupt funktioniert, das schnellste Ergebnis liefern, weil es nur geringe Datenbewegungen gibt.
okay ... als Erstes habe ich das 1719-Seiten-Dokument, das bestehende Script "DokumentAufsplitten" gestartet, die Option "Anzahl Teildokumente" gewählt und im nächsten Dialog eine 3 eingetippt.
Schon bald wurde klar, dass das viel zu lange dauern wird. Es müssen ja drei Dokumente erzeugt werden und bei jedem müssen 1146 Seiten entfernt werden. Nach gut zwanzig Minuten war das erste Dokument im Finder sichtbar. Nach einer halben Stunde Abbruch der Übung.
***** Neuer Versuch: Das Dokument zwei Mal duplizieren und die drei Dokumente umbenennen. Das erste öffnen, im Seiten-Bedienfeld die 1146 Seiten auswählen, die alt-Taste niederhalten und auf das Papierkorb-Symbol klicken. Die Seiten werden entfernt. Aber das braucht auch eine geraume Zeit. Für die drei Dokument insgesamt siebzehn Minuten.
Dann InDesign beenden und neu starten, damit das endgültige Entfernen der Seiten schneller erfolgt (15 Sekunden pro Dokument). Nach fast zwei Minuten das Dokument speichern und schliessen. Aber dieser Vorgang dauert wieder eine Minute. Noch zwei Mal dasselbe.
***** Fazit: 1 + 17 + 1 + 3 + 3 + 3 = 28 Minuten. Vier Minuten mehr als mit dem bisherigen Script. Und umständlicher.
***** Die zweite Anregung, die Seiten in ein neues Dokument zu kopieren habe ich noch nicht umzusetzen versucht.
Das Dokument setzt sich ja aus drei Sorten von Seiten zusammen: Vorderseite, erste Rückseite, zweite Rückseite; Vorderseite, erste Rückseite, zweite Rückseite; usw. Insgesamt 573 mal drei.
Die Vorderseiten enthalten Bild und Text; von den Rückseiten muss immer eine entfernt werden, je nach Zustand des Euro-Betrages. Wenn "XX,XX" muss die erste Rückseite entfernt werden. Wenn Zahlen gefunden werden, muss die zweite Rückseite weg.
Also recht umständlich. Wenn nun die 1146 Seiten einzeln ins neue Dokument geschaufelt werden müssen, wird die Ausführung vermutlich nicht schneller sein.
Ok, da war wohl noch der Ventura bei mir im Kopf -> Dokument als Vorlage öffnen, ergab eine neue Publikation ohne Seiten. Das könnte man eventuell durch neue Datei mit Übernahme aller Einstellungen ersetzen. Ginge das? und wie lange dauert das? Wo ich ein Problem sehe, ist die erste Seite, die InDesign zwingend verlangt, gibt es eine Funktion, die eine Seite durch eine andere ersetzt? Wenn nicht, müsste man die erste Seite nach Duplizierung der ersten Seite löschen.
Ok, aber wäre es nicht besser, nur ein Dokument zu duplizieren, es zu öffnen, speichern unter neuem Namen, die Seiten zu löschen, speichern unter neuem Namen und anschließen das neue Dokument zweimal zu kopieren (File.copy!)?. Das InDesign-Dokument muss dafür nicht geschlossen werden!
Ok, warum ich das vorgeschlagen habe? Löschen bedeutet intensive Speicherbewegungen, wie groß ist eigentlich die Datei nach dem Löschen der Seiten? Im schlimmsten Fall größer als vorher, deshalb auf jeden Fall "Speichern unter..." Beim Duplizieren der Seiten in ein neues Dokument sollten die Speicheranforderungen linear sein und es sollte keinerlei Speicherverschiebungen geben. Deshalb mein Vorschlag, die benötigten Seiten von vorne nach hinten zu kopieren.
Also, ich habe das so verstanden, dass alle Seiten mit XX,XX entfernt werden müssen, oder anders ausgedrückt, es müssen nur die Seiten ohne XX.XX dupliziert werden. Habe ich da etwas falsch verstanden? Wenn nicht, müssen also nur 2/3 der Seiten kopiert werden.
Sorry, ich habe noch etwas vergessen:
Falls sich die Aufgabe regelmäßig wiederholt und sich die Einstellungen nicht ändern, muss man die leere Datei nur einmal als Vorlage erzeugen.
weisst Du was? Die einfachste Lösung wäre: Der Armin produziert Ausgangsdokumente, welche nicht mehr als 600 Seiten umfassen. Dann ist die Aufgabe in zwei Minuten (pro Dokument) erledigt.
***** Das Dokument setzt sich aus vielen (= 573) Folgen von drei Seiten zusammen. Die ersten Seiten sind die Vorderseiten, welche erhalten bleiben.
Auf allen zweiten Seiten enthält derselbe Textrahmen entweder "XX,XX" oder einen Euro-Betrag (z.B."72,48").
Das aktuelle Script macht eine Textsuche mit "XX,XX". Von den gefundenen Objekten wird über den Textrahmen die 'parentPage' festgestellt und deren 'documentOffset'. Und ja, alle Seiten mit "XX,XX" müssen gelöscht werden.
Um die Euro-Beträge zu finden, macht das Script eine GREP-Suche mit "[0-9]+,[0-9]{2}". Wieder wird die 'parentPage' festgestellt. Aber diese darf nicht entfernt werden, sondern die darauffolgende Seite.
Bis zu einer gewissen Anzahl Seiten wird das ziemlich rasch erledigt. Aber mit den 1719 Seiten dauert es doch ziemlich länger.
***** Deshalb, Armin: Zu Beginn lieber drei Dokumente mit weniger Umfang herstellen, als ein riesiges.
Ich frage mich so und so, wie dieses Dokument entsteht, und ob es nicht leichter wäre, gleich das fertige Produkt zu produzieren. Aber Du hast mich angefixt! :-) Könntest Du mir Deine Testdatei und die Ergebnisdatei zur Verfügung stellen?
vielleicht braucht Armin auch nicht die InDesign-Datei, sondern den PDF-Output, dann müsste gar nichts gelöscht werden, sondern nur der Exportbefehl generiert werden.
also ... ich glaube nicht, dass Dir das 1719-Seiten-Trumm (= 303.3 MB) für Dein Vorhaben nützlich wäre.
Wenn schon direkt richtig produzieren, dann eher anstelle der Datenzusammenführung ein Script verwenden. Am besten nimmst Du per PM Verbindung mit Armin auf.
***** Eine Outline, ohne zu wissen was zur Verfügung steht: – Ein Dokument ist vorbereitet, welches als einzige Seite die Vorderseite der Antwortkarte enthält (Musterseite "A"). – Die Rückseiten sind als Musterseiten "B" und "C" vorhanden. – Ein Script liest eine CSV-Datei ein. – Je nach Umfang werden Seiten eingefügt, welche provisorisch auf der Musterseite "A" basieren. – Eine Schleife durch die CSV. – Wenn der Betrag "XX,XX" ist, wird der aktuellen Seite die Musterseite "C" zugewiesen (= zweite Rückseite). – Der Rahmen "Adresse" wird gelöst und die Adresse der Kundin eingefügt. – Wenn der Betrag in Ziffern ist, wird die Musterseite "B" zugewiesen. – Die Rahmen werden gelöst und der Betrag, der Name der Kundin und die Adresse werden eingefügt. – usw. usf.
Doch, ich denke schon, weil dann das Ergebnis mit Deinen Zeiten in etwa vergleichbar wäre, aber Du hast recht, eine IDML-Datei mit 303,MB wäre schon heftig! Oder ist es eine InDesign-Datei? Die kann man doch kräftig schrumpfen.
Na ja, mich interessiert im Moment mehr, ob mein Ansatz stimmt.
ja, das ist eine InDesign-Datei. Gezippt bleiben von den 303.3 MB noch 43.4 MB. Als ".idml" exportiert sind es 61.5 MB; gezippt 59.8 MB.
Aber ohne Einverständnis von Armin kann ich die nicht einfach so weitergeben. Also: Armin kontaktieren. Der kann Dir dann eventuell das Original zustellen.
Hallo zusammen, falls das Ziel, Seiten zu löschen, sein sollte, eine PDF-Datei aus der reduzierten InDesign-Datei zu schreiben, könnte man einen noch sehr viel schnelleren Weg beschreiten.
Die "guten" Seiten merken, einen großen String mit Seitenzahlen schreiben, kommagetrennt, und den dann für die PDF-Ausgabe benutzen. Das ist dann eine Sache von Sekunden, diesen Gesamtstring dem Export zu überantworten.
Hier ein Beispiel:
EDIT: Merke gerade, dass dann doScript() nichts nützt, um die Eintragung in den pageRange rückgängig zu machen. Den Code sollte man dann also ohne doScript ausführen. Habe das noch geändert. Zusätzlich noch einen Variablennamen geändert. ***** Mit herzlichem Gruß, Uwe Laubender
(Dieser Beitrag wurde von Uwe Laubender am 5. Nov 2018, 23:47 geändert)
ursprünglich hat mir Armin ein 21-Seiten-Dokument zugestellt. Aus diesem habe ich zunächst ein 99-Seiten-Dokument gemacht. Und die ersten Tests.
Danach habe ich das Dokument manuell dupliziert und per Script zusammenfügen lassen. Zu 198 Seiten und 297 und 396 und 594 und 891 ...
Je nach Anzahl Seiten gab es andere Erkenntnisse (Bedienfeld Seiten geöffnet oder geschlossen, Preflight usw.)
Schliesslich kopierte ich das grosse Dokument und setzte es per Script zu einem 1782-Seiten-Dokument zusammen und entfernte 63 Seiten. Somit hatte ich dieselbe Anzahl Seiten (= 1719) wie Armin.
Aber das Ergebnis ist nicht ganz korrekt: – Seiten mit einem Euro-Betrag sind im 'exportStringArray'. So far, so good. – Doch die darauffolgende Seite ist eine "schlechte" Seite und sollte nicht aufgelistet sein.
Hallo Hans, die zweite Bedingung lässt sich ja leicht korrigieren.
Was die Geschwindigkeit beim Löschen der Seiten angeht: Könnte eine Zwischenspeicherung mit "Save As" in der Schleife, die die Seiten löscht, vielleicht helfen? Alle 50 oder 100 Löschvorgänge vielleicht? ***** Mit herzlichem Gruß, Uwe Laubender
hier wäre es sicherlich hilfreich, die Preisfelder, unabhängig davon, ob ein Preis oder XX,XX drinsteht mit einem einheitlichen Zeichenformat zu versehen, das würde m. E. nach die Aufgabe stark vereinfachen.
var docOffsetString = parentPage.documentOffset.toString(); docOffsetNumbers[ docOffsetString ] = docOffsetString; // The contents is not important. };
// We want to dismiss the next page: var docOffsetString = ( parentPage.documentOffset+1 ).toString(); docOffsetNumbers[ docOffsetString ] = docOffsetString; // The contents is not important. };
// Building the exportStringArray: for( var n=0; n<docPagesLength; n++ ) { if( n.toString() in docOffsetNumbers ){ continue }; exportStringArray[exportStringArray.length++] = "+"+( n+1 ); };
ja, jetzt ist das Ergebnis richtig. Für die 21 Seiten werden die korrekten "guten" Seiten aufgelistet.
Mit dem 1719-Seiten-Dokument dauerte die erste Ausführung 23 Sekunden. Bei nächsten Mal nur noch sechs. Und bei weiteren Starts nur noch viereinhalb ...
um noch einmal auf das Thema "Seiten entfernen" zurückzukommen, ich habe jetzt mit den oben genannten unterschiedlichen Methoden eine Reihe von Versuchen gemacht.
Das Ergebnis ist eindeutig:
Im Rahmen des zur Verfügung stehenden Speichers ist das direkte Löschen von Seiten die schnellste Methode.
Ab einer großen Zahl von Seiten gewinnt das Duplizieren von Seiten in eine neue Datei.
Die Anzahl der Seiten hängt sicherlich von der Komplexität der Dateien ab.
Einige Beispielwerte mit einfacher Datenstruktur und virtuellem Window- 10-Pro-Rechner:
danke für Deine Versuche und das Posten der Ergebnisse.
Aber hier geht es ja um ein spezielles Dokument. Deshalb sollten die Testläufe schon mit der Original-Datei von Armin vorgenommen werden. Um herauszufinden, ob die 23 Minuten des Seitenentfernens ebenfalls halbiert werden kann.
Und wir wissen immer noch nicht, was Armin abliefern muss (InDesign- oder PDF-Datei).
(...) stelle ich Dir gerne mein Skript als Vorlage zur Verfügung.
Ja, gerne. Allerdings bin ich momentan auf einer anderen Baustelle. Und ich habe auch noch nicht getestet, ob das von Uwe vorgeschlagene Speichern-unter etwas bringt.
Generell muss ich meine Druckdaten als pdf-Datei abliefern. Aber mir ist es lieber, wenn die Seitenentfernung in Indesign stattfinden kann, damit ich das Dokument vorher nochmals prüfen kann.
Hallo Armin, das Skript könnte die nicht zu exportierenden Seiten im Seiten-Bedienfeld mit einer Farbe versehen. Der zeitliche Aufwand wäre minimal. Die Gesamtzeit würde unter einer Minute liegen.
Unten ein Beispiel mit UIColors.BRICK_RED als Farbe für die Seiten, die nicht exportiert werden. Die Liste der verfügbare Farben in der Klasse der UIColors gibt's hier:
var docOffsetString = parentPage.documentOffset.toString(); docOffsetNumbers[ docOffsetString ] = docOffsetString; // The contents is not important. };
var nextPage = doc.pages[ parentPage.documentOffset+1 ]; nextPage.pageColor = noExportPageColor;
// We want to dismiss the next page: var docOffsetString = ( nextPage.documentOffset ).toString(); docOffsetNumbers[ docOffsetString ] = docOffsetString; // The contents is not important. };
// Building the exportStringArray: for( var n=0; n<docPagesLength; n++ ) { if( n.toString() in docOffsetNumbers ){ continue }; exportStringArray[exportStringArray.length++] = "+"+( n+1 ); };
Dein Vorschlag funktioniert. Das Zuweisen der Farbe an 573 Seiten (von insgesamt 1719) und das Erstellen des Strings für den PDF-Export dauert 01'47".
Aber: Das Überprüfen des Dokuments wird zu mühsam sein.
Deshalb könnte meine brilliante (gar nicht bescheiden :-) Idee umgesetzt werden: Das Einfärben der Seiten durch das Entfernen aller Objekte ersetzen ...
parentPage.pageItems.everyItem().remove();
... und ...
nextPage.pageItems.everyItem().remove();
Dann sind die "schlechten" Seiten alle weiss. Das dauert 4'11"
Zum Beschleunigen kann der Preflight abgestellt, das Dokument geschlossen und unsichtbar geöffnet werden. Nach der Behandlung wird es wieder sichtbar gemacht. Dauer: 1'04"
***** Deine Idee mit dem Zwischenspeichern (im Beitrag #47) habe ich ausprobiert. Bringt leider nichts.
***** Voranzeige: Der Vorschlag von Werner (Kopieren in ein anderes Dokument) ergibt tatsächlich eine markante Beschleunigung. Näheres folgt heute Nachmittag.
Lieber Hans, das Entfernen der Objekte ist wirklich eine geniale Idee. Das meine ich jetzt ohne jegliche Ironie!
Denn: Bei der PDF-Ausgabe kannst Du entscheiden, dass leere Seiten nicht mit ausgegeben werden. Das würde das Löschen der Seiten überflüssig machen. ***** Mit herzlichem Gruß, Uwe Laubender
Bei der PDF-Ausgabe kannst Du entscheiden, dass leere Seiten nicht mit ausgegeben werden.
Das war mein Vorhaben. Ausgelöst durch Deine farbige Kennzeichnung. Aber den Geistesblitz hatte ich fern vom Computer. Und konnte es erst abends testen.
Doch ich fand heraus, dass es nur beim Drucken gehen würde: Also zuerst eine PostScript-Datei und dann destillieren. Das wäre etwas umständlich.
Ab welcher InDesign-Version ist denn diese Option "leere Seiten auslassen" vorhanden?
Hallo Hans, sorry. Du hast ja Recht. Die Option gibt's wirklich nur im Druckmenü. Für einen Workflow wie: PostScript drucken, PDF/X-1a distillen würde das zumindest ausreichen. ***** Mit herzlichem Gruß, Uwe Laubender
***** Dank Werner Perplies dauert jetzt die Ausführung nur noch knapp sieben Minuten. Werner hatte die tollkühne Idee, die Seiten nicht zu entfernen, sondern in ein neues Dokument zu kopieren.
Von zehn Testläufen liess ich die zwei schlechtesten und das beste der Ergebnisse weg, addierte die restlichen sieben und teilte den Wert durch sieben. Umgerechnet ergab das 6'44". Nicht schlecht, wenn man bedenkt, dass 1146 Seiten kopiert wurden.
***** Von Uwe Laubender stammt die geniale Methode, die "guten" Seiten zu ermitteln. Hätte ich nie so geschafft!
***** Weil die Ausführung jetzt akzeptabel schnell ist, wird auf das Abstellen der Auffrischung verzichtet. Und der Anwender kann mit drei Dialogen (siehe Anhänge) benachrichtigt werden, was gerade geschieht.
Dank Werner Perplies dauert jetzt die Ausführung nur noch knapp sieben Minuten. Werner hatte die tollkühne Idee, die Seiten nicht zu entfernen, sondern in ein neues Dokument zu kopieren.
Nichts Tollkühnes, sondern jahrelange Erfahrung. :-) Immer wenn intensiv im Speicher geschoben werden muss, bei großer Datenmenge, ist das der Turbogang.
jetzt habe ich endlich Zeit gefunden, um die im Beitrag #39 skizzierte Outline umzusetzen.
Und noch etwas effizienter: Der erhoffte Geschwindigkeits-Schub übertrifft die kühnsten Erwartungen. Das Aktualisieren der 573 Seiten dauert zehn ... Sekunden! (plus ein paar Tausendstel :-).
***** – Ein Dokument ist geöffnet, welches die notwendige Anzahl an Seiten (= 1146) aufweist; – den ungeraden Seiten ist die Musterseite "A" (= die Vorderseite der Antwortkarte) zugewiesen; – den geraden Seiten die Musterseite "B" (= die Rückseite, mit dem Treuebonus-Betrag); – die Musterseite "C" ist vorbereitet. Sie enthält u.a. den benannten Textrahmen für die Adresse; – nach dem Start des Scripts wird die gewählte CSV-Datei eingelesen; – aus den Spalten "Vorname, Name", "Straße", "Ort" und "Betrag" wird je ein Array erzeugt; – dann macht das Script eine Schleife durch den Array "Betrag".
Angenommen, der aktuelle Wert lautet "XX,XX". Dann wird ... – der aktuellen Seite die Musterseite "C" zugewiesen, der Rahmen "Adresse" wird übergangen; – die Werte für die Textkette "Frau\rVorname Name\rStraße\rOrt" werden aus den Arrays gepflückt ... – ... und im Textrahmen "Adresse" eingesetzt.
Ist der aktuelle Wert ein Euro-Betrag, dann ... – werden die Textrahmen "Treuebonus" und "Adresse" übergangen; – im ersten wird per 'changeText()' der Name eingesetzt und mit 'changeGrep()' der Euro-Betrag; – im Textrahmen "Adresse" wird die zusammengesetzte Adresse eingesetzt.
Zum Beschleunigen der Ausführung wird ... – das Dokument geschlossen und versteckt geöffnet; – der Preflight abgestellt.
Zusätzlich informiert ein Dialog laufend über die verbleibende Anzahl der zu ändernden Seiten.