Connect failed: Connection timed out

[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Textgröße an Textrahmen anpassen

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

Textgröße an Textrahmen anpassen

ikon
Beiträge gesamt: 18

1. Jun 2012, 13:12
Beitrag # 1 von 9
Bewertung:
(19772 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

ich würde gern via Skript die Größe eines Textes an dessen Textrahmen anpassen. Dabei müsste sich die Schriftgröße proportional anpassen, bis die Breite des Textes gleich der Textrahmenbreite ist. Der Text wird nur einzelig gesetzt.
Im Object Model Viewer habe ich keine Methode oder Eigenschaft gefunden, die auf eine ähnliche Funktionalität schließen lässt.

Hat jemand eine Idee, wie man das umsetzen kann?
Vielen Dank im Voraus!

Grüße
Dennis
X

Textgröße an Textrahmen anpassen

Gerald Singelmann
  
Beiträge gesamt: 6269

1. Jun 2012, 13:28
Beitrag # 2 von 9
Beitrag ID: #495883
Bewertung:
(19760 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Entweder den Text schrittweise größer machen, bis er im Überlauf landet und dann zurückrudern, bis er gerade eben nicht mehr im Überlauf ist.

Oder, wenn der Text immer einzeilig ist, Breite vom Textrahmen merken, xx.fit(FitOptions.FRAME_TO_CONTENT), dann wieder hoch-skalieren.


als Antwort auf: [#495882]

Textgröße an Textrahmen anpassen

ikon
Beiträge gesamt: 18

1. Jun 2012, 13:58
Beitrag # 3 von 9
Beitrag ID: #495887
Bewertung:
(19741 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Vielen Dank für die schnelle Antwort!

Antwort auf [ Gerald Singelmann ] Oder, wenn der Text immer einzeilig ist, Breite vom Textrahmen merken, xx.fit(FitOptions.FRAME_TO_CONTENT), dann wieder hoch-skalieren.


Die Variante gefällt mir ganz gut, ABER gibt es auch eine Möglichkeit die Unterlängen zu berücksichtigen? Der Textrahmen wird immer bis zur Grundlinie skaliert. Ich würde aber gern die Unterlängen noch im Textrahmen haben wollen.

Gruß
Dennis


als Antwort auf: [#495883]

Textgröße an Textrahmen anpassen

Gerald Singelmann
  
Beiträge gesamt: 6269

1. Jun 2012, 14:25
Beitrag # 4 von 9
Beitrag ID: #495889
Bewertung:
(19723 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Von Haus aus wüsste ich nicht.

Man kann natürlich ans Ende vom Textrahmen ein "p" einsetzen, das in Pfade umwandeln, die Koordinaten merken, das p löschen und dann nummerisch den Textrahmen verkleinern, statt ein .fit zu machen.
Dann müsste man aber auch drauf achten, dass für das "p" genug Platz ist.


als Antwort auf: [#495887]

Textgröße an Textrahmen anpassen

ikon
Beiträge gesamt: 18

1. Jun 2012, 14:33
Beitrag # 5 von 9
Beitrag ID: #495893
Bewertung:
(19719 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
An etwas Ähnliches hatte ich auch schon gedacht, es aber wieder verworfen, weil es doch recht umfangreich ist. Sollte mir noch eine Gedankenblitz kommen, werde ich die Lösung hier posten.

Gruß
Dennis


als Antwort auf: [#495889]

Textgröße an Textrahmen anpassen

JuMayr
Beiträge gesamt: 96

1. Jun 2012, 15:36
Beitrag # 6 von 9
Beitrag ID: #495897
Bewertung:
(19677 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ich bin mir nicht 100% sicher, ob ich dein Problem richtig verstanden habe. Mich hat etwas ähnliches geplagt.
Beim verkleinern einer Seite wurde zwar der Textrahmen verkleinert, nicht aber der darin enthaltene Text.

Nun gehe ich nach dem Verkleinern her und skalliere den Text so lange kleiner bis es keinen Überlauf mehr gibt.

Code
            //automatische Anpassung der Textgröße bei Überlauf in einem Textfeld 
var myDoc = spread.textFrames.everyItem().getElements();
var myStory;
var myRange;
var minimumSize = 2; // Fehlermeldung, wenn der Text zu klein wird;
var shrinkFactor = 0.95; // Skalierungsfaktor.
for (n=0; n<myDoc.length; n++){
myStory = myDoc[n];
try{
while(myStory.overflows){
for (i=0; i<myStory.textStyleRanges.length; i++){
myRange = myStory.textStyleRanges[i];
myRange.pointSize=myRange.pointSize*shrinkFactor;
if (myRange.pointSize<minimumSize){
throw ("Der Text wird zu klein, erzeugt aber immer noch einen Überlauf");
}
}
}
} catch(error){
alert("Da ist was schief gelaufen\r"+error);
}



als Antwort auf: [#495882]

Textgröße an Textrahmen anpassen

Gerald Singelmann
  
Beiträge gesamt: 6269

1. Jun 2012, 16:04
Beitrag # 7 von 9
Beitrag ID: #495900
Bewertung:
(19662 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Man könnte natürlich auch einfach pauschalisierend die Unterkante um ein Drittel der Punktgröße nach unten schieben.


als Antwort auf: [#495893]

Textgröße an Textrahmen anpassen

drerol74
Beiträge gesamt: 507

1. Jun 2012, 16:20
Beitrag # 8 von 9
Beitrag ID: #495902
Bewertung:
(19645 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Oder so etwas in der Art:

Code
#target InDesign 

var _tf = app.selection[0];
var _tfPointSizePT = _tf.paragraphs[0].pointSize;
var _tfPointSizeMM = _tfPointSizePT * 0.352778;

var _tfOriginalParagraphGrid = _tf.baselineFrameGridOptions.baselineFrameGridIncrement;

_tf.baselineFrameGridOptions.baselineFrameGridIncrement = _tfPointSizeMM;
_tf.paragraphs[0].alignToBaseline = true;
_tf.fit(FitOptions.FRAME_TO_CONTENT);
_tf.paragraphs[0].alignToBaseline = false;

_tf.baselineFrameGridOptions.baselineFrameGridIncrement = _tfOriginalParagraphGrid;


Hier hängt es davon ab, wie viel die Zeichen über die virtuelle Kegelhöhe hinausragen oder eben nicht.

Ich hatte mit so genau eingepassten Textrahmen mitunter aber auch schon Schwierigkeiten. Dann nämlich, wenn das Dokument unter einer anderen Arbeitsumgebung geöffnet wurde -> Ergebnis war Übersatztext.

Schöne Grüße
Roland


als Antwort auf: [#495893]

Textgröße an Textrahmen anpassen

ikon
Beiträge gesamt: 18

1. Jun 2012, 18:13
Beitrag # 9 von 9
Beitrag ID: #495909
Bewertung:
(19608 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf [ Gerald Singelmann ] Man könnte natürlich auch einfach pauschalisierend die Unterkante um ein Drittel der Punktgröße nach unten schieben.


Das kam mir auch sofort in den Sinn. Ich habe es dann wie folgt umgesetzt:
Code
var curDoc = app.activeDocument; 
var textBox = curDoc.pages[0].textFrames[0];
var targetTextBoxBounds = textBox.geometricBounds;

textBox.fit(FitOptions.FRAME_TO_CONTENT);

var minTextBoxBounds = textBox.geometricBounds;
var scaleFactor = (targetTextBoxBounds[3] - targetTextBoxBounds[1]) / (minTextBoxBounds[3] - minTextBoxBounds[1]);

textBox.verticalScale = textBox.verticalScale * scaleFactor;
textBox.horizontalScale = textBox.horizontalScale * scaleFactor;

var tempTextBoxBounds = textBox.geometricBounds;

textBox.geometricBounds = [targetTextBoxBounds[0],targetTextBoxBounds[1],tempTextBoxBounds[2]+((tempTextBoxBounds[2] - tempTextBoxBounds[0]) / 2.5),targetTextBoxBounds[3]];


Vielen Dank auch für die anderen Ansätze!

Grüße
Dennis


als Antwort auf: [#495900]
X