[GastForen Programme Print/Bildbearbeitung Adobe InDesign Script: Rahmen verschieben/vergroessern

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

Script: Rahmen verschieben/vergroessern

mel_123
Beiträge gesamt: 104

7. Jun 2006, 11:17
Beitrag # 1 von 21
Bewertung:
(9426 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Alle,

ich bastle gerade an einem Script, das mir Rahmenkonturen ändern soll. (Hintergrund: Bei der Konvertierung von Quark-Stehsatz werden die ursprünglich nach innen ausgerichteten Konturen mittig erstellt. Damit's wieder passt verschiebt und verkleinert InDesign den Rahmen.) Das Script soll folgendes tun:

1. Die Konturenausrichtung von "mittig" auf "nach innen" umstellen

2.1. Den Ursprung des Rahmens auf die linke obere Ecke setzen
2.2. Den Rahmen um die Hälfte der Konturenstärke nach links und nach oben versetzen
2.3. Die Breite und die Höhe um die Konturenstärke erhöhen

Von Martin hier aus dem Forum habe ich schon folgendes gefunden:

/Kontur nach innen ausrichten
//1. Textrahmen
app.documents[0].textFrames.everyItem().strokeAlignment = StrokeAlignment.insideAlignment;
//2. Rechtecke
app.documents[0].rectangles.everyItem().strokeAlignment = StrokeAlignment.insideAlignment;
//3. Ovale
app.documents[0].ovals.everyItem().strokeAlignment = StrokeAlignment.insideAlignment;

Teil 1 ist also schon erledigt. Kann mir jemand bei Teil 2 helfen?

Vielen Dank fuer Eure Tipps

Melanie
X

Script: Rahmen verschieben/vergroessern

zaphodbeeblebroxx
Beiträge gesamt: 408

7. Jun 2006, 12:14
Beitrag # 2 von 21
Beitrag ID: #233244
Bewertung:
(9413 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
 
Hallo Melanie,

ist in Deinen Dokumenten die Option "Abmessungen enthalten Konturstärke" aktiviert oder deaktiviert?

Vielleicht mal die Option aktivieren bzw deaktivieren bevor Du die 3 Skriptzeilen auf Dein Dokument anwendest.

Zaphodbeeblebroxx


als Antwort auf: [#233225]

Script: Rahmen verschieben/vergroessern

mel_123
Beiträge gesamt: 104

7. Jun 2006, 12:26
Beitrag # 3 von 21
Beitrag ID: #233249
Bewertung:
(9411 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Zaphodbeeblebroxx,

danke fuer den Tipp. Diese Idee hatte ich auch - allerdings hat diese Option keine Auswirkungen auf den Rahmen, sondern nur darauf, welche Koordinaten in der Steuerungspalette angezeigt werden. Hat ein Rahmen die Konturenstärke 1 mm, mittig ausgerichtet, werden mit der eingeschalteten Option die Koordinaten 0/0 angezeigt, bei ausgeschalteter Option 0,5/0,5. Wenn die Ausrichtung dann nach innen umgestellt wird, bleibt der Rahmen stehen und es werden in beiden Faellen 0,5/0,5 angezeigt (ist ja auch korrekt).

Hat sich jemand schon mal scriptmaessig damit befasst? Waere toll :-)

Dankeschoen

Melanie


als Antwort auf: [#233244]

Script: Rahmen verschieben/vergroessern

zaphodbeeblebroxx
Beiträge gesamt: 408

7. Jun 2006, 14:33
Beitrag # 4 von 21
Beitrag ID: #233295
Bewertung:
(9396 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Melanie,

vielleicht geht's damit (die Objekte, die geändert werden sollen im Dokument markieren!):

Code
//MoveObjectStrokeWidth.jsx   
//
// Dokument geöffnet?
if (app.documents.length != 0){
}
else{
alert("Kein Dokument geöffnet. Bitte ein Dokument öffnen und die jeweiligen Bilder auswählen.");
exit();
}
//
var myDoc = app.documents[0];
app.documents[0].textFrames.everyItem().strokeAlignment = StrokeAlignment.insideAlignment;
app.documents[0].rectangles.everyItem().strokeAlignment = StrokeAlignment.insideAlignment;
app.documents[0].ovals.everyItem().strokeAlignment = StrokeAlignment.insideAlignment;
//Save the current measurement units.
var myOldXUnits = myDoc.viewPreferences.horizontalMeasurementUnits;
var myOldYUnits = myDoc.viewPreferences.verticalMeasurementUnits;
//Set the measurement units to ponits.
myDoc.viewPreferences.horizontalMeasurementUnits = MeasurementUnits.points;
myDoc.viewPreferences.verticalMeasurementUnits = MeasurementUnits.points;
//
var myObjects = app.selection;
for (oneItem = 0; oneItem < myObjects.length; oneItem++)
{
if ((myObjects[oneItem].constructor.name == "TextFrame") || (myObjects[oneItem].constructor.name == "Rectangle") || (myObjects[oneItem].constructor.name == "Oval")){
var myGeoBounds = myObjects[oneItem].geometricBounds;
var myStrokeWeight = myObjects[oneItem].strokeWeight;
myObjects[oneItem].geometricBounds = [myGeoBounds[0], myGeoBounds[1], myGeoBounds[2] - myStrokeWeight, myGeoBounds[3] + - myStrokeWeight];

}
}
//Set the original measurement units.
myDoc.viewPreferences.horizontalMeasurementUnits = myOldXUnits;
myDoc.viewPreferences.verticalMeasurementUnits = myOldYUnits;




zaphodbeeblebroxx


als Antwort auf: [#233249]
(Dieser Beitrag wurde von zaphodbeeblebroxx am 7. Jun 2006, 14:58 geändert)

Script: Rahmen verschieben/vergroessern

mel_123
Beiträge gesamt: 104

7. Jun 2006, 15:51
Beitrag # 5 von 21
Beitrag ID: #233327
Bewertung:
(9382 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Zaphodbeeblebroxx,

vielen Dank, das wird mir weiterhelfen. Ich habe Dein Script ein wenig modifiziert, x-y-Koordinaten minus halber Linienstaerke und Breite/Hoehe plus ganze Linienstaerke. Jetzt brauche ich nur noch eins: Einen Tipp, wie ich das Script aendern muss, damit alle Objekte (nicht nur die markierten) verschoben/vergroessert werden.

nochmals ein grosses Dankeschoen and Dich

Melanie



Code
 
var myObjects = app.selection;
for (oneItem = 0; oneItem < myObjects.length; oneItem++)
{
if ((myObjects[oneItem].constructor.name == "TextFrame") || (myObjects[oneItem].constructor.name == "Rectangle") || (myObjects[oneItem].constructor.name == "Oval")){
var myGeoBounds = myObjects[oneItem].geometricBounds;
var myStrokeWeight = myObjects[oneItem].strokeWeight;
myObjects[oneItem].geometricBounds = [myGeoBounds[0] - myStrokeWeight/2, myGeoBounds[1] - myStrokeWeight/2, myGeoBounds[2] + myStrokeWeight, myGeoBounds[3] + myStrokeWeight];

}
}

...



als Antwort auf: [#233295]

Script: Rahmen verschieben/vergroessern

zaphodbeeblebroxx
Beiträge gesamt: 408

7. Jun 2006, 16:34
Beitrag # 6 von 21
Beitrag ID: #233347
Bewertung:
(9375 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Melanie,

mit den Änderungen, die Du im Skript gemacht hast, wird beim mir ein Objekt (mit Konur mittig) nach Ausführung des Skripts (danach Kontur innen) um eine Linienbreite größer als das Ausgangsobjekt. Die x,y-Position bleibt gleich.
Ist das so beabsichtigt?

Alle Objekte auf allen Seiten ändern (Textframe, Rectangle, Oval) - Zeile 22 ändern in:

Code
var myObjects = app.documents[0].allPageItems; 


zaphodbeeblebroxx


als Antwort auf: [#233327]
(Dieser Beitrag wurde von zaphodbeeblebroxx am 7. Jun 2006, 16:49 geändert)

Script: Rahmen verschieben/vergroessern

mel_123
Beiträge gesamt: 104

7. Jun 2006, 16:52
Beitrag # 7 von 21
Beitrag ID: #233351
Bewertung:
(9371 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo zaphodbeeblebroxx,

ha, welch guter Hinweis :-) Du hast Recht. Auch die Koordinate rechts unten darf nur um die halbe Linienstaerke versetzt werden. Dankeschoen.

Dass der Rahmen an der gleichen Stelle gleich gross bleiben soll, ist beabsichtigt. Optisch soll sich ja nichts aendern, nur die Kontur soll anstatt mittig, nach innen ausgerichtet werden.

Vielen Dank fuer Deine Unterstuetzung, das ist wirklich toll.

Melanie



Code
 
var myObjects = app.documents[0].allPageItems;for (oneItem = 0; oneItem < myObjects.length; oneItem++)
{
if ((myObjects[oneItem].constructor.name == "TextFrame") || (myObjects[oneItem].constructor.name == "Rectangle") || (myObjects[oneItem].constructor.name == "Oval")){
var myGeoBounds = myObjects[oneItem].geometricBounds;
var myStrokeWeight = myObjects[oneItem].strokeWeight;
myObjects[oneItem].geometricBounds = [myGeoBounds[0] - myStrokeWeight/2, myGeoBounds[1] - myStrokeWeight/2, myGeoBounds[2] + myStrokeWeight/2, myGeoBounds[3] + myStrokeWeight/2];

}
}



als Antwort auf: [#233347]
(Dieser Beitrag wurde von mel_123 am 7. Jun 2006, 17:05 geändert)

Script: Rahmen verschieben/vergroessern

mel_123
Beiträge gesamt: 104

7. Jun 2006, 17:16
Beitrag # 8 von 21
Beitrag ID: #233353
Bewertung:
(9365 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo zaphodbeeblebroxx,

jetzt ist mir noch was eingefallen. Wenn ich das Script mehrfach anwende, wird der Rahmen natuerlich groesser und groesser. Kann man dafuer sorgen, dass das Script nur auf die Rahmen angewendet wird, deren Konturen mittig waren? Meine Idee:

Step 1: Alle Rahmen mit mittiger Kontur vom Script auswaehlen lassen
Step 2: Nur diese Rahmen verschieben
Step 3: Kontur von diesen (oder allen) Elementen nach innen setzen

Was meinst Du?

Melanie


als Antwort auf: [#233351]

Script: Rahmen verschieben/vergroessern

zaphodbeeblebroxx
Beiträge gesamt: 408

7. Jun 2006, 17:42
Beitrag # 9 von 21
Beitrag ID: #233356
Bewertung:
(9352 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
 
Hallo Melanie,

anbei nochmal das gesamte Skript.
Die Breite/Höhe der Objekt (Kontur innen) ist nach Ausführung des Skripts wie die Breite/Höhe des Ausgangsobjekts (Kontur mittig). Position x,y bleibt gleich.
Mit einer zusätzlichen Abfrage wird geprüft, ob die Kontur des Objekts mittig ist; nur dann wird es "bearbeitet"

Code
//ObjectStrokeWeight.jsx   
//
// Dokument geöffnet?
if (app.documents.length != 0){
}
else{
alert("Kein Dokument geöffnet. Bitte ein Dokument öffnen und die jeweiligen Bilder auswählen.");
exit();
}
//
var myDoc = app.documents[0];

//Save the current measurement units.
var myOldXUnits = myDoc.viewPreferences.horizontalMeasurementUnits;
var myOldYUnits = myDoc.viewPreferences.verticalMeasurementUnits;
//Set the measurement units to ponits.
myDoc.viewPreferences.horizontalMeasurementUnits = MeasurementUnits.points;
myDoc.viewPreferences.verticalMeasurementUnits = MeasurementUnits.points;
//
var myObjects = app.documents[0].allPageItems;
for (oneItem = 0; oneItem < myObjects.length; oneItem++)
{
if ((myObjects[oneItem].constructor.name == "TextFrame") || (myObjects[oneItem].constructor.name == "Rectangle") || (myObjects[oneItem].constructor.name == "Oval")){
if (myObjects[oneItem].strokeAlignment == StrokeAlignment.centerAlignment){
var myGeoBounds = myObjects[oneItem].geometricBounds;
var myStrokeWeight = myObjects[oneItem].strokeWeight;
var myStrokeWeight = myStrokeWeight/2;
myObjects[oneItem].geometricBounds = [myGeoBounds[0] - myStrokeWeight, myGeoBounds[1] - myStrokeWeight, myGeoBounds[2] + myStrokeWeight, myGeoBounds[3] + myStrokeWeight];
}
}
}
//alle Textframes, Rectangles, Ovals auf Kontur mittig
app.documents[0].textFrames.everyItem().strokeAlignment = StrokeAlignment.insideAlignment;
app.documents[0].rectangles.everyItem().strokeAlignment = StrokeAlignment.insideAlignment;
app.documents[0].ovals.everyItem().strokeAlignment = StrokeAlignment.insideAlignment;
//Set the original measurement units.
myDoc.viewPreferences.horizontalMeasurementUnits = myOldXUnits;
myDoc.viewPreferences.verticalMeasurementUnits = myOldYUnits;


zaphodbeeblebroxx


als Antwort auf: [#233353]

Script: Rahmen verschieben/vergroessern

mel_123
Beiträge gesamt: 104

7. Jun 2006, 18:09
Beitrag # 10 von 21
Beitrag ID: #233359
Bewertung:
(9345 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
zaphodbeeblebroxx,

klasse - es tut :-) vielen Dank. Einen schoenen Feierabend im Biergarten wuenscht

Melanie


als Antwort auf: [#233356]

Script: Rahmen verschieben/vergroessern

zaphodbeeblebroxx
Beiträge gesamt: 408

8. Jun 2006, 09:15
Beitrag # 11 von 21
Beitrag ID: #233408
Bewertung:
(9329 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Melanie,

gestern Abend habe ich festgestellt, dass Du auf 3 Foren Deine Problemstellung gepostet hattest.

Du hattest auch nach weiteren Möglichkeiten gefragt, um die "Problemchen", die nach dem Import einer Quark-Datei in InDesign auftauchen können, zu beseitigen (Farbe Schwarz/Black und Weiß/Papier, Hoch-/Tiefstellen, Konturen mittig nach/innen).

Hast Du Dir aus den Antworten ein Gesamtscript gebastelt, um diese Punkte auf einmal zu erledigen?

Vielleicht könntest Deine Ergebnisse auch auf diesem Forum posten, denn ich denke, dass würde einige User interessieren (mich auch!)

zaphodbeeblebroxx


als Antwort auf: [#233359]

Script: Rahmen verschieben/vergroessern

mel_123
Beiträge gesamt: 104

8. Jun 2006, 11:02
Beitrag # 12 von 21
Beitrag ID: #233443
Bewertung:
(9323 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo zaphodbeeblebroxx,

bin gerade dabei die anderen Scripte zusortieren und zu testen. Es sieht gut aus. Unter anderem mit Deiner ;-) Hilfe habe ich die entsprechenden Probleme geloest. Ich stelle sie heute abend/morgen online.

viele Gruesse

Melanie


als Antwort auf: [#233408]

Script: Rahmen verschieben/vergroessern

mel_123
Beiträge gesamt: 104

8. Jun 2006, 18:50
Beitrag # 13 von 21
Beitrag ID: #233597
Bewertung:
(9309 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Alle,

fuer den leidgeprueften Quark-Konvertierer gibt's dank der Leute in den Foren ein paar kleine Helferlein:

1. mittige Konturen nach innen stellen:
Hans vom Page-online-Forum hat noch einen entscheidenden Hinweis gegeben: "Rahmen ohne Kontur "wachsen" um 1 pt in beiden Richtungen. Schuld ist die tumbe (?) Adobe-Vorgabe, dass solche Rahmen eine (unsichtbare) Stärke von 1 pt haben." Deshalb hat er noch einen Check eingebaut, dass Rahmen ohne Kontur von der Modifikation nicht betroffen werden. Wer den ganzen Thread lesen moechte: http://www.page-online.de/page/forum/viewthread/2990/

Hier sein Script:

Code
//InnenAlinieren.js 
//Dieses Script ändert die Kontur-Ausrichtung auf "innen"

//Die Masseinheiten speichern und, falls notwendig, "points" einstellen
var oldUnitsX = app.activeDocument.viewPreferences.horizontalMeasurementUnits;
if (oldUnitsX != 2054188905) {
app.documents[0].viewPreferences.horizontalMeasurementUnits = MeasurementUnits.points;
}
var oldUnitsY = app.activeDocument.viewPreferences.verticalMeasurementUnits;
if (oldUnitsY != 2054188905) {
app.documents[0].viewPreferences.verticalMeasurementUnits = MeasurementUnits.points;
}

//Alle Rahmen erfassen
allFrames = app.documents[0].allPageItems;
//Die Anzahl feststellen
numFrames = allFrames.length;

//Eine Schleife durch die Objekte
for (var f=0; f<numFrames; f++) {
curFrame = allFrames[f];
//Die Farbe der Kontur des aktuellen Rahmens feststellen
strColor = curFrame.strokeColor.name;
//Nur eingreifen, wenn die Farbe nicht "Keine" ist
if (strColor != "None") {
//Linienrahmen ausschliessen
if (curFrame.constructor.name != "GraphicLine") {
//Nur Rahmen, deren Konturstärke zentriert ist, behandeln
if (curFrame.strokeAlignment == StrokeAlignment.centerAlignment) {
strHalf = (curFrame.strokeWeight)/2;
y1 = curFrame.geometricBounds[0]-strHalf;
x1 = curFrame.geometricBounds[1]-strHalf;
y2 = curFrame.geometricBounds[2]+strHalf;
x2 = curFrame.geometricBounds[3]+strHalf;
curFrame.geometricBounds = [y1, x1, y2, x2];
}
}
}
}

//Kontur nach innen ausrichten
//1. Textrahmen
app.documents[0].textFrames.everyItem().strokeAlignment = StrokeAlignment.insideAlignment;
//2. Rechtecke
app.documents[0].rectangles.everyItem().strokeAlignment = StrokeAlignment.insideAlignment;
//3. Ovale
app.documents[0].ovals.everyItem().strokeAlignment = StrokeAlignment.insideAlignment;

// die Masseinheiten zurücksetzen (wenn sie nicht schon "points" waren)
if (oldUnitsX != 2054188905) {
app.documents[0].viewPreferences.horizontalMeasurementUnits = oldUnitsX;
}
if (oldUnitsY != 2054188905) {
app.documents[0].viewPreferences.verticalMeasurementUnits = oldUnitsY;
}

alert ("Fertig.");


2. Im amerikanischen Forum habe ich ein Script von Dave Saunders gefunden, das das laestige "nicht-drucken", das bei der Konvertierung mancher Bilder auftaucht, ausschaltet:

Code
//DESCRIPTION: Uncheck ALL nonprinting attributes checkboxes  
//Script Author: Dave Saunders
if (app.documents.length != 0) {
myGraphs = app.activeDocument.allGraphics;
myLim = myGraphs.length;
for (i = 0; myLim > i; i++) {
myGraphs[i].nonprinting = false
}
myPIs = app.activeDocument.allPageItems;
myLim = myPIs.length;
for (i = 0; myLim > i; i++) {
myPIs[i].nonprinting = false
}
}


3. Ein homemade-Script, das die von Quark importierten Farben Schwarz (ueberdruckt nicht) und Weiß in die InDesign-Standard-Farben [Schwarz] (ueberdruckt) und Papier umwandelt. Es funktioniert zwar, aber ist noch nicht wirklich elegant. Vielleicht hat jemand noch eine bessere Loesung?


Code
//Farben wechseln 
doc = app.activeDocument
if( doc.swatches.item('White') == null )
doc.colors.add( { name : 'White', colorValue : [0, 0, 0, 0] } )
app.documents[0].swatches.item("White").remove(app.documents[0].swatches.item("Paper"))
if( doc.swatches.item('Schwarz') == null )
doc.colors.add( { name : '100K', colorValue : [0, 0, 0, 0] } )
app.documents[0].swatches.item("100K").remove(app.documents[0].swatches.item("Black"))

alert("Schwarz wurde durch [Schwarz], White durch Papier ersetzt!");


Vielen Dank erstmal allen, die mit ihrer Hilfe das Leben leichter machen und viel Spass

Melanie


als Antwort auf: [#233443]

Script: Rahmen verschieben/vergroessern

Klaus79
Beiträge gesamt: 341

13. Jun 2006, 16:38
Beitrag # 14 von 21
Beitrag ID: #234317
Bewertung:
(9217 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Forum,

ich habe das Script "InnenAlinieren.js" getestet und möchte nur sagen, dass es unter OSX und InDesign CS1 und CS2 hervorragend läuft. Trotzdem gibt es manchmal eine - überflüssige - Fehlermeldung, die ich gerne umgehen würde:

Das Script fragt in der Reihenfolge Textrahmen, Rechtecke und Ovale auf "Linie zur Mitte" ab und stoppt mit einer Fehlermeldung, wenn eine der genannten Rahmenformen (meistens oval) nicht im Dokument vorhanden ist. Gibt es eine Möglichkeit diese Fehlermeldung in Java zu unterbinden? Unter Visual Basic kann ich z. B. eine Sprungmarke setzen mit "On Error Go To ..." und damit ein Weiterlaufen des Scripts erzwingen ...

Für Antworten Dank im voraus

Klaus


als Antwort auf: [#233597]

Script: Rahmen verschieben/vergroessern

zaphodbeeblebroxx
Beiträge gesamt: 408

13. Jun 2006, 18:32
Beitrag # 15 von 21
Beitrag ID: #234331
Bewertung:
(9189 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Klaus,

kannst Du mal die genaue Fehlermeldung posten?

Ich habe das Skript bei mir ebenfalls getestet, aber diese Fehlermeldung konnte ich nicht nachstellen (Habe ein Dokument mit Textrahmen, Rechteck und Ovalen erstellt, das Skript ausgeführt – keine Fehlermeldung.
Neues Dokument ohne Ovale – das Skript ausgeführt – keine Fehlermeldung ...).

zaphodbeeblebroxx


als Antwort auf: [#234317]
X