Document ID: /fineweb-2-swissfilter-quality_10-filterrobots/filtered/03524.jsonl.gz/753

ich möchte gerne folgendes Ergebnis erzielen: Mit einem Skript soll nachgeshen werden wo im Text ein Preis nach einem "statt" + Leerzeichen vorkommt. An dieser Stelle soll der Preis durchgestrichen werden, aber nicht mit einem Zeichenformat sondern mit einer graphicline von links unten (Grundlinie) bis rechts oben (Versalhöhe) über die ganze Breite des Preises = Fundstelle.
Die Fundstelle kann ich mit GREP so ermitteln: (?<=statt\s)\d+\.(\d+|-)
Aber wie kann ich die Linie an dieser Stelle diagonal zeichnen lasen?
Du denkst zu kompliziert. Dafür braucht es kein Skript!
Du machst dir eine Linie und vergibst ihr ein Objektformat. Dann fügst du sie an deiner Fundstellen über die Zwischenablage ein und richtest sie dann (oder schon vorher) als benutzerdefiniertes verankertes Objekt ein.
Danke Kai für deine Antwort. Aber ich denke leider nicht zu kompliziert. Der Text selbst darf nicht verändert werden. Also dürfen auch keine verankerten Objekte im Text vorkommen. (Der Text ist mit einer Datenbank verbunden und wird auch von daher aktualisiert) Ergo muss die "Durchstreichlinie" als eigenes Objekt über dem Text liegen.
Und daher wollte ich das per Skript erledigen.
Um eine Linie zeichnen zu können müsste ich jedoch die Koordinaten von meiner Fundstelle irgendwie auf die der Linie übertragen. Und genau hier fehlt mir der Ansatz.
Dann würde ich den Strich trotzdem verankert einfügen u. nachträglich alle verankerten Objekte lösen. Wenn sich später dein Layout verschiebt, kannst du alle Objekte mit Objektformat x löschen und machst die Schritte einfach noch einmal.
Also: Hast du die Mitteilung von Martin gelesen. So könnte man das machen. Es gibt im Forum auch einige Beispiele dazu. Ich bin allerdings von deinem Skripting-Wissenstand ausgegangen und fände diese teilautomatisierte Lösung für dich momentan einfacher …
Was spricht gegen das Einfügen u. nachträgliche Lösen eines Objekts?
Edit: Nein, hast du vermutlich nicht, denn Martin hat seinen guten Ansatz leider wieder gelöscht?!
Es wäre übrigens so, dass du per Skript generell unterschiedliche Neigungen in Abhängigkeit der Länge deiner Preise kriegen wirst. Das würde MIR nicht gefallen.
Gruß Kai Rübsamen
(Dieser Beitrag wurde von Kai Rübsamen am 18. Dez 2017, 14:37 geändert)
Hallo faxinger, ich hätte da noch einen Ansatz, der ohne eine Verankerung auskommt.
1. Wandle jede Fundstellen in eine Outline als Duplikat. Also Schleife durch die Fundstellen mit Zähler n . Innerhalb der Schleife dann:
Warum die [0] ? Weil createOutlines ein Array zurückgibt. Ich gehe hier mal von einer Länge 1 aus.
2. Zeichne im Spread der Outline (das ist der parent von outline) eine graphicLine mit den geometricBounds der Outline. Das gelingt am besten, wenn Du die Eigenschaft rulerOrigin der viewPreferences des Dokuments auf RulerOrigin.SPREAD_ORIGIN stellst.
An dieser Stelle kannst Du auch Werte für strokeWeight und strokeColor mitgeben. Vielleicht auch noch einen Wert für itemLayer, damit die graphicLine auf eine gesonderte Ebene gelangt.
3. Um von links unten nach rechts oben zu zeichnen, kannst Du den entirePath umdefinieren:
Dann kannst Du das Objekt aus 1. wieder löschen:
Da wir hier kein konkretes Beispiel sehen, ist es etwas schwierig zu entscheiden, ob mein Vorschlag taugt, um von "Grundlinie" zu "Versalhöhe" zu zeichnen. Je nach Typografie der Preise sind "Versalhöhe" und "Grundlinie" vielleicht weniger geeignet.
Bedenke auch, was passieren soll, wenn gefundener Text in Übersatz steht.
Mit horizontalOffset eines der insertionPoints eines gefundenen Texts würde ich übrigens nicht arbeiten. Das ist nicht exakt genug an der Form des Texts dran. Kann sich sogar im Text befinden, wenn mit Unterschneidung gearbeitet wurde. ***** Mit herzlichem Gruß, Uwe Laubender
Dein Vorgehen ist gefährlich! Was machst du, wenn sich der Umbruch nachträglich verschiebt? Wie willst du die Linien wieder löschen? Ich würde zumindest noch ein Objektformat, Namen oder eigene Ebene vergeben.
Gruß Kai Rübsamen
(Dieser Beitrag wurde von Kai Rübsamen am 15. Jan 2018, 12:27 geändert)
Hm… Noch einfacher wäre vielleicht für die Linien eine separate, eigene Ebene zu benutzen. Vor einem zweiten Skriptlauf wird einfach auf die Ebene geprüft und falls vorhanden gelöscht. ***** Mit herzlichem Gruß, Uwe Laubender
Das Problem dabei ist wie gesagt, dass nur die erste Seite bzw. der erste Druckbogen mit den Streichlinien umgesetzt wird. Die weiteren Linien (GREP-Fundstellen) werden alle auf der 1. Seite gezeichnet.
Na, dann ermittelst Du über den ersten insertionPoint des gefundenen Textes den zugehörigen Textrahmen und dessen parentPage und baust die Linie dort.
Das dürfte in Deinem Code das hier sein:
Du solltest aber vorab noch den aktuellen Wert von parentPage prüfen. Kann ja sein, dass sich eine Fundstelle auf dem Pasteboard befindet. Dann gibt parentPage den Wert null zurück. Im Erfolgsfall aber das Seitenobjekt. ***** Mit herzlichem Gruß, Uwe Laubender