Ich bin ein Anfänger im Schreiben von Skripten für InDesign (erst heute angefangen!). Ich habe es irgendwie geschafft, ein Skript zu schreiben, das ein Textfeld automatisch mit einer Liste der verknüpften Bilder im Dokument füllt. Wenn ich das Textfeld jedoch mit anderen Objekten gruppiere oder es in ein anderes Indesign-Dokument verschiebe, funktioniert das Skript nicht mehr. Ich erhalte eine Fehlermeldung, die besagt „Objekt ist ungültig“, wobei die Quelle „resFrame.contents = res.String;“ ist. Kann jemand bitte erklären, warum dies geschieht und wie es behoben werden kann?
Code unten...
myDoc = app.activeDocument;
myPages = myDoc.pages.everyItem().getElements();
myDoc.viewPreferences.horizontalMeasurementUnits = myDoc.viewPreferences.verticalMeasurementUnits = MeasurementUnits.INCHES;
for (var k = 0; k < myPages.length; k++) {
resString = myDoc.links.everyItem().name.join("\r");
resFrame = myFramelinks(myPages[k]);
resFrame.contents = resString;
}
function myFramelinks (page) {
var mFlinks = page.textFrames.item("linkslist");
return mFlinks;
}
Woher kommt der Name Ihres Artikels "Linksliste"? Indem Sie einen Namen für den TextFrame festlegen?
Die Eigenschaft "Name" eines Textrahmens scheint für das Dokument dauerhaft zu sein. Auch wenn Sie den Textrahmen kopieren und in ein anderes Dokument einfügen, ist er immer noch vorhanden.
Aber wenn Sie eine Seite mit 2 Textrahmen haben und Sie ausführen:
$.writeln(app.activeDocument.pages[0].textFrames.length);
es kommt zurück 2
Gruppieren Sie diese Textrahmen zusammen und es wird 0 zurückgegeben
Wenn Sie auf gruppierte Elemente zugreifen möchten, müssen Sie wie folgt darauf zugreifen:
$.writeln (app.activeDocument.pages[0].groups[0].textFrames[0].name)
Sie können auch auf diese Weise darauf zugreifen:
$.writeln(app.activeDocument.pages[0].allPageItems.length)
Dies gibt 3 zurück.
wenn du läufst:
for(var i = 0; i < app.activeDocument.pages[0].allPageItems.length; i++){
$.writeln(app.activeDocument.pages[0].allPageItems[i].constructor.name)
}
Die Ausgabe wird sein:
Group
TextFrame
TextFrame
Sie könnten also eine Überprüfung für Ihren Namen erstellen und erneut auf diesen bestimmten TextFrame zugreifen.
(Getestet in ID CC 2014 auf OSX 10.10.2)
Aktualisieren:
Um den Textrahmen mit dem Namen "Linksliste" abzurufen, sollten Sie etwa so vorgehen:
function get_linklist(page) {
var tf = null;
for (var i = 0; i < page.allPageItems.length; i++) {
var item = page.allPageItems[i];
if (item.name == "linkslist") {
tf = item;
break;
}
}
return tf;
}
var doc = app.activeDocument;
var p = doc.pages[0];
var res = get_linklist(p);
if (res === null) {
$.writeln(" :(");
} else {
$.writeln(" :)");
}
Emily
fabianmoronzirfas
Jorik
fabianmoronzirfas
Emily
fabianmoronzirfas