[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste

Text wird bei Ersetzung um zwei Zeichen gekürzt

Martin Fischer
  
Beiträge gesamt: 12783

14. Aug 2011, 20:56
Bewertung:

gelesen: 4353

Beitrag als Lesezeichen
Zu diesem irritierenden Verhalten kann ich aus gegebenem Anlass auch noch ein Beispiel beitragen.

Mit folgendem Skript wird – für's Experiment(!) – ein neues Dokument mit drei versetzten Textrahmen mit jeweils demselben Inhalt angelegt.

Code
var _doc = app.documents.add(); 

// drei versetzte Textrahmen mit demselben Inhlat
var tf_1 = _doc.textFrames.add({geometricBounds : [10,10,100,40], contents:'Absatz 0\rAbsatz 1\rAbsatz 2\rAbsatz 3\rAbsatz 4\rAbsatz 5\rAbsatz 6\rAbsatz 7\rAbsatz 8\rAbsatz 9\r'});
var tf_2 = _doc.textFrames.add({geometricBounds : [10,40,100,80], contents:'Absatz 0\rAbsatz 1\rAbsatz 2\rAbsatz 3\rAbsatz 4\rAbsatz 5\rAbsatz 6\rAbsatz 7\rAbsatz 8\rAbsatz 9\r'});
var tf_3 = _doc.textFrames.add({geometricBounds : [10,80,100,120], contents:'Absatz 0\rAbsatz 1\rAbsatz 2\rAbsatz 3\rAbsatz 4\rAbsatz 5\rAbsatz 6\rAbsatz 7\rAbsatz 8\rAbsatz 9\r'});

// Referenzierung von je drei bestimmten Absätzen
var pa_1 = [tf_1.paragraphs.item(2),tf_1.paragraphs.item(5),tf_1.paragraphs.item(7)];
var pa_2 = [tf_2.paragraphs.item(2),tf_2.paragraphs.item(5),tf_2.paragraphs.item(7)];
var pa_3 = [tf_3.paragraphs.item(2),tf_3.paragraphs.item(5),tf_3.paragraphs.item(7)];


// =======================================================
// Versuchsoperationen
// =======================================================

// Textrahmen 1 – nur ! voranstellen
for (var i = pa_1.length - 1; i >= 0 ; i--)
{
pa_1[i].insertionPoints.firstItem().contents = '!';
}

// Textrahmen 2 – nur Absatz löschen
for (var i = pa_2.length - 1; i >= 0 ; i--)
{
pa_2[i].remove();
}

// Textrahmen 3 – ! voranstellen und danach Absatz löschen – Schleife rückwärts
for (var i = pa_3.length - 1; i >= 0 ; i--)
{
pa_3[i].insertionPoints.firstItem().contents = '!';
pa_3[i].remove();
}

Die Textrahmen beinhalten direkt nach dem Anlegen jeweils die folgende Liste
Code
Absatz 0 
Absatz 1
Absatz 2
Absatz 3
Absatz 4
Absatz 5
Absatz 6
Absatz 7
Absatz 8
Absatz 9


Die Absätze in den einzelnen Textrahmen werden in analoger Weise in den Arrays pa_1, pa_2 und pa_3 referenziert.

Nun werden auf die Absätze in den drei Textrahmen der Reihe nach unterschiedliche Operationen angewandt.

Den Absätzen 3, 6, 8 ('Absatz 2', 'Absatz 5' und 'Absatz 7') des ersten Textrahmens wird in einer Schleife rückwärts ein Ausrufezeichen ! vorangestellt.
Das Ergebnis entspricht der Erwartung.
Code
Absatz 0 
Absatz 1
!Absatz 2
Absatz 3
Absatz 4
!Absatz 5
Absatz 6
!Absatz 7
Absatz 8
Absatz 9


Die entsprechenden Absätze des zweiten Textrahmens werden in einer Schleife rückwärts gelöscht.
Auch hier entspricht das Ergebnis der Erwartung.
Code
Absatz 0 
Absatz 1
Absatz 3
Absatz 4
Absatz 6
Absatz 8
Absatz 9


Auf die entsprechenden Absätze des dritten Textrahmens werden in einer Schleife rückwärts beide Operationen direkt hintereinander angewandt.
Naiverweise würde man eigentlich dasselbe Ergebnis wie in Textrahmen 2 erwarten. Die Absätze, welchen zunächst ein Ausrufezeichen vorangestellt bekommen, werden im nächsten Schritt sofort gelöscht. Es sollten also keine Ausrufezeichen sichtbar sein.

Sind sie doch.
Aber nicht bei den Absätzen, wie im ersten Textrahmen, sondern – auf den ersten Blick – um einen Absatz weiter nach unten versetzt.
Code
Absatz 0 
Absatz 1
!Absatz 3
Absatz 4
!Absatz 6
!Absatz 8
Absatz 9


Wie ist das möglich?
Das Löschen, das nach der Zuweisung des Ausrufezeichens erfolgt, soll korrekt ausgeführt sein (das Ergebnis in Textrahmen 3 entpricht in dieser Hinsicht dem Ergebnis in Textrahmen 2) und beim Einfügen des Ausrufezeichens soll ein Fehler unterlaufen sein?

Wenn man in Zeitlupe (d.h. mit einer Unterbrechung während des zweiten Schleifendurchgangs direkt nach Einfügen des Ausrufezeichens) zuschaut, dann erkennt man, dass das Ausrufezeichen durchaus an der richtigen Stelle eingefügt wird.

Der Fehler kommt aber nun dadurch zustande, dass nicht der gesamte Absatz, in welchen das Ausrufezeichen eingefügt worden ist, gelöscht wird, sondern nur der Teil des Absatzes, der vor dem Einfügen des Ausrufezeichens existierte, also ab 'Absatz' unter Ignorieren des frisch hinzugekommenen Ausrufezeichens.

Zu diesem wird dann der Anfang des nächsten Absatzes 'hochgezogen', so dass es am Ende so wirkt, als ob es dem falschen Absatz zugewiesen worden sei.
Die Absätze, wären sie abwechselnd rot und blau eingefärbt, sähen also am Ende so aus:
Code
Absatz 0 
Absatz 1
!Absatz 3
Absatz 4
!Absatz 6
!Absatz 8
Absatz 9




Für meinen konkreten Fall (wo es um Verschiebungen von verankerten Objekten, die durch die Verschiebung die interne Ordnung der Absätze durcheinanderbringen) habe ich zwar einen spezifischen Workaround entwickeln können.
Eine allgemeine Lösung wäre aber angenehmer. ;-)
Ich würde das Verhalten, das nicht der Erwartung entspricht, auch als Bug bezeichnen.

Es sieht so aus, als ob ein referenzierter Absatz, dessen Inhalt sich während der Skriptausführung verändert, über seine Bestandteile den Überblick verliert und vergisst, wo seine Grenzen sind.

Ist es so, dass das Problem in erster Linie am Anfang eines Absatzes zu finden ist oder ist jemandem in ähnlichen Situationen auch schon untergekommen, dass am Ende etwas fehlt (aus der Referenzierung rausfällt) – je nachdem, ob im 'realen' Absatz etwas hingekommen oder weggenommen wurde?

(Dieser Beitrag wurde von Martin Fischer am 14. Aug 2011, 21:01 geändert)
Änderungsverlauf:
Beitrag geändert von Martin Fischer (Moderator) am 14. Aug 2011, 20:57
Beitrag geändert von Martin Fischer (Moderator) am 14. Aug 2011, 21:01

Aktuell

Veranstaltungskalender

Hier können Sie Ihre Anlässe eintragen, welche einen Zusammenhang mit den Angeboten von HilfDirSelbst.ch wie z.B. Adobe InDesign, Photoshop, Illustrator, PDF, Pitstop, Affinity, Marketing, SEO, Büro- und Rechtsthemen etc. haben. Die Einträge werden moderiert freigeschaltet. Dies wird werktags üblicherweise innert 24 Stunden erfolgen.

pdf-icon Hier eine kleine Anleitung hinsichtlich Bedeutung der auszufüllenden Formularfelder.

Veranstaltungen
14.05.2024

Online
Dienstag, 14. Mai 2024, 10.00 - 10.30 Uhr

Webinar

Prozessoptimierung ist ein Teamsport! Keine Software und keine Maschine allein kann Ihnen helfen, die Effizienzpotenziale Ihres Betriebes maximal auszuschöpfen. Von der Auftragsannahme über die Vorstufe und den Druck bis hin zur Weiterverarbeitung – alles muss optimal ineinandergreifen. Apropos Weiterverarbeitung – in vielen Druckbetrieben fristet sie in Sachen Prozessoptimierung immer noch ein Schattendasein. Dabei liegen hier mittlerweile die größten Einsparpotenziale! In einem Webinar von Horizon und Impressed erfahren Sie, wie Sie diese Einsparungen realisieren können. Horizon, bekannt für innovative Lösungen in der Druckweiterverarbeitung, bietet mit iCE LiNK eine Workflowlösung für die Weiterverarbeitung. iCE LiNK überwacht, visualisiert und analysiert Produktionsabläufe und unterstützt bei der Wartung – damit immer alles reibungslos läuft. Den gleichen Anspruch hat der von Impressed entwickelte Impressed Workflow Server – er ist die smarte PDF-Workflow-Lösung für Druckereien, die Datenmanagement, Preflight und Produktionssteuerung übernimmt. Im Webinar zeigen Ihnen die Experten von Horizon und Impressed, wie beide Lösungen im Team die Effizienz und Produktivität Ihres Betriebes steigern können. Melden Sie sich am besten gleich an, wir freuen uns auf Sie! PS: Melden Sie sich in jedem Fall an – sollten Sie zum Termin verhindert sein, erhalten Sie die Aufzeichnung.

kostenlos

Ja

Organisator: Impressed / Horizon

https://www.impressed.de/schulung.php?c=sDetail&sid=327

Einsparpotenziale in der Weiterverarbeitung
Veranstaltungen
16.05.2024

Online
Donnerstag, 16. Mai 2024, 10.00 - 10.30 Uhr

Webinar

Komplizierte, kleinteilige Aufträge; alles sehr speziell; seit Jahren bewährte Prozesse – da können wir nichts standardisieren und automatisieren! Das sagen viele Großformatdrucker – aber stimmt das wirklich, ist dem tatsächlich so? Günther Business Solutions und Impressed treten in einem Webinar den Gegenbeweis an. Experten beider Unternehmen zeigen, wie Großformatdrucker vom Einsatz zweier bewährter Lösungen profitieren können: • von advanter print+sign von Günther Business Solutions, dem ERP-System für den Großformatdruck, dass alle Phasen der Wertschöpfung im Large Format Printing abdeckt • von Impressed Workflow Server, der smarten PDF-Workflow-Lösung für Druckereien, die Datenmanagement, Preflight und Produktionssteuerung übernimmt Über die Kombination beider Lösungen können Großformatdrucker ihre Prozesse mit modernen Workflows Schritt für Schritt automatisieren – und so zügig deutliche Zeit- und Kosteneinsparungen realisieren. Das Webinar sollten Sie sich nicht entgehen lassen – damit Sie keine Effizienzpotenziale mehr liegen lassen. Melden Sie sich am besten gleich an, wir freuen uns auf Sie! PS: Melden Sie sich in jedem Fall an – sollten Sie zum Termin verhindert sein, erhalten Sie die Aufzeichnung.

kostenlos

Nein

Organisator: Impressed / Günther Business Solutions

https://www.impressed.de/schulung.php?c=sDetail&sid=326

Und es geht doch: Automatisierung im Großformatdruck!