[GastForen Programme Print/Bildbearbeitung Adobe InDesign InDesign Zeilenzähler

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

InDesign Zeilenzähler

rbolzern
Beiträge gesamt: 22

27. Nov 2006, 23:22
Beitrag # 1 von 25
Bewertung:
(7137 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Gibt es eine Weg die möglichen Zeilen, in einer leeren Textbox, im Voraus zu zählen? Ich finde unter der Information leider nur die Anzeige vom geschriebenen Text und dem Uebertext. Schön wäre es wie in InCopy, wenn ich im Voraus sehen könnte wieviel Text zur Einpassung benötigt wird.
X

InDesign Zeilenzähler

Christoph Steffens
  
Beiträge gesamt: 4906

28. Nov 2006, 06:25
Beitrag # 2 von 25
Beitrag ID: #264075
Bewertung:
(7113 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,
ich denke nicht das das geht.
Lösung könnte sein, einen Platzhaltertext einzufügen (einfach z.B. über das Kontextmenu), dort die Zeilen in der Info ablesen und den Text wieder löschen.


als Antwort auf: [#264063]

InDesign Zeilenzähler

Martin Fischer
  
Beiträge gesamt: 12783

28. Nov 2006, 08:59
Beitrag # 3 von 25
Beitrag ID: #264085
Bewertung:
(7084 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Die Aufgabe ist nicht ganz einfach zu bewältigen, weil der Kontext komplexer sein kann, als zunächst gedacht:
Was ist die Maßeinheit der Zeilen (Höhe der Zeilen; Absatzabstand oben/unten)?
Was passiert, wenn bereits Text im Rahmen drinsteht, womöglich mit unterschiedlichen Zeilenhöhen oder Abständen?

In den folgenden Ansätzen bleiben die Absatzabstände unberücksichtigt.

Hier ein Ansatz, der dem Weg von Christophs Vorschlag folgt.
Von den ausgewählten Textrahmen wird jeweils ein Duplikat erstellt. Diese Duplikate werden solange mit Leerzeilen gefüllt, bis der Textabschnitt überläuft. Dann werden die tatsächlichen Zeilen im Textrahmen ermittelt und über einen Dialog ausgegeben. Anschließend wird das temporäre Duplikat wieder gelöscht:

Code
// expectedLinesCounter_1.jsx 

if (app.selection.length == 0)
exit();

for (k= app.selection.length-1; k >= 0; k--) {
var myObject = app.selection[k].duplicate();
if (myObject.constructor.name == "TextFrame") {
while (myObject.parentStory.overflows == false) {
myObject.parentStory.insertionPoints[-1].contents = "\r"
}
alert(myObject.lines.length);
}
myObject.remove();
}


Der zweite Ansatz berechnet die Zeilenzahl aus der Höhe eines ausgewählten Textrahmens dividiert durch die Höhe der "möglichen" (aber nicht vorhandenen) Zeilen. Die Höhe der Zeilen ergibt sich aus der Höhe der Zeile des ersten Einfügepunkts im Textrahmen. Ist die Zeilenhöhe automatisch, dann wird die absolute Zeilenhöhe aus dem Schriftgrad multipliziert mit dem Wert für den automatischen Zeilenabstand berechnet.

Code
// expectedLinesCounter_2.jsx 

if (app.selection.length != 1)
exit();

var myObject = app.selection[0];
if (myObject.constructor.name == "TextFrame") {
// sichern der Linealeinheiten und Wechsel auf Points
var oldHorizontalUnits = app.activeDocument.viewPreferences.horizontalMeasurementUnits;
var oldVerticalUnits = app.activeDocument.viewPreferences.verticalMeasurementUnits;
app.activeDocument.viewPreferences.horizontalMeasurementUnits
= app.activeDocument.viewPreferences.verticalMeasurementUnits
= MeasurementUnits.points;

if (myObject.parentStory.insertionPoints[-1].leading == Leading.auto) {
var myLeading = (myObject.parentStory.insertionPoints[0].pointSize * myObject.parentStory.insertionPoints[-1].autoLeading)/100;
}
else {
var myLeading = myObject.parentStory.insertionPoints[0].leading;
}
var myBounds = myObject.geometricBounds;
var myHeight = myBounds[2] - myBounds[0];
var myLines = parseInt(myHeight/myLeading);

alert(myLines + " Zeilen");

// wiederherstellen der Linealeinheiten
app.activeDocument.viewPreferences.horizontalMeasurementUnits = oldHorizontalUnits;
app.activeDocument.viewPreferences.verticalMeasurementUnits = oldVerticalUnits;
}


Dieser zweite Ansatz arbeitet irgendwie noch nicht ganz sauber.
Es ist möglich, daß der zweite Ansatz im Grenzbereich eine Zeile weniger errechnet, als tatsächlich reinpaßt.
Woher dieser Fehler rührt, kann ich im Moment nicht sagen.
Vielleicht kann mir jemand auf die Sprünge helfen.


als Antwort auf: [#264075]

InDesign Zeilenzähler

Hans Haesler
Beiträge gesamt: 5826

28. Nov 2006, 10:37
Beitrag # 4 von 25
Beitrag ID: #264105
Bewertung:
(7055 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

man muss die Oberlänge der ersten Zeile berücksichtigen. Bei einem leeren Rahmen kann
der 'ascent' nur verlangt werden, wenn vorher mindestens ein Zeichen eingefügt worden
ist. Zur Rahmenhöhe rechnet man den Wert des Zeilenabstandes minus die Oberlänge.

Code
// expectedLinesCounter_2.jsx  

if (app.selection.length != 1)
exit();

var myObject = app.selection[0];
if (myObject.constructor.name == "TextFrame") {
// sichern der Linealeinheiten und Wechsel auf Points
var oldHorizontalUnits = app.activeDocument.viewPreferences.horizontalMeasurementUnits;
var oldVerticalUnits = app.activeDocument.viewPreferences.verticalMeasurementUnits;
app.activeDocument.viewPreferences.horizontalMeasurementUnits
= app.activeDocument.viewPreferences.verticalMeasurementUnits
= MeasurementUnits.points;

myObject.parentStory.insertionPoints[-1].contents = "M"

if (myObject.parentStory.insertionPoints[-1].leading == Leading.auto) {
var myLeading = (myObject.parentStory.insertionPoints[0].pointSize * myObject.parentStory.insertionPoints[-1].autoLeading)/100;
var myAscent = myObject.parentStory.characters[0].ascent;
}
else {
var myLeading = myObject.parentStory.insertionPoints[0].leading;
var myAscent = myObject.parentStory.characters[0].ascent;
}
var myBounds = myObject.geometricBounds;
var myHeight = myBounds[2] - myBounds[0];
var myLines = parseInt((myHeight+(myLeading-myAscent))/myLeading);
myObject.parentStory.characters[-1].remove();

alert(myLines + " Zeilen");

// wiederherstellen der Linealeinheiten
app.activeDocument.viewPreferences.horizontalMeasurementUnits = oldHorizontalUnits;
app.activeDocument.viewPreferences.verticalMeasurementUnits = oldVerticalUnits;
}

Gruss, Hans

[edit] Kleine Änderung: Nur das letzte Zeichen entfernen. Damit wird vermieden, dass
möglicherweise vorhandener Text gelöscht wird. Und ein entsprechender Test entfällt.


als Antwort auf: [#264085]
(Dieser Beitrag wurde von Hans Haesler am 28. Nov 2006, 10:50 geändert)

InDesign Zeilenzähler

Martin Fischer
  
Beiträge gesamt: 12783

28. Nov 2006, 10:55
Beitrag # 5 von 25
Beitrag ID: #264109
Bewertung:
(7047 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

prima, so paßt es.

Ich hatte es so halber geahnt, daß da irgendwas mit der Oberlänge der ersten oder der Unterlänge der letzten Zeile nicht paßt.
Aber auf die Zeicheneigenschaft "ascent" (bzw. "descent") wäre ich nicht gekommen.
Die habe ich bislang stets übersehen.

Danke für den Hinweis.
Wieder etwas gelernt.


als Antwort auf: [#264105]

InDesign Zeilenzähler

Hans Haesler
Beiträge gesamt: 5826

28. Nov 2006, 12:06
Beitrag # 6 von 25
Beitrag ID: #264120
Bewertung:
(7023 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

bitteschön. Zusätzlich zu den von Dir schon genannten Optionen müsste
auch die Ausrichtung auf den Grundlinienraster berücksichtigt werden,
und Rahmenattribute, wie die Stärke der Kontur, deren Ausrichtung ;-),
der Versatzabstand oben/unten, der Offset der ersten Grundline ...

Damit ist bestimmt noch nicht alles abgedeckt. Deshalb ist die Deine erste
Version zuverlässiger. Ausser, wenn ein Objekt einen Teil des Textes
im Originalrahmen verdrängen würde.

Gruss, Hans


als Antwort auf: [#264109]

InDesign Zeilenzähler

rbolzern
Beiträge gesamt: 22

28. Nov 2006, 19:46
Beitrag # 7 von 25
Beitrag ID: #264234
Bewertung:
(6985 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

Vielen Dank für deine Antwort, ich habe dein Script in den InDesign-Scriptordner gelegt und sehe ihn danach auch in der Palette. Leider passiert nichts wenn ich den Script ausführe. Da ich mich mit Scripts nicht so gut auskenne, bin ich mir nicht sicher ob ich etwas falsch gemacht habe. Kannst du mir bitte erklären wie ich zur Rückmeldung der Zeilenanzahl komme?

Gruss Raphael


als Antwort auf: [#264085]

InDesign Zeilenzähler

Martin Fischer
  
Beiträge gesamt: 12783

28. Nov 2006, 20:29
Beitrag # 8 von 25
Beitrag ID: #264236
Bewertung:
(6977 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Raphael,

hast Du vor dem Starten des Skripts einen leeren Textrahmen ausgewählt?


als Antwort auf: [#264234]

InDesign Zeilenzähler

rbolzern
Beiträge gesamt: 22

29. Nov 2006, 10:09
Beitrag # 9 von 25
Beitrag ID: #264284
Bewertung:
(6931 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin
Ja ich habe einen Leeren Textrahmen ausgewählt und dann den Script mit dem Menupunkt "Script ausführen" gestartet. Uebrigens mit einer InDesign Windows Version.

Gruss Raphael


als Antwort auf: [#264236]

InDesign Zeilenzähler

Martin Fischer
  
Beiträge gesamt: 12783

29. Nov 2006, 10:46
Beitrag # 10 von 25
Beitrag ID: #264297
Bewertung:
(6923 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Raphael,

das Skript ist plattformübergreifend.
Allerdings habe ich gerade festgestellt, daß das erste Skript unter CS nicht vernünftig läuft.
Könntest Du bitte noch Deine InDesign Version angeben?

Hier eine angepaßte Version, die in CS und CS2 laufen sollte:
Code
// expectedLinesCounter_1a.js 

if (app.selection.length == 0) {
alert("Bitte einen Textrahmen auswählen!")
exit();
}

for (k= app.selection.length-1; k >= 0; k--) {
if (app.selection[k].constructor.name == "TextFrame") {
var myObject = app.selection[k].duplicate();
while (myObject.overflows == false) {
myObject.parentStory.insertionPoints[-1].contents = "\r"
}
alert(myObject.lines.length);
myObject.remove();
}
else {
alert("Fehler!\rSie haben ein(en) " + app.selection[k].constructor.name + " statt eines Textrahmens ausgewählt.")
}
}



als Antwort auf: [#264284]

InDesign Zeilenzähler

rbolzern
Beiträge gesamt: 22

29. Nov 2006, 12:41
Beitrag # 11 von 25
Beitrag ID: #264339
Bewertung:
(6905 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin

Ich habe IdDesign CS2.

Gruss Raphael


als Antwort auf: [#264297]

InDesign Zeilenzähler

Martin Fischer
  
Beiträge gesamt: 12783

29. Nov 2006, 13:34
Beitrag # 12 von 25
Beitrag ID: #264367
Bewertung:
(6897 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Raphael,

ich nehme an, Du konntest das Skript immer noch nicht erfolgreich ausführen.
Du bekommst überhaupt keine Meldung in einem Dialogfenster angezeigt.
Tut mir leid, aber an diesem Punkt weiß ich nicht mehr weiter.

Ich empfehle Dir, so zu verfahren, wie es Christoph oben beschrieben hat.


als Antwort auf: [#264339]

InDesign Zeilenzähler

Hans Haesler
Beiträge gesamt: 5826

29. Nov 2006, 14:14
Beitrag # 13 von 25
Beitrag ID: #264390
Bewertung:
(6887 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

ja, es ist eigenartig, dass sich bei Raphael nichts tut.

Dennoch wirst Du sicher dieses Script archivieren.
Deshalb hier zwei Anregungen. Zusätzlich zum Abfangen
einer falschen Auswahl könnte man wenigstens anhand der
Einfügemarke den Textrahmen referenzieren.

Eine zweite Änderung: Statt "\r" (= Return) "\n" (= neue
Zeile) benutzen, damit bei definiertem Abstand vor/nach
das Ergebnis nicht verfälscht wird.

Code
// expectedLinesCounter_1b.js  

if (app.selection.length == 0) {
alert("Bitte einen Textrahmen auswählen!")
exit();
}

for (k= app.selection.length-1; k >= 0; k--) {
var mySel = app.selection[k].constructor.name;
if (mySel == "TextFrame") {
var myObject = app.selection[k].duplicate();
}
else if (mySel == "InsertionPoint") {
var myObject = app.selection[k].parent.textFrames.item(0).duplicate();
}
else {
alert("Fehler!\rSie haben ein(en) " + app.selection[k].constructor.name + " statt eines Textrahmens ausgewählt.")
exit();
}
while (myObject.overflows == false) {
myObject.parentStory.insertionPoints[-1].contents = "\n"
}
alert(myObject.lines.length);
myObject.remove();
}

Gruss, Hans


als Antwort auf: [#264367]

InDesign Zeilenzähler

rbolzern
Beiträge gesamt: 22

29. Nov 2006, 18:37
Beitrag # 14 von 25
Beitrag ID: #264474
Bewertung:
(6863 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans

Vielen Dank für deinen Script ich habe die Textbox mit dem Inhaltswerkzeug ausgewählt, darum ist es nicht gegangen. Jetzt funktioniert dieser Script und ich bekomme ein Resultat, einzig bei verknüpften Textboxen und Spalten verzählt sich der Script. Sonst funktioniert er sogar mit Konturenführung.

Vielen Dank Dir und auch dem Martin


als Antwort auf: [#264390]

InDesign Zeilenzähler

Hans Haesler
Beiträge gesamt: 5826

30. Nov 2006, 08:34
Beitrag # 15 von 25
Beitrag ID: #264526
Bewertung:
(6837 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Raphael,

der Dank gebührt vor allem dem Martin.

Aber bei verknüpften Textrahmen bekomme ich ein richtiges Ergebnis.
Dabei spielt es keine Rolle, ob der Cursor im ersten Rahmen blinkt,
oder mit einem Pfeilwerkzeug ein beliebiger Rahmen ausgewählt ist.

Schildere bitte, wie Du vorgehst, welches Resultat Du erwartest und
was der Dialog des Scripts verkündet.

Damit auch die Spalten berücksichtigt werden, kannst Du diese neue
Version ausprobieren:

Code
// expectedLinesCounter_1c.js  

if (app.selection.length == 0) {
alert("Bitte einen Textrahmen auswählen!")
exit();
}

for (k= app.selection.length-1; k >= 0; k--) {
var mySel = app.selection[k].constructor.name;
if (mySel == "TextFrame") {
var myObject = app.selection[k].duplicate();
}
else if (mySel == "InsertionPoint") {
var myObject = app.selection[k].parent.textFrames.item(0).duplicate();
}
else {
alert("Fehler!\rDu hast ein(en) " + app.selection[k].constructor.name + " statt eines Textrahmens ausgewählt.")
exit();
}
while (myObject.overflows == false) {
myObject.parentStory.insertionPoints[-1].contents = "\n"
}
myColumns = myObject.textFramePreferences.textColumnCount;
alert(myObject.lines.length/myColumns);
myObject.remove();
}

Gruss, Hans


als Antwort auf: [#264474]
X