[GastForen Programme Print/Bildbearbeitung Adobe InDesign Simulation der Montagefläche von PageMaker

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

Simulation der Montagefläche von PageMaker

Martin Fischer
  
Beiträge gesamt: 12714

10. Jan 2007, 21:52
Beitrag # 1 von 1
Bewertung:
(626 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
PageMaker-Anwender kennen sie, die "mitlaufende" Montagefläche: ein Objekt, das auf einer x-beliebigen Seite auf die Montagefläche gelegt wird, ist auf jeder anderen Seite direkt zu greifen.

In InDesign ist die Montagefläche an einen Druckbogen gebunden.

Ein Skript von Dave Saunders simuliert nun die PageMaker Montagefläche für Indesign. Nach dem Start sammelt es alle Objekte von allen Montageflächen zusammen und verschiebt sie auf die Montagefläche des aktiven Druckbogens, wobei sie ihre relative Position zum Druckbogen behalten.
Gesperrte Objekte verbleiben am alten Platz.
Ebenso Objekte auf gesperrten Ebenen.
Objekte auf versteckten Ebenen werden verschoben (soweit sie oder die Ebene nicht gesperrt sind), bleiben aber auf der versteckten Ebene unsichtbar.
Code
// aggregatePasteboard.jsx 
//DESCRIPTION: Moves all Pasteboard Items to Pasteboard of Current Spread

if (app.documents.length == 0) { exit() }
movePBitems(app.documents[0]);

function movePBitems(myDoc) {
if (app.activeWindow.constructor.name == "StoryWindow") { return }
var uO = myDoc.viewPreferences.rulerOrigin;
var uZP = myDoc.zeroPoint;
myDoc.viewPreferences.rulerOrigin = RulerOrigin.spreadOrigin;
myDoc.zeroPoint = [0,0];
myObjs = myDoc.pageItems.everyItem().parent;
var moveables = new Array();
for (var j = myObjs.length - 1; j >= 0; j--) {
if (myObjs[j].constructor.name == "Page") { continue }
moveables.push(myDoc.pageItems[j].id);
}
var mySpread = app.activeWindow.activeSpread;
var targSpreadWidth = getSpreadWidth(mySpread);
for (var j = moveables.length - 1; j >= 0; j--) {
var myObj = myDoc.pageItems.itemByID(moveables[j]);
var sourceSpread = myObj.parent;
if (sourceSpread == mySpread) { continue }
var sourceWidth = getSpreadWidth(sourceSpread);
var Shift = 0;
if (myObj.geometricBounds[3] > 0) {
Shift = targSpreadWidth - sourceWidth;
}
var myBounds = myObj.geometricBounds;
if (myObj.locked) { continue }
try {
myObj.move(mySpread);
} catch(e) { continue } // myObj must be on locked layer
myObj.move([myBounds[1] + Shift, myBounds[0]]);
}
myDoc.viewPreferences.rulerOrigin = uO;
myDoc.zeroPoint = uZP;

function getSpreadWidth(spread) {
var my1stBounds = spread.pages[0].bounds;
var myLastBounds = spread.pages[-1].bounds;
return myLastBounds[3] - my1stBounds[1];
}
} // end function movePBitems

(Quelle: http://jsid.blogspot.com/...k-to-pasteboard.html)

Dieses Skript hat mich fasziniert und gleichzeitig zu einer Alternative angespornt.
Ergebnis ist ein Skript, das alle Objekte der Montageflächen in einer temporären Bibliothek "TempLibrary.indl" sichert. Diese Bibliothek wird bei Bedarf (wenn sie noch nicht geöffnet ist) auf dem Schreibtisch angelegt.
Rahmen mit verknüpten Bildern erhalten die Bildnamen.
Bei Textrahmen versucht das Skript einen Teil des Inhalts des Textrahmens (die ersten 15 Zeichen) als Namen zu verwenden.
Gruppen von Textrahmen bekommen eine fortlaufende Nummer als Namen zugewiesen.

Jedes Mal, wenn das Skript gestartet wird, erfolgt zunächst eine Reinigung der Bibliothek (alle in der Bibliothek gesicherten Objekte werden dort gelöscht). Die Montageflächen-Objekte verbleiben unberührt an ihrem jeweiligen Platz.

Code
//storePasteboardItems2TempLibrary.jsx 

//DESCRIPTION: Stores all Pasteboard Items into a temporary library
//Pay attention: the temorary library is saved in "TempLibrary.indl" in the user's documents folder.
//Every time the script is executed, the library is cleared (means: the old assets (contents) of the library are removed)

var myNameLength = 15; // length of name for assets for text frames
var myPath = "~/Desktop"; // folder of the temporary library

if (app.documents.length > 0) {
var myLib = getLib(myPath, "TempLibrary.indl");
clearLib(myLib);
store2Lib(app.documents[0], myLib);
}

// remove every asset of the library
function clearLib(theLib) {
if (theLib.assets.length > 0)
theLib.assets.everyItem().remove();
}

// stores pasteboard items into the library
function store2Lib(myDoc) {
if (app.activeWindow.constructor.name != "StoryWindow") {
var myObjs = myDoc.pageItems;
for (var j = myObjs.length - 1; j >= 0; j--) {
if (myObjs[j].parent.constructor.name != "Page") {
myLib.store(myDoc.pageItems[j]);
// set name of a textType asset to part of it's contents
if (myLib.assets[0].assetType == AssetType.textType) {
try {
var theContent = myObjs[j].properties.contents;
theContent = theContent.split(" ").join("_");
var theString = (theContent.length <= myNameLength)
? theContent
: theContent.substr(0,myNameLength);
}
catch (e) {
// couldn't get the contents, so set name to No. x
var theString = "No. " + j;
}
myLib.assets[0].name = theString;
}
}
}
}
}

function getLib(myPathName, myLibName) {
if (app.libraries.item(myLibName) == null) {
var myLib = app.libraries.add(File(myPathName + "/" + myLibName));
}
else {
var myLib = app.libraries.item(myLibName)
}
return myLib;
}

(Dank an Quarz für ihre Geduld bei Testläufen des Skripts unter InDesign für Windows)

Es ist gut möglich, daß das Skript an der ein oder anderen Stelle noch hakt.
Ich freue mich über Fehler- und Erfolgsmeldungen. ;-)

Viel Genuß beim Krümelsammeln.

(Dieser Beitrag wurde von Martin Fischer am 10. Jan 2007, 22:00 geändert)
X