[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Koordinaten aller Wörter

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Print/Bildbearbeitung - Photos, Layout, Design
Themen
Beiträge
Moderatoren
Letzter Beitrag

Koordinaten aller Wörter

J.Puff
Beiträge gesamt: 234

3. Okt 2011, 13:09
Beitrag # 1 von 6
Bewertung:
(2790 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,
ist es auch möglich, die Koordinaten aller Wörter in einem Textrahmen zu bekommen?
Ich stelle mir eine Liste vor, die etwa so aussieht (Koordinaten fiktiv, LTRB):
Dies [0,0,10,10]
ist [12,0,18,10]
eine [20,0,30,10]
andere [0,12,20,22]
Zeile [22,12,37,22]

Danke für eine Info, am liebsten (wenn möglich) mit einem Beispiel-Script?
Beste Grüße
Johannes
X

Koordinaten aller Wörter

Uwe Laubender
Beiträge gesamt: 5253

3. Okt 2011, 18:16
Beitrag # 2 von 6
Beitrag ID: #481521
Bewertung:
(2747 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo, Johannes!
Stellt sich die Frage, was genau die Koordinaten eines Wortes sind…
Wie willst Du mit den ermittelten Werten weiterarbeiten?

Möchtest Du ein Rechteck mit x1/y1 und x2/y2 beschreiben, das das Wort einschließt?
Mit allen Ober- und Unterlängen?
Was soll bei getrennten Worten gemessen werden?

Für den sehr vereinfachten Fall eines ungetrennten Wortes geht das mit folgendem Trick:
1. Wort duplizieren und in Zeichenwege wandeln
2. Die "visible Bounds" des erzeugten Objekts auslesen
(was tun bei Textrahmen, die um beliebige Werte gedreht oder verzerrt wurden?)

Beispiel für die Visible Bounds des 1. Wortes in einem angewählten Textrahmen:

Code
//Die Auswahl ist der Textrahmen, das 1. Wort des Textrahmens ist words[0]: 
var _word = app.selection[0].words[0];

//Wandel das erste Wort der Auswahl in Zeichenwege ohne das Original zu löschen:
var _wordToPath = _word.createOutlines(false);

//Lese die Visible Bounds (Rechteck, das alle sichtbaren Elemente des gewandelten Objekts umfasst) aus:
var _visibleBounds = _wordToPath[0].visibleBounds;

//Meldung der Koordintaten dieses Rechtecks:
alert("y1,x1,y2,x2:\t"+_visibleBounds);

//Lösche das in Pfade gewandelte Objekt:
_wordToPath[0].remove();


Dieser Scriptbrocken liest die Koordinaten von Worten nur korrekt aus, wenn die Strichstärke "0" beträgt oder wenn die Linienstärke nach innen und außen wächst (Kontur mittig ausrichten).

Um die Werte ALLER Worte innerhalb eines Textrahmens auszulesen, muß mit einer Schleife Wort um Wort in Zeichenwege gewandelt und die resultierenden Koordinaten gespeichert werden.

Hier im Beispiel wird zusätzlich das Resultat der Messung in einer Tabelle auf der 1. Seite des Dokuments gelistet. Die Reihenfolge der Werte ist JavaScript-like in der Reihenfolge y1,x1,y2,x2:

Code
var _d = app.activeDocument; 
var _selection = app.selection[0];
var _visibleBoundsArray = new Array();
var _wordsArray = new Array();

for(var n=0;n<_selection.words.length;n++){
var _word = _selection.words[n];
var _wordToPath = _word.createOutlines(false);

//Den Wortinhalt in einen separaten Array schreiben:
_wordsArray.push(_word.contents);
//Die Koordinaten ebenfalls und in Textstrings umwandeln:
_visibleBoundsArray.push(_wordToPath[0].visibleBounds.toString());
//Das Hilfsobjekt löschen:
_wordToPath[0].remove();

};

//Ergebnisse in einer Tabelle darstellen
//NEUE Tabelle auf der 1. Seite des Dokuments anlegen:
var _resultTextFrame = _d.textFrames.add({geometricBounds:[0,0,100,100]});
var _resultTable = _resultTextFrame.insertionPoints[0].tables.add({
columnCount:2,
bodyRowCount:_wordsArray.length
});

//Der Inhalt der Tabelle:
//1.Spalte die Wortinhalte
_resultTable.columns[0].contents = _wordsArray;
//2.Spalte deren Koordinaten in Reihenfolge y1,x1,y2,x2:
_resultTable.columns[1].contents = _visibleBoundsArray;



Anmerkung:
Im Unterschied zum UserInterface (Definition Wort = Doppelklick selektiert ein Wort) ist die Definition eines Wortes (word) über JavaScript das Wort plus die gegebenenfalls angehängten Satzzeichen. Falls dies nicht gewünscht sein sollte wird das Script komplizierter…


als Antwort auf: [#481510]

Koordinaten aller Wörter

J.Puff
Beiträge gesamt: 234

3. Okt 2011, 21:56
Beitrag # 3 von 6
Beitrag ID: #481525
Bewertung:
(2709 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Uwe,
herzlichen Dank, das ist was ich suchte!
Bleibt sich das Problem mit getrennten Wörtern.
Kann ich herausfinden, welche Worte InDesign trennt?
Alternativ: wäre es möglich, vorab nur vom ersten Zeichen die Koordinaten auszuwerten und damit herauszufinden, ob die Höhe über zwei Zeilen läuft?

Beste Grüße
Johannes Puff


als Antwort auf: [#481521]

Koordinaten aller Wörter

J.Puff
Beiträge gesamt: 234

15. Nov 2011, 21:36
Beitrag # 4 von 6
Beitrag ID: #484475
Bewertung:
(2525 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Uwe,
ich habe das Script inzwischen erweitert, so dass ich getrennte Worte auch erfasse.
Dazu wandele ich das letzte Zeichen auch in Pfade und nutze die Koordinaten des Zeichens zur Berechnung.
Das klappt, wenn die Texte nicht per XML in das Dokument geladen werden.
Haben Sie eine Idee, was ich falsch mache?
Folgende Zeile löst Fehler 80651:
Code
var _lastCharToPath = _word.characters[_word.length-1].createOutlines(false); 

Merkwürdigerweise allerdings immer nur beim letzten Wort in einer Zeile.

Danke für eine Hilfestellung.


als Antwort auf: [#481525]

Koordinaten aller Wörter

Uwe Laubender
Beiträge gesamt: 5253

16. Nov 2011, 12:14
Beitrag # 5 von 6
Beitrag ID: #484547
Bewertung:
(2486 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo, Johannes!
Um das weiter zu untersuchen, bräuchte ich zwei InDesign-Beispieldateien (einmal mit und einmal ohne XML-Inhalte) plus Dein abgeändertes Script. Könntest Du das mir zum Download bereitstellen?


als Antwort auf: [#484475]

Koordinaten aller Wörter

J.Puff
Beiträge gesamt: 234

16. Nov 2011, 13:42
Beitrag # 6 von 6
Beitrag ID: #484561
Bewertung:
(2468 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Uwe,
leider habe ich noch keinen Member-Zugang zum Hochladen der Daten. Gibt es eine andere Möglichkeit?
Gruß
J.


als Antwort auf: [#484547]
X

Aktuell

InDesign / Illustrator
axaio_PR_Bild_300x300_10_22

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
01.03.2023 - 09.03.2023

Online
Mittwoch, 01. März 2023, 00.00 Uhr - Donnerstag, 09. März 2023, 00.00 Uhr

Online Webinar

Wie gehen wir mit diesen Veränderungen um? Was ist notwendig, damit wir die Digitalisierung im Unternehmen klappt? Veränderungsprozesse verstehen und entsprechend handeln Mitarbeiter als Botschafter Webseite mit WordPress erstellen SEA /SEO (Ads aufschalten)

Ja

Organisator: B. Isik - SNF Academy

Kontaktinformation: B. Isik, E-Mailinfo AT snfa DOT ch

https://www.fernstudiumfitness.ch/digitalisierung-schweiz/