hilfdirselbst.ch
Facebook Twitter gamper-media

Forenindex » Programme » Print/Bildbearbeitung » Adobe InDesign » JavaScript für InDesign-Voreinstellungen

 



gdude1
Beiträge: 2

26. Jan 2006, 23:24

Beitrag #1 von 4
Bewertung:

(4940 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

JavaScript für InDesign-Voreinstellungen


Hallo Forum,

ich möchte gerne die Voreinstellungen (keine Dokumente geöffnet) von InDesign CS2 (MAC-Version) mittels JavaScript individuell einstellen können.
Meine Scripting-Kenntnisse sind rudimentär – daher hab ich bislang keinen rechten Erfolg. Als Unterlagen verwende ich den »InDesign CS2 Scripting Guide.pdf« und die » InDesign CS2 Scripting Reference.pdf«. Im Apple Scripteditor versuche ich eine Übersicht über die generelle Struktur zu erhalten.
Ich setze bisher auf dem »Setting application text defaults«-Beispielscript auf. Dabei machen schon die Eigenschaften der Sprache Probleme, wenn ich beispielsweise »Deutsch: Neue Rechtschr.« setzen will (ich weiß von G. Singelmann, dass beim Composer die Eigenschaften übersetzt wurden: »Adobe Ein-Zeilen-Setzer«). Wie kann ich z.B. die Einstellung der Sprache auslesen (myDoc.textDefaults.composer.name funktioniert nicht).
Auch würde ich gerne die Flächen- und Kontureigenschaften auf Keine setzen und die Konturstärke auf 0pt. Weiterhin wären als Beispiel in den Voreinstellungen »Zeilenabstand auf ganze Absätze anwenden« (aktivieren) und »Schriftvorschaugröße« (deaktivieren) interessant.
Generell ist mir auch die Struktur der verschiedenen Preferences (find, change, text default) nicht klar – dort findet sich auch immer die Option für den Composer. Gibt es irgendwo eventuell eine grafische Übersicht über das Objektmodell, auf der die einzelnen Abhängigkeiten erkennbar sind?

Kennt jemand Unterlagen, oder Scripte mit ähnlich gelagerten Inhalten, die mir weiterhelfen könnten?
Ein paar Tipps wären schön. Besten Dank im Voraus – beste Grüße
Gerhard

PS: Frage am Rande. Was bedeutet ^F beim Suchen in einem Script – wie ich es heute gesehen habe (^f steht beim Suchen/Ersetzen-Dialog für das Ausgleichsleerzeichen)?
Top

Martin Fischer  M  p
Beiträge: 9696

27. Jan 2006, 00:21

Beitrag #2 von 4
Beitrag ID: #207403

Bewertung:

(4929 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

JavaScript für InDesign-Voreinstellungen


> PS: Frage am Rande. Was bedeutet ^F beim Suchen in einem Script –

Ausprobieren.

Du solltest Dir dafür aber ein Dokument mit Fußnoten hernehmen. ;-)

Zum Rest morgen mehr.


Martin Fischer

Skripte für InDesign im Skriptarchiv von HilfDirSelbst.ch

als Antwort auf: [#207394] Top

Martin Fischer  M  p
Beiträge: 9696

27. Jan 2006, 09:33

Beitrag #3 von 4
Beitrag ID: #207426

Bewertung:

(4910 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

JavaScript für InDesign-Voreinstellungen


> Ich setze bisher auf dem »Setting application text defaults«-Beispielscript auf.
> Dabei machen schon die Eigenschaften der Sprache Probleme, wenn ich
> beispielsweise »Deutsch: Neue Rechtschr.« setzen will

Im Zweifelsfall formatierst Du einen Text mit den gewünschten Eigenschaften, wählst den Text aus und schreibst Dir ein Skript, das Dir die gewünschten Eigenschaften anzeigt.

Beispiel:
Erstelle Text, markiere ihn und weise ihm die Sprache "Neue dt. RS" zu.
Schreibe ein Skript, das die Auswahl (app.selection[0]) auswertet.

Du hast TEXT ausgewählt (es könnte auch ein einzelner Buchstabe CHARACTER oder Wort WORD oder Zeile LINE oder Absatz PARAGRAPH sein) also schau in der Referenz mal nach, was TEXT für Eigenschaften zu bieten hat, die möglicherweise etwas mit Sprache LANGUAGE zu tun haben. Unter LANGUAGE ist nichts zu finden. Aber es gibt eine Eigenschaft appliedLanguage. Also probieren wir's damit.

alert("Hello world") zeigt den string zwischen den Klammern in einer Message-Box an.

Code
alert(app.selection[0].appliedLanguage) 


-> [object LanguageWithVendors]
- Also noch keine Sprache, sondern ein Objekt.
- Nachschlagen in der Referenz.
- LanguageWithVendors hat die Eigenschaft NAME. Klingt vielversprechender als z.B. dictionaryPaths

Code
alert(app.selection[0].appliedLanguage.name) 


-> "German: Reformed"
Aha!
Sprache wechseln, neu ausprobieren ...
Hier ein Skript, das Dir alle installierten Sprachen in der Übersetzung ausgibt:
http://www.hilfdirselbst.ch/..._P195808.html#195808

Übrigens findest Du hier eine Übersicht über eine Auswahl von im Forum besprochenen Skripten: http://www.hilfdirselbst.org/indesign.php

Versuche nun über eine entsprechende Anpassung des obigen Skripts den Composer des markierten Texts ausgeben zu lassen.


> Auch würde ich gerne die Flächen- und Kontureigenschaften auf Keine setzen
> und die Konturstärke auf 0pt.

Ein Textrahmen TEXTFRAME hat z.B. Flächen- und Kontureigenschaften. Schlag mal unter dem Element TEXTFRAME nach und schau, was Dir dort an Eigenschaften geboten wird.
Alternativ kannst du die Eigenschaften auch über das ExtendScript Toolkit im Datenbrowser einsehen.


> Gibt es irgendwo eventuell eine grafische Übersicht über das Objektmodell,
> auf der die einzelnen Abhängigkeiten erkennbar sind?

Ich habe mir vor langer Zeit ein JS aus dem Adobe Scripting Forum gesichert, das ein entsprechendes Diagramm in ein InDesign Dokument zeichnet. Das Skript ist für InDesign CS geschrieben, ein spontaner Test in CS2 funktionierte aber auf Anhieb problemlos.


Code
//DiagramObjectModel.js  
//An InDesign CS JavaScript
//
//Draws simple block diagrams of the InDesign object model.
//
main();
function main(){
var myStringList = ["application", "document", "page", "story"];
var myObjectName = myDisplayDialog("", myStringList, "Object to Diagram:");
if(myObjectName !=""){
var myDocument = myMakeExampleDocument();
switch(myObjectName){
case "application":
myProperties = myGetProperties("app");
myExpandedObjectName = myDisplayDialog(myObjectName, myProperties, "Expand:");
myExpandedProperties = myGetProperties("app." + myExpandedObjectName)
break;
case "document":
myProperties = myGetProperties("app.activeDocument");
myExpandedObjectName = myDisplayDialog(myObjectName, myProperties, "Expand:");
myExpandedProperties = myGetProperties("app.activeDocument." + myExpandedObjectName)
break;
case "page":
myProperties = myGetProperties("app.activeDocument.pages.item(0)");
myExpandedObjectName = myDisplayDialog(myObjectName, myProperties, "Expand:");
myExpandedProperties = myGetProperties("app.activeDocument.pages.item(0)." + myExpandedObjectName)
break;
case "story":
myProperties = myGetProperties("app.activeDocument.stories.item(0)");
myExpandedObjectName = myDisplayDialog(myObjectName, myProperties, "Expand:");
myExpandedProperties = myGetProperties("app.activeDocument.stories.item(0)." + myExpandedObjectName)
break;
}
myDocument.close(SaveOptions.no);
myDiagramSetup(myObjectName, myProperties, myExpandedObjectName, myExpandedProperties);
alert("done!");
}
}
function myMakeExampleDocument(){
//Create an example document that contains a range of common items.
var myDocument = app.documents.add();
myDocument.viewPreferences.horizontalMeasurementUnits = MeasurementUnits.points;
myDocument.viewPreferences.verticalMeasurementUnits = MeasurementUnits.points;
myDocument.pages.item(0).textFrames.add(undefined, undefined, undefined, {geometricBounds:[0, 0, 792, 612], contents:TextFrameContents.placeholderText});
myDocument.pages.item(0).rectangles.add();
myDocument.pages.item(0).ovals.add();
myDocument.pages.item(0).graphicLines.add();
myDocument.pages.item(0).polygons.add();
myDocument.pages.item(0).guides.add();
//Create a group;
var myGroupItemA = myDocument.pages.item(0).rectangles.add();
var myGroupItemB = myDocument.pages.item(0).rectangles.add();
var myGroupItems = [myGroupItemA, myGroupItemB];
var myGroup = myDocument.pages.item(0).groups.add(myGroupItems);
//Copy the group and paste it inline.
myGroup.select();
app.copy();
app.select(myDocument.textFrames.item(0).insertionPoints.item(0));
app.paste();
//Add more inline objects.
myDocument.textFrames.item(0).insertionPoints.item(0).textFrames.add();
myDocument.textFrames.item(0).insertionPoints.item(0).textFrames.add();
myDocument.textFrames.item(0).insertionPoints.item(0).rectangles.add();
myDocument.textFrames.item(0).insertionPoints.item(0).ovals.add();
myDocument.textFrames.item(0).insertionPoints.item(0).graphicLines.add();
myDocument.textFrames.item(0).insertionPoints.item(0).polygons.add();
myDocument.textFrames.item(0).insertionPoints.item(0).tables.add();
return myDocument;
}
function myDisplayDialog(myObjectName, myStringList, myLabel){
var myDialog = app.dialogs.add({name:"Block Diagram"});
with(myDialog.dialogColumns.add()){
with(dialogRows.add()){
with(dialogColumns.add()){
staticTexts.add({staticLabel:myLabel});
}
with(dialogColumns.add()){
var myObjectNameDropdown = dropdowns.add({stringList:myStringList, selectedIndex:0});
}
}
}
var myResult = myDialog.show();
if(myResult == true){
myObjectName = myStringList[myObjectNameDropdown.selectedIndex];
}
else{
myObjectName = ""
}
myDialog.destroy();
return myObjectName;
}
function myDiagramSetup(myObjectName, myProperties, myExpandedObjectName, myExpandedProperties){
var myPageHeight;
var myParameters = myDiagramSetupDialog();
myColumnWidth = myParameters[0];
myColumnGutter = myParameters[1];
myRowHeight = myParameters[2];
myRowGutter = myParameters[3];
var myDocument = app.documents.add();
myDocument.viewPreferences.horizontalMeasurementUnits = MeasurementUnits.points;
myDocument.viewPreferences.verticalMeasurementUnits = MeasurementUnits.points;
var myPage = myDocument.pages.item(0);
var myPageMargins = myPage.marginPreferences;
myPageMargins.left = 36;
myPageMargins.right = 36;
myPageMargins.top = 36;
myPageMargins.bottom = 36;
//Base the page height on the larger of the two arrays.
if(myProperties.length >= myExpandedProperties.length){
myPageHeight = (((myRowHeight + myRowGutter)* myProperties.length)-myRowGutter)+72;
}
else{
myPageHeight = (((myRowHeight + myRowGutter)* myExpandedProperties.length)-myRowGutter)+72;
}
var myPageWidth = (((myColumnWidth + myColumnGutter)*3) - myColumnGutter)+72;
myDocument.documentPreferences.pageHeight = myPageHeight;
myDocument.documentPreferences.pageWidth = myPageWidth;
myDrawDiagram(myDocument, myObjectName, myProperties, myExpandedObjectName, myExpandedProperties);
}
function myDiagramSetupDialog(){
var myLabelWidth = 120;
var myDialog = app.dialogs.add({name:"Diagram Setup", canCancel:false});
with(myDialog.dialogColumns.add()){
with(dialogRows.add()){
with(dialogColumns.add()){
staticTexts.add({staticLabel:"Column Width:", minWidth:myLabelWidth});
}
with(dialogColumns.add()){
var myColumnWidthField = measurementEditboxes.add({editValue:144, editUnits:MeasurementUnits.points});
}
}
with(dialogRows.add()){
with(dialogColumns.add()){
staticTexts.add({staticLabel:"Column Gutter:", minWidth:myLabelWidth});
}
with(dialogColumns.add()){
var myColumnGutterField = measurementEditboxes.add({editValue:24, editUnits:MeasurementUnits.points});
}
}
with(dialogRows.add()){
with(dialogColumns.add()){
staticTexts.add({staticLabel:"Row Height:", minWidth:myLabelWidth});
}
with(dialogColumns.add()){
var myRowHeightField = measurementEditboxes.add({editValue:12, editUnits:MeasurementUnits.points});
}
}
with(dialogRows.add()){
with(dialogColumns.add()){
staticTexts.add({staticLabel:"Row Gutter:", minWidth:myLabelWidth});
}
with(dialogColumns.add()){
var myRowGutterField = measurementEditboxes.add({editValue:6, editUnits:MeasurementUnits.points});
}
}
}
myDialog.show();
var myColumnWidth = myColumnWidthField.editValue;
var myColumnGutter = myColumnGutterField.editValue;
var myRowHeight = myRowHeightField.editValue;
var myRowGutter = myRowGutterField.editValue;
myDialog.destroy();
return [myColumnWidth, myColumnGutter, myRowHeight, myRowGutter];
}
function myGetProperties(myObjectName){
var myPropertyArray = new Array;
for(myProperty in eval(myObjectName)){
myPropertyArray.push(myProperty);
}
return myPropertyArray.sort();
}
function myDrawDiagram(myDocument, myObjectName, myProperties, myExpandedObjectName, myExandedProperties){
var myX1 = 36;
var myY1 = 36;
var myX2 = myX1 + myColumnWidth;
var myY2 = myY1 + myRowHeight;
try{
myDiagramStyle = myDocument.paragraphStyles.item("diagram");
myDiagramStyle.name;
}
catch (myError){
myDiagramStyle = myDocument.paragraphStyles.add({name:"diagram", pointSize:8, justification:Justification.centerAlign});
}
//Column One:
myTextFrame = myDocument.pages.item(0).textFrames.add(undefined, undefined, undefined, {geometricBounds:[myY1, myX1, myY2, myX2], contents:myObjectName, strokeColor:myDocument.colors.item("Black"), strokeWeight:.5});
myTextFrame.parentStory.texts.item(0).applyStyle(myDiagramStyle, true);
myTextFrame.textFramePreferences.verticalJustification = VerticalJustification.centerAlign;
//Column Two
myDrawColumn(myDocument, myProperties, myDiagramStyle, myTextFrame, 2, myColumnWidth, myColumnGutter, myRowHeight, myRowGutter);
//Column Three
myTextFrame = myDocument.pages.item(0).textFrames.item(myExpandedObjectName);
myDrawColumn(myDocument, myExpandedProperties, myDiagramStyle, myTextFrame, 3, myColumnWidth, myColumnGutter, myRowHeight, myRowGutter);
}
function myDrawColumn(myDocument, myProperties, myDiagramStyle, myParentBox, myColumnNumber, myColumnWidth, myColumnGutter, myRowHeight, myRowGutter){
var myCY2;
var myParentBounds = myParentBox.geometricBounds;
var myBlackSwatch = myDocument.colors.item("Black");
myX1 = myParentBounds[3] + myColumnGutter;
myX2 = myX1 + myColumnWidth;
var myConnector = myDocument.pages.item(0).graphicLines.add(undefined, undefined, undefined, {strokeWeight:.5});
switch(myColumnNumber){
case 2:
myY1 = myParentBounds[0];
break;
case 3:
if(myParentBounds[0]-(((myRowHeight + myRowGutter)*myProperties.length)/2) < 36){
myY1 = 36;
}
else{
if(myProperties.length == 1){
myY1 = myParentBounds[0];
}
else{
myY1 = myParentBounds[0]-((myRowHeight + myRowGutter)*(myProperties.length/2));
}
}
break;
}
myY2 = myY1 + myRowHeight;
var myCX1 = myParentBounds[3];
var myCY1 = myParentBounds[0]+(myRowHeight/2);
var myCX2 = myParentBounds[3] + (myColumnGutter/2);
var myCX3 = myParentBounds[3] + myColumnGutter;
for(var myCounter = 0; myCounter < myProperties.length; myCounter ++){
var myTextFrame = myDocument.pages.item(0).textFrames.add(undefined, undefined, undefined, {geometricBounds:[myY1, myX1, myY2, myX2], contents:myProperties[myCounter], strokeColor:myBlackSwatch, strokeWeight:.5});
myTextFrame.parentStory.texts.item(0).applyStyle(myDiagramStyle, true);
myTextFrame.label = myProperties[myCounter];
myTextFrame.textFramePreferences.verticalJustification = VerticalJustification.centerAlign;
myCY2 = myY1 + ((myY2-myY1)/2);
if(myCounter != 0){
myConnector.paths.add();
}
myConnector.paths.item(-1).entirePath = [[myCX1, myCY1], [myCX2, myCY1], [myCX2, myCY2], [myCX3, myCY2]];
myY1 = myY1 + myRowHeight + myRowGutter;
myY2 = myY1 + myRowHeight;
}
}


Für Windows gibt's noch den ObjectBrowser von Teus de Jong (/InDesign Utilities/Object browser): http://www.teusdejong.nl/

Dort findest Du auch weitere Skriptbeispiele.

Eine großartige Sammlung an Skripten und Routinen mit (englischsprachiger) Dokumentation findest Du bei Dave Saunders:
1. http://jsid.blogspot.com/
2. http://www.pdsassoc.com/index.php

Schließlich lohnt sich die Beteiligung im Adobe InDesign Scripting Forum: http://www.adobeforums.com/...in/webx?14@@.eea52bc


Martin Fischer

Skripte für InDesign im Skriptarchiv von HilfDirSelbst.ch

als Antwort auf: [#207394] Top

gdude1
Beiträge: 2

27. Jan 2006, 12:19

Beitrag #4 von 4
Beitrag ID: #207481

Bewertung:

(4893 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

JavaScript für InDesign-Voreinstellungen


Hallo Martin,

am Wochenende habe ich Zeit, den Einzelheiten nachzugehen. Sollten mir noch Dinge unklar sein, wende ich mich nochmals gerne an dich. Einstweilen herzlichen Dank für deine Infos.

Gerhard

als Antwort auf: [#207426] Top


Forenindex » Programme » Print/Bildbearbeitung » Adobe InDesign » JavaScript für InDesign-Voreinstellungen


^