[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt InDesign mehrspaltige Textrahmen an Inhalt anpassen

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

InDesign mehrspaltige Textrahmen an Inhalt anpassen

freshling
Beiträge gesamt: 55

16. Aug 2012, 08:47
Beitrag # 1 von 23
Bewertung:
(8457 mal gelesen)
URL zum Beitrag
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)
X

InDesign mehrspaltige Textrahmen an Inhalt anpassen

Hans Haesler
  
Beiträge gesamt: 5826

16. Aug 2012, 09:24
Beitrag # 2 von 23
Beitrag ID: #499485
Bewertung:
(8430 mal gelesen)
URL zum Beitrag
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


als Antwort auf: [#499482]

InDesign mehrspaltige Textrahmen an Inhalt anpassen

freshling
Beiträge gesamt: 55

16. Aug 2012, 09:41
Beitrag # 3 von 23
Beitrag ID: #499488
Bewertung:
(8413 mal gelesen)
URL zum Beitrag
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)



als Antwort auf: [#499485]

InDesign mehrspaltige Textrahmen an Inhalt anpassen

Hans Haesler
  
Beiträge gesamt: 5826

16. Aug 2012, 10:21
Beitrag # 4 von 23
Beitrag ID: #499491
Bewertung:
(8377 mal gelesen)
URL zum Beitrag
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


als Antwort auf: [#499488]

InDesign mehrspaltige Textrahmen an Inhalt anpassen

freshling
Beiträge gesamt: 55

16. Aug 2012, 11:29
Beitrag # 5 von 23
Beitrag ID: #499500
Bewertung:
(8337 mal gelesen)
URL zum Beitrag
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.


als Antwort auf: [#499491]

InDesign mehrspaltige Textrahmen an Inhalt anpassen

Hans Haesler
  
Beiträge gesamt: 5826

16. Aug 2012, 11:42
Beitrag # 6 von 23
Beitrag ID: #499504
Bewertung:
(8319 mal gelesen)
URL zum Beitrag
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


als Antwort auf: [#499500]

InDesign mehrspaltige Textrahmen an Inhalt anpassen

-hans-
Beiträge gesamt: 748

16. Aug 2012, 12:18
Beitrag # 7 von 23
Beitrag ID: #499507
Bewertung:
(8281 mal gelesen)
URL zum Beitrag
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]];
}
}



als Antwort auf: [#499500]

InDesign mehrspaltige Textrahmen an Inhalt anpassen

freshling
Beiträge gesamt: 55

16. Aug 2012, 12:52
Beitrag # 8 von 23
Beitrag ID: #499509
Bewertung:
(8262 mal gelesen)
URL zum Beitrag
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.


als Antwort auf: [#499507]

InDesign mehrspaltige Textrahmen an Inhalt anpassen

-hans-
Beiträge gesamt: 748

16. Aug 2012, 13:23
Beitrag # 9 von 23
Beitrag ID: #499511
Bewertung:
(8236 mal gelesen)
URL zum Beitrag
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 ...


als Antwort auf: [#499509]

InDesign mehrspaltige Textrahmen an Inhalt anpassen

freshling
Beiträge gesamt: 55

16. Aug 2012, 13:29
Beitrag # 10 von 23
Beitrag ID: #499512
Bewertung:
(8230 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Das stimmt wohl, sry fuer den Nachtrag. ^^
Am Ende soll das gesamte Dokument, mit allen Textfeldern passen.


als Antwort auf: [#499511]

InDesign mehrspaltige Textrahmen an Inhalt anpassen

-hans-
Beiträge gesamt: 748

17. Aug 2012, 12:57
Beitrag # 11 von 23
Beitrag ID: #499571
Bewertung:
(8109 mal gelesen)
URL zum Beitrag
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 :)


als Antwort auf: [#499512]

InDesign mehrspaltige Textrahmen an Inhalt anpassen

-hans-
Beiträge gesamt: 748

19. Aug 2012, 19:50
Beitrag # 12 von 23
Beitrag ID: #499617
Bewertung:
(8002 mal gelesen)
URL zum Beitrag
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 :)


als Antwort auf: [#499512]

InDesign mehrspaltige Textrahmen an Inhalt anpassen

freshling
Beiträge gesamt: 55

20. Aug 2012, 11:58
Beitrag # 13 von 23
Beitrag ID: #499638
Bewertung:
(7916 mal gelesen)
URL zum Beitrag
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


als Antwort auf: [#499617]

InDesign mehrspaltige Textrahmen an Inhalt anpassen

-hans-
Beiträge gesamt: 748

20. Aug 2012, 13:30
Beitrag # 14 von 23
Beitrag ID: #499643
Bewertung:
(7886 mal gelesen)
URL zum Beitrag
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;
}



als Antwort auf: [#499638]

InDesign mehrspaltige Textrahmen an Inhalt anpassen

freshling
Beiträge gesamt: 55

20. Aug 2012, 13:49
Beitrag # 15 von 23
Beitrag ID: #499645
Bewertung:
(7875 mal gelesen)
URL zum Beitrag
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.


als Antwort auf: [#499643]
X