Forenindex » Programme » Print/Bildbearbeitung » Adobe InDesign Skriptwerkstatt » InDesign mehrspaltige Textrahmen an Inhalt anpassen

InDesign mehrspaltige Textrahmen an Inhalt anpassen

freshling
Beiträge gesamt: 55

16. Aug 2012, 08:47
Bewertung:

gelesen: 8439

Beitrag als Lesezeichen
Hi,

ich suche ein Script, mit dessen Hilfe ich mehrspaltige Textrahmen auf ca 500 Seiten automatisch an den Inhalt anpassen kann.

Ich habe bereits eines fuer Objektrahmen und fuer normale Textrahmen. Aber fuer mehrspaltigen Textrahmen reichen meine Kenntnisse einfach nicht aus.

Ich habe mich bereits als Premium-Member registriert, weil ich hier dachte ein Script gefunden zu haben (http://indesign.hilfdirselbst.ch/text/mehrspaltige-textrahmen-an-inhalt-anpassen.html)
Allerdings muss man, wie ich gerade beim Testen herausgefunden habe, den Textrahmen angewaehlt haben, um eine Aenderung des Rahmens zu bewirken. Das ist nicht der Sinn. Es sollte wirklich mit einem Klick auf allen 500 Seiten angepasst werden!!


Beste Grueße,
Ben

(Dieser Beitrag wurde von freshling am 16. Aug 2012, 08:47 geändert)

InDesign mehrspaltige Textrahmen an Inhalt anpassen

Hans Haesler
  
Beiträge gesamt: 5826

16. Aug 2012, 09:24
Bewertung:

gelesen: 8412

Beitrag als Lesezeichen
Hi Ben,

herzlich willkommen auf HilfDirSelbst! :-)

Respekt: Erster Beitrag und schon Premium-Member! Das ist mehr als vorbildlich.

Das Script, welches Du gefunden hast, ist von Gerald Singelmann. Ohne den Code gesehen zu haben, denke ich, dass es möglich ist, es zu erweitern: Ist nichts ausgewählt, kommt ein Dialog, zum Bestätigen, dass wirklich alle Textrahmen angepasst werden sollen. Und dann macht das Script eine Schleife durch die Rahmen.

Ich möchte aber nicht an einem fremden Script herumbasteln. Warten wir doch mal ab, bis Gerald Deinen Wunsch entdeckt hat.

Gruss, Hans

InDesign mehrspaltige Textrahmen an Inhalt anpassen

freshling
Beiträge gesamt: 55

16. Aug 2012, 09:41
Bewertung:

gelesen: 8395

Beitrag als Lesezeichen
Ich stoebere jetzt schon seit Tagen bei euch herum und fand, dass das hier eine gute Sache und Investition ist. :-)

Außerdem finde ich das Thema InDesign-Scripte sehr interessant und denke, dass ich hier noch einiges dazu lernen kann.

Hier mal kurz das Script, das ich mir mit Hilfe von Freunden aus den Fingern gezogen habe. :D
Vllt kann man davon ja irgendwas verwenden, oder kommt auf eine Idee ...

var myLinks = app.activeDocument.links
for (k = 0; k < myLinks.length; k++)
myLinks[k].parent.parent.fit(FitOptions.frameToContent)

var myLinks = app.activeDocument.textFrames;
for (k = 0; k < myLinks.length; k++)
myLinks[k].fit(FitOptions.frameToContent)

InDesign mehrspaltige Textrahmen an Inhalt anpassen

Hans Haesler
  
Beiträge gesamt: 5826

16. Aug 2012, 10:21
Bewertung:

gelesen: 8359

Beitrag als Lesezeichen
Hallo Ben,

eigentlich sollte Dein Beitrag in die Skriptwerkstatt verschoben werden.

Dein Script-Snippet wird schon funktionieren. Aber der Lesbarkeit halber sollten Strichpunkte und geschweifte Klammern eingefügt werden. Und nicht dieselbe Variable für Bilder und Textrahmen verwenden:

Code
var myLinks = app.activeDocument.links; 
for (k = 0; k < myLinks.length; k++) {
myLinks[k].parent.parent.fit(FitOptions.frameToContent);
}

var myTxtFrames = app.activeDocument.textFrames;
for (k = 0; k < myTxtFrames.length; k++) {
myTxtFrames[k].fit(FitOptions.frameToContent);
}

Und bitte den "code"-Button verwenden, damit der Code so wie hier eingefasst wird: Code-Text auswählen und auf den Button klicken.

Gruss, Hans

InDesign mehrspaltige Textrahmen an Inhalt anpassen

freshling
Beiträge gesamt: 55

16. Aug 2012, 11:29
Bewertung:

gelesen: 8319

Beitrag als Lesezeichen
Hallo Hans,

entschuldige bitte.
Kann ich den Beitrag selbst verschieben?
Ansonsten fuehl dich bitte frei ihn unterzubringen, wo es sinn macht.
Das naechste mal schau' ich, dass ich den Thread in einen passenderen Bereich einordne. ;-)

Den Code-Button habe ich schlichtweg uebersehen.
Auch das, wird das naechste mal anders laufen.

InDesign mehrspaltige Textrahmen an Inhalt anpassen

Hans Haesler
  
Beiträge gesamt: 5826

16. Aug 2012, 11:42
Bewertung:

gelesen: 8301

Beitrag als Lesezeichen
Hallo Ben,

kein Problem, einem Frischling sieht man manches nach. :-)

Das Thema ist schon verschoben worden.
Nein, das hättest Du nicht selber besorgen können.
Da muss ein Moderator eingreifen.

Gruss, Hans

InDesign mehrspaltige Textrahmen an Inhalt anpassen

-hans-
Beiträge gesamt: 748

16. Aug 2012, 12:18
Bewertung:

gelesen: 8263

Beitrag als Lesezeichen
Hi,

als Ansatz:
Code
//verarbeitet ein- und mehrspaltige textrahmen 
//Vorsicht: NICHT GEEIGNET FÜR TEXTLAUF ÜBER MEHRERE TEXTRAHMEN

//absoluter Wert richtet sich nach Dokumentvoreinstellung ...
var minusStep = 5;
var plusStep = 0.5;

//Textrahmen des Dokumentes erfassen
var docTextFrames = app.activeDocument.textFrames;

//schleife durch die textrahmen
for(var i = 0; i < docTextFrames.length; i++){
getOverflowState(docTextFrames[i]);
}

//Textrahmenhöhe verarbeiten
function getOverflowState(aTextFrame){
var theOverflow = aTextFrame.overflows;
switch(theOverflow){
case false:
while(aTextFrame.overflows == false){
var theBounds = aTextFrame.visibleBounds;
aTextFrame.visibleBounds = [theBounds[0], theBounds[1], theBounds[2] - minusStep, theBounds[3]];
}
getOverflowState(aTextFrame);
break;
default: setTfHeight(aTextFrame);
break;
}

}


function setTfHeight(_tf){

while(_tf.overflows == true){
var tfBounds = _tf.visibleBounds;
_tf.visibleBounds = [tfBounds[0], tfBounds[1], tfBounds[2] + plusStep, tfBounds[3]];
}
}

Lieben Gruß

Hans-Gerd Claßen

InDesign mehrspaltige Textrahmen an Inhalt anpassen

freshling
Beiträge gesamt: 55

16. Aug 2012, 12:52
Bewertung:

gelesen: 8244

Beitrag als Lesezeichen
Hallo -hans-,

ich habe das grade mal ausprobiert.
Funktioniert leider nicht 100%.
(ich weiß, es war auch nur als Ansatz gedacht)

Mal zusammengefasst:

Das Script sollte im Prinzip alle Textrahmen im Dokument, also gleich ob normal, fortlaufend ueber mehrere Textrahmen, mehrspaltig usw. beruecksichtigen.
Ansonsten bleibt vllt auf Seite 317 ein Textfeld unberuecksichtigt, was dann nicht stimmt.

Ich hab mich ja bereits ein wenig schlau gemacht.
Evtl waere es eine Moeglichkeit ein Script einzubauen, das Text der ueber mehrere Textfelder fortlaufend angelegt ist, splitet und im Anschluss dann das Script greift, das mehrspaltige und normale Textfelder anpasst?!
Sry, falls das total daemlich ist. Ich kenne mich selbst leider zu schlecht aus.

InDesign mehrspaltige Textrahmen an Inhalt anpassen

-hans-
Beiträge gesamt: 748

16. Aug 2012, 13:23
Bewertung:

gelesen: 8218

Beitrag als Lesezeichen
Zitat mit dessen Hilfe ich mehrspaltige Textrahmen auf ca 500 Seiten automatisch an den Inhalt anpassen kann.


So war die Fragestellung ;-)

Nun, wenn auch berücksichtigt werden soll, dass ein Textlauf über mehrere Rahmen bearbeitet werden soll, dann braucht es dafür eine Regel. Z.B. nur der letzte Textrahmen in der Folge wird angepasst ...

Bin aber hier schon raus, habe gerade keine Zeit ...
Lieben Gruß

Hans-Gerd Claßen

InDesign mehrspaltige Textrahmen an Inhalt anpassen

freshling
Beiträge gesamt: 55

16. Aug 2012, 13:29
Bewertung:

gelesen: 8212

Beitrag als Lesezeichen
Das stimmt wohl, sry fuer den Nachtrag. ^^
Am Ende soll das gesamte Dokument, mit allen Textfeldern passen.

InDesign mehrspaltige Textrahmen an Inhalt anpassen

-hans-
Beiträge gesamt: 748

17. Aug 2012, 12:57
Bewertung:

gelesen: 8091

Beitrag als Lesezeichen
Guten Morgen,

für Textrahmen mit Textüberlauf über mehrere Textrahmen macht es keinen Sinn den 'overflow' abzufangen, da er ja normalerweise gewollt ist. Hier bietet es sich nur an, die Rahmenhöhe an die Position der untersten Unterlänge seiner Zeilen zu bringen.

Du brauchst eine Weiche:
Notation:
Code
if(someTexFrame.nextTextFrame === null)//= kein Textfortlauf über mehrere Rahmen 
{/*Übergabe an Funktion 01; obige!*/
}else{
/*Übergabe an Funktion 02*/
};


Bsp. für die Funktion 02:
Code
       function setHeightByBaseline(aTextFrame) 
{
var tmpArray = [];
for(var tc = 0; tc < aTextFrame.textColumns.length; tc++)
{
myColumn = aTextFrame.textColumns[tc];
tmpArray.push(myColumn.lines[-1].baseline)
}

tmpArray.sort(Numsort);
var actualTfBounds = aTextFrame.geometricBounds;
aTextFrame.geometricBounds = [actualTfBounds[0], actualTfBounds[1], tmpArray[tmpArray.length -1], actualTfBounds[3]]
}

function Numsort (a, b) {
return a - b;
}


Fröhliches Basteln :)
Lieben Gruß

Hans-Gerd Claßen

InDesign mehrspaltige Textrahmen an Inhalt anpassen

-hans-
Beiträge gesamt: 748

19. Aug 2012, 19:50
Bewertung:

gelesen: 7984

Beitrag als Lesezeichen
Ollah,

Script sollte alle Textrahmen in der Höhe auf vorhandene Textmenge anpassen.

Textrahmen ohnen Überlauf: Rahmenhöhe wird bei Bedarf solange vergrößert bis kein overflow mehr vorhanden; dann Y2 = Position unterste baseline

Textrahmen mit Überlauf: Y2 = Position unterste baseline

Sollte Y2 die Seitehöhe überschreiten, wird die Bearbeitung des Textrahmens abgebrochen (alert, log o.ä. möglich ...)

Einer von vielen möglichen Ansätzen:
Code
#target InDesign 

var plusStep = 10;

var docTextFrames = app.activeDocument.textFrames;
var maxHeight = app.activeDocument.documentPreferences.pageHeight;

for(var i = 0; i < docTextFrames.length; i++){
if(docTextFrames[i].nextTextFrame === null)//= kein Textfortlauf über weiteren Textrahmen
{
getOverflowState(docTextFrames[i]);
}else{
setHeightByBaseline(docTextFrames[i]);
};
}

//overflow prüfen
function getOverflowState(aTextFrame){
var theOverflow = aTextFrame.overflows;
switch(theOverflow){
case false:
setHeightByBaseline(aTextFrame);
break;
default: setTfHeight(aTextFrame);
break;
}

}


function setTfHeight(_tf){
while(_tf.overflows == true){
var tfBounds = _tf.geometricBounds;
if(tfBounds[2] >= maxHeight){return}
_tf.geometricBounds = [tfBounds[0], tfBounds[1], tfBounds[2] + plusStep, tfBounds[3]];
}
setHeightByBaseline(_tf);
}

function setHeightByBaseline(_tf01)
{
var tmpArray = [];
for(var tc = 0; tc < _tf01.textColumns.length; tc++)
{
myColumn = _tf01.textColumns[tc];
tmpArray.push(myColumn.lines[-1].baseline)
}

tmpArray.sort(Numsort);
var actualTfBounds = _tf01.geometricBounds;
_tf01.geometricBounds = [actualTfBounds[0], actualTfBounds[1], tmpArray[tmpArray.length -1], actualTfBounds[3]]
}

function Numsort (a, b) {
return a - b;
}


Hoffe es klappt :)
Lieben Gruß

Hans-Gerd Claßen

InDesign mehrspaltige Textrahmen an Inhalt anpassen

freshling
Beiträge gesamt: 55

20. Aug 2012, 11:58
Bewertung:

gelesen: 7898

Beitrag als Lesezeichen
Hey Hans,

ich danke dir vielmals fuer deine Hilfe!
Konnte mich leider das WE ueber nicht melden.

Dein letzter Beitrag funktioniert an und fuer sich echt gut. Das Problem ist allerdings, dass jetzt normale Textfelder nicht mehr beruecksichtigt werden.
Mein Versuch das hier:

Code
var myLinks = app.activeDocument.textFrames; 
for (k = 0; k < myLinks.length; k++)
myLinks[k].fit(FitOptions.frameToContent)

in deinen Code zu integrieren hat leider auch nicht funktioniert.
Ich spuere, wir naehern uns dem Ziel. :D

InDesign mehrspaltige Textrahmen an Inhalt anpassen

-hans-
Beiträge gesamt: 748

20. Aug 2012, 13:30
Bewertung:

gelesen: 7868

Beitrag als Lesezeichen
Hallo freshling,
das ist ein bisschen wie 'Stille Post' ;-).

Schießen wir nochmal einen ins Blaue (siehe Script unten), aber ansonsten wäre es sehr hilfreich ein Beispieldokument zu haben, oder eine wirklich genaue Beschreibung. Beispiel:
Zitat normale Textfelder

was beschreibt diese Aussage? Bin für jede Kritik offen ;-)


Zum Testen:
Code
#target InDesign  


//Die beiden Werte benutzen die Einheit die unter Linieleinheit vertikal eingetragen ist. Eventuell anpassen. Kann auch temporär per Script verändert werden ...
var plusStep = 3;
var minusStep = 0.5;

var docTextFrames = app.activeDocument.textFrames;
var maxHeight = app.activeDocument.documentPreferences.pageHeight;

for(var i = 0; i < docTextFrames.length; i++){
if(docTextFrames[i].nextTextFrame === null)//= kein Textfortlauf über weiteren Textrahmen
{
getOverflowState(docTextFrames[i]);
}else{
setHeightByBaseline(docTextFrames[i]);
};
}

function getOverflowState(aTextFrame){
var theOverflow = aTextFrame.overflows;
switch(theOverflow){
case false:
while(aTextFrame.overflows == false){
var theBounds = aTextFrame.geometricBounds;
aTextFrame.geometricBounds = [theBounds[0], theBounds[1], theBounds[2] - minusStep, theBounds[3]];
}
getOverflowState(aTextFrame);
break;
default: setTfHeight(aTextFrame);
break;
}

}


function setTfHeight(_tf){
while(_tf.overflows == true){
var tfBounds = _tf.geometricBounds;
if(tfBounds[2] >= maxHeight){return}
_tf.geometricBounds = [tfBounds[0], tfBounds[1], tfBounds[2] + plusStep, tfBounds[3]];
}
setHeightByBaseline(_tf);
}

function setHeightByBaseline(_tf01)
{
var tmpArray = [];
for(var tc = 0; tc < _tf01.textColumns.length; tc++)
{
myColumn = _tf01.textColumns[tc];
tmpArray.push(myColumn.lines[-1].baseline)
}

tmpArray.sort(Numsort);
var actualTfBounds = _tf01.geometricBounds;
_tf01.geometricBounds = [actualTfBounds[0], actualTfBounds[1], tmpArray[tmpArray.length -1], actualTfBounds[3]]
}

function Numsort (a, b) {
return a - b;
}

Lieben Gruß

Hans-Gerd Claßen

InDesign mehrspaltige Textrahmen an Inhalt anpassen

freshling
Beiträge gesamt: 55

20. Aug 2012, 13:49
Bewertung:

gelesen: 7857

Beitrag als Lesezeichen
Hallo Hans,

sry. Wenn ich "normales Textfeld" sage, meine ich ein stinknormales einspaltiges Textfeld.
Einspaltig und ohne Ueberfluss auf ein zweites Textfeld.

InDesign mehrspaltige Textrahmen an Inhalt anpassen

-hans-
Beiträge gesamt: 748

20. Aug 2012, 14:15
Bewertung:

gelesen: 2569

Beitrag als Lesezeichen
Hi,

kann ich hier nicht nachvollziehen. Da liegt noch irgend etwas anderes im Argen. Sind etwa auch verankerte Textrahmen im Dokument? Sind das diejenigen, die nicht angepasst werden?
Lieben Gruß

Hans-Gerd Claßen

InDesign mehrspaltige Textrahmen an Inhalt anpassen

freshling
Beiträge gesamt: 55

20. Aug 2012, 15:20
Bewertung:

gelesen: 2545

Beitrag als Lesezeichen
Problem geloest! :)

Ein anderes hat sich aufgetan.

Ich habe auf meiner Testseite ein Textfeld mit zentriertem Text.
Vor der Scriptanwendung hat das Feld eine Breite von 34 mm.
Danach 181 mm. Das Problem dabei ist nun, dass er den Mittelwert neu ausrichtet und sich der Text daher verschiebt.

Aufgefallen ist mir, dass die Seitenbreite von Hilfsrand zu Hilfsrand ebenfalls 181 mm beträgt? Kann das damit irgendwie zusammenhaengen?

InDesign mehrspaltige Textrahmen an Inhalt anpassen

-hans-
Beiträge gesamt: 748

20. Aug 2012, 15:46
Bewertung:

gelesen: 2530

Beitrag als Lesezeichen
Hi,

in der Breite wird nichts verändert. Lediglich der Y2-Wert der Bounds des Textrahmens - also die untere Rahmenkante.

Um einmal nachzuvollziehen was da wirklich vorliegt, müsste ich mal dieses Testdokument haben.
Lieben Gruß

Hans-Gerd Claßen

InDesign mehrspaltige Textrahmen an Inhalt anpassen

freshling
Beiträge gesamt: 55

20. Aug 2012, 15:59
Bewertung:

gelesen: 2516

Beitrag als Lesezeichen
Hmm.. wenn ich das Dokument rausgebe, muss mein Arbeitgeber eine Stellenanzeige aufgeben. ;-)

Ich kann morgen mal die Texte ersetzen und Bilder entfernen. Wenn du mir eine E-Mailadresse oder sowas gibst, schick ich es dir dann gerne. Heute habe ich leider keine Zeit mehr, da ich noch in eine Besprechung muss.

Danke vielmals fuer deine Hilfe!


sonnige Grueße,
Ben

InDesign mehrspaltige Textrahmen an Inhalt anpassen

freshling
Beiträge gesamt: 55

28. Aug 2012, 14:03
Bewertung:

gelesen: 2401

Beitrag als Lesezeichen
Jippy ! :D

Problem geloest. Hans hat's geschafft!

Vielen Dank euch allen fuer eure sehr kompetente Unterstuetzung!
Ich werde das Forum auf jedenfall weiter empfehlen! :-)

Noch eine abschliessende Frage:
Das Thema interessiert mich sehr und ich moechte mich nun mehr mit Java-Script auseinandersetzen.
Hierzu habe ich mich bereits nach Printlektuere umgesehen.
Vllt hat ja der ein oder andere noch einen ueberragenden Tip fuer Einsteiger?! ;-)

Nochmal, vielen Dank und eine erfolgreiche Woche.
Ben

InDesign mehrspaltige Textrahmen an Inhalt anpassen

-hans-
Beiträge gesamt: 748

29. Aug 2012, 08:09
Bewertung:

gelesen: 2351

Beitrag als Lesezeichen
Guten Morgen,

bestimmte Textrahmen hatten versch. Werte für die Breite in Textrahmenoptionen und Maßpalette. Ursache wohl die Updates des Dokumentes von CS3 auf CS4 (Dokumentchronik).
Nach Idml-Export schien das Dokument wieder sauber und alles funktionierte.

Hier der letzte Stand, vllt. braucht's noch mal jemand ... :
Code
#target InDesign  

//Die beiden Werte benutzen die Einheit die unter Linieleinheit vertikal eingetragen ist. Eventuell anpassen. Kann auch temporär per Script verändert werden ...
var plusStep = 3;
var minusStep = 0.5;

var docTextFrames = app.activeDocument.textFrames;
var maxHeight = app.activeDocument.documentPreferences.pageHeight;

for(var i = 0; i < docTextFrames.length; i++){
if(docTextFrames[i].texts[0].contents === '' && docTextFrames[i].overflows === false){continue;}//Textrahmen hat keinen Inhalt = wird übersprungen
docTextFrames[i].locked = false;
if(docTextFrames[i].nextTextFrame === null)//= kein Textfortlauf über weiteren Textrahmen
{
getOverflowState(docTextFrames[i]);
}else{
setHeightByBaseline(docTextFrames[i]);
};
}

function getOverflowState(aTextFrame){
var theOverflow = aTextFrame.overflows;
switch(theOverflow){
case false:
while(aTextFrame.overflows == false){
var theBounds = aTextFrame.geometricBounds;
aTextFrame.geometricBounds = [theBounds[0], theBounds[1], theBounds[2] - minusStep, theBounds[3]];
}
getOverflowState(aTextFrame);
break;
default: setTfHeight(aTextFrame);
break;
}

}


function setTfHeight(_tf){
while(_tf.overflows == true){
var tfBounds = _tf.geometricBounds;
if(tfBounds[2] >= maxHeight){return}
_tf.geometricBounds = [tfBounds[0], tfBounds[1], tfBounds[2] + plusStep, tfBounds[3]];
}
setHeightByBaseline(_tf);
}

function setHeightByBaseline(_tf01)
{
var tmpArray = [];
for(var tc = 0; tc < _tf01.textColumns.length; tc++)
{
myColumn = _tf01.textColumns[tc];
tmpArray.push(myColumn.lines[-1].baseline)
}

tmpArray.sort(Numsort);
var actualTfBounds = _tf01.geometricBounds;
_tf01.geometricBounds = [actualTfBounds[0], actualTfBounds[1], tmpArray[tmpArray.length -1], actualTfBounds[3]]
}

function Numsort (a, b) {
return a - b;
}

Lieben Gruß

Hans-Gerd Claßen

InDesign mehrspaltige Textrahmen an Inhalt anpassen

Hans Haesler
  
Beiträge gesamt: 5826

29. Aug 2012, 22:57
Bewertung:

gelesen: 2303

Beitrag als Lesezeichen
Hallo Ben,

Deine abschliessende Frage ist unbeantwortet geblieben.

In diesem Thema findest Du drei Links und Bewertungen:
http://www.hilfdirselbst.ch/..._P477223.html#477223

Gruss, Hans

InDesign mehrspaltige Textrahmen an Inhalt anpassen

freshling
Beiträge gesamt: 55

4. Sep 2012, 12:53
Bewertung:

gelesen: 2233

Beitrag als Lesezeichen
Vielen Dank!