hilfdirselbst.ch
Facebook Twitter gamper-media

Forenindex » Programme » Print/Bildbearbeitung » Adobe InDesign » Tabellenbreite proportional skalieren

 



Gerald Singelmann  M  p
Beiträge: 5750

11. Sep 2007, 19:13

Beitrag #1 von 10
Bewertung:

(9130 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Tabellenbreite proportional skalieren


Das Script habe ich grade für eine (eigentlich unsympatische) Anfrage im englischen Forum erstellt.
War eh halb fertig ;)
Ich, nicht das Script.
Das war dreiviertelfertig.
Jetzt ist es ganz fertig.

Also dachte ich, hier hat vielleicht auch einer Freude daran:
Es rechnet die Breite einer Tabelle aus (ohne Konturen am Rand) und zeigt diese in einem Dialog an, so dass ich eine neue Breite eingeben kann. Alle Spalten werden dann proportional verbreitert oder -schmälert, um die neue Breite zu erreichen.

Code
tell application "Adobe InDesign CS3" 
set ms to selection
set aTable to parent of item 1 of ms
if class of aTable ? table then
set aTable to parent of aTable
if class of aTable ? table then
display dialog "no table selected"
return
end if
end if

set nC to count columns in aTable
set tWidth to 0.0
repeat with n from 1 to nC
set aWidth to (width of (column n of aTable))
set tWidth to tWidth + aWidth
end repeat

set myDialog to make dialog with properties {name:"Set Width of Table"}
tell myDialog
make dialog column
tell the result
set tNuWidth to make measurement editbox with properties {edit value:(tWidth * 2.83465), edit units:millimeters}
end tell
end tell
set nu to show myDialog
if nu is true then
set nuWidth to (edit value of tNuWidth) * 0.35278
set scaleClm to nuWidth / tWidth
repeat with n from 1 to nC
set aWidth to (width of (column n of aTable))
set width of column n of aTable to (scaleClm * aWidth)
end repeat
else
destroy myDialog
return
end if
end tell


Mit freundlichem Gruß
Gerald Singelmann

--------------------------
Alles rund um InDesign und Automatisierung für Profis
http://www.cuppascript.com
Top

pixxxelschubser p
Beiträge: 1121

11. Sep 2007, 19:35

Beitrag #2 von 10
Beitrag ID: #312041

Bewertung:

(9115 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Tabellenbreite proportional skalieren


Hallo Gerald,

jedesmal, wenn ich Deine netten Apple-Scripte sehe, bin ich fast versucht, Dir einen PC zu schenken.

Wink

P.S. Könntest Du nicht ein Übersetzungsscript von Apple- nach Java-Script schreiben?
Ich glaube, damit würdest Du hier einige Leute überglücklich machen.

(ist nicht ganz ernst gemeint)


viele Grüße
pixxxelschubser




Was wir wissen, ist ein Tropfen; was wir nicht wissen, ein Ozean.

Isaac Newton



als Antwort auf: [#312034] Top

Gerald Singelmann  M  p
Beiträge: 5750

11. Sep 2007, 19:57

Beitrag #3 von 10
Beitrag ID: #312052

Bewertung:

(9103 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Tabellenbreite proportional skalieren


Ok, ich hab Martin eh versprochen, irgendwann mal JavaScript zu lernen...

Code
bGoOn = true; 
aTable = app.selection[0];
if (aTable.constructor.name != "Table") {
aTable = aTable.parent;
if (aTable.constructor.name != "Table") {
aTable = aTable.parent;
if (aTable.constructor.name != "Table") {
alert("Es muss ein Text in einer Zelle markiert sein");
bGoOn = false;
}
}
}
if (bGoOn) {
nc = aTable.columns.length;
tWidth = 0.0;
for (n=0; n < nc; n++) {
tWidth += aTable.columns[n].width;
}
var myDialog = app.dialogs.add({name:"Tabellenbreite"});
with(myDialog.dialogColumns.add()){
var nuWidthField = measurementEditboxes.add({editValue:(2.83465 * tWidth), editUnits:MeasurementUnits.millimeters, smallNudge:0.5});
}
var myResult = myDialog.show();
if(myResult == true){
var nuWidth = nuWidthField.editValue * 0.35278;
myDialog.destroy();
scaleClm = nuWidth / tWidth;
for (n=0; n < nc; n++) {
aTable.columns[n].width = scaleClm * aTable.columns[n].width;
}
}
else{
myDialog.destroy();
}
}


Mit freundlichem Gruß
Gerald Singelmann

--------------------------
Alles rund um InDesign und Automatisierung für Profis
http://www.cuppascript.com

als Antwort auf: [#312041] Top

pixxxelschubser p
Beiträge: 1121

11. Sep 2007, 20:13

Beitrag #4 von 10
Beitrag ID: #312057

Bewertung:

(9093 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Tabellenbreite proportional skalieren


Na wenn Du es versprochen hast …

Hab ichs dafür gleich mal ausprobiert, und läuft sauber durch.
(auf CS2 getestet)
Smile

Kannst Du mir bitte nur eins kurz erklären, ohne dass ich die Referenzen durchwühlen muß: Wann wird die Datei als js und wann als jsx bezeichnet?


viele Grüße
pixxxelschubser




Was wir wissen, ist ein Tropfen; was wir nicht wissen, ein Ozean.

Isaac Newton



als Antwort auf: [#312041] Top

Gerald Singelmann  M  p
Beiträge: 5750

11. Sep 2007, 20:15

Beitrag #5 von 10
Beitrag ID: #312058

Bewertung:

(9092 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Tabellenbreite proportional skalieren


jsx wurde mit CS2 eingeführt, um klar zu machen, dass es sich nicht um ein Kraut-und-Rüben-Internet JavaScript handelt, sondern der aufgebohrten InDesign Geschmacksrichtung zugehört.

Mit freundlichem Gruß
Gerald Singelmann

--------------------------
Alles rund um InDesign und Automatisierung für Profis
http://www.cuppascript.com

als Antwort auf: [#312057] Top

Martin Fischer  M  p
Beiträge: 9425

11. Sep 2007, 20:23

Beitrag #6 von 10
Beitrag ID: #312060

Bewertung:

(9089 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Tabellenbreite proportional skalieren


Lieber Gerald,

> Ok, ich hab Martin eh versprochen, irgendwann mal JavaScript zu lernen...

Jetzt bin ich sprachlos.
Wie schaffst Du das bloß neben all den anderen Dingen, die Dich gerade beschäftigen?
Oder integrierst Du heimlich? ;-)


Martin Fischer

Skripte für InDesign im Skriptarchiv von HilfDirSelbst.ch

als Antwort auf: [#312052] Top

Gerald Singelmann  M  p
Beiträge: 5750

11. Sep 2007, 20:35

Beitrag #7 von 10
Beitrag ID: #312062

Bewertung:

(9080 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Tabellenbreite proportional skalieren


Zitat Wie schaffst Du das bloß neben all den anderen Dingen, die Dich gerade beschäftigen?


Gerade deswegen ging das. Der größte Bonuspunkt an dem Kapitel für mich ist, das klar wird, wie parallel die Konzepte in AppleScript und JavaScript laufen. Kannste das eine, kannste auch das andere, sobaldste dich an die Syntax gewöhnt hast.
Von Ausnahmen (zb. split / join vs. AppleScript's text item delimiters (wer hat sich bloss den namen ausgedacht?)) mal abgesehen.

Mit freundlichem Gruß
Gerald Singelmann

--------------------------
Alles rund um InDesign und Automatisierung für Profis
http://www.cuppascript.com

als Antwort auf: [#312060] Top

EssWeh S
Beiträge: 486

12. Sep 2007, 11:34

Beitrag #8 von 10
Beitrag ID: #312129

Bewertung:

(9015 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Tabellenbreite proportional skalieren


Geil!
Also - das Script ...!

Und Freude macht es auch. ; - P


Schönen Gruß aus Mainz NullFümpf ... 8 - P
Stefan

als Antwort auf: [#312062]

(Dieser Beitrag wurde von EssWeh am 12. Sep 2007, 11:41 geändert)
Top

Martin Fischer  M  p
Beiträge: 9425

17. Sep 2007, 09:25

Beitrag #9 von 10
Beitrag ID: #312803

Bewertung:

(8958 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Tabellenbreite proportional skalieren


Hallo Gerald,

aus aktuellem Anlaß (weil ich's grad selbst so brauche), habe ich in Deinem Skript eine kleine Modifikation gemacht:

Wenn die Tabelle in einem Textrahmen platziert ist, wird im Dialogfeld die Breite des Textrahmens als Ziel für die Gesamtbreite der Tabelle vorgeschlagen.

Andernfalls (z.B. wenn die Tabelle in einer Tabellenzelle platziert ist) wird weiterhin, wie in Deinem Skript, die aktuelle Tabellenbreite eingeblendet.

Code
bGoOn = true; 
aTable = app.selection[0];
if (aTable.constructor.name != "Table") {
aTable = aTable.parent;
if (aTable.constructor.name != "Table") {
aTable = aTable.parent;
if (aTable.constructor.name != "Table") {
alert("Es muss ein Text in einer Zelle markiert sein");
bGoOn = false;
}
}
}
if (bGoOn) {
nc = aTable.columns.length;
tWidth = 0.0;
for (n=0; n < nc; n++) {
tWidth += aTable.columns[n].width;
}
// die Tabelle befindet sich in einem Textrahmen
if (aTable.parent.constructor.name == "TextFrame") {
tfBounds = aTable.parent.geometricBounds;
// vorgeschlagener Wert für die Gesamtbreite der Tabelle = Breite des Textrahmens
myValue = tfBounds[3] - tfBounds[1];
}
else {
// vorgeschlagener Wert für die Gesamtbreite der Tabelle = aktuelle Tabellenbreite
myValue = tWidth;
}
var myDialog = app.dialogs.add({name:"Tabellenbreite"});
with(myDialog.dialogColumns.add()){
var nuWidthField = measurementEditboxes.add({editValue:(2.83465 * myValue), editUnits:MeasurementUnits.millimeters, smallNudge:0.5});
}

var myResult = myDialog.show();
if(myResult == true){
var nuWidth = nuWidthField.editValue * 0.35278;
myDialog.destroy();
scaleClm = nuWidth / tWidth;
for (n=0; n < nc; n++) {
aTable.columns[n].width = scaleClm * aTable.columns[n].width;
}
}
else{
myDialog.destroy();
}
}



Martin Fischer

Skripte für InDesign im Skriptarchiv von HilfDirSelbst.ch

als Antwort auf: [#312052] Top

irbis p
Beiträge: 19

17. Mär 2011, 15:57

Beitrag #10 von 10
Beitrag ID: #467227

Bewertung:

(1704 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Tabellenbreite proportional skalieren


Hallo zusammen,
das Skript läuft super (CS3)! Ich suche eine Möglichkeit, auf dieser Basis ALLE Tabellen in einem Fließtext auf eine vorher definierte Breite (die auch ohne Auswahldialog fest im Skript hinterlegt sein könnte) einheitlich proportional zu skalieren. Wenn es einfacher ist, könnte die Breite für die Tabellen auch die Breite des Fließtextrahmens sein. Wie müsste euer Skript dann erweitert werden?

Für eure Antwort und Hilfe vorab vielen Dank!
Irbis

als Antwort auf: [#312034] Top


Forenindex » Programme » Print/Bildbearbeitung » Adobe InDesign » Tabellenbreite proportional skalieren


^