[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste

CS6 // alle Bibliothek-Elemente in ID-Dokument platzieren

Martin Fischer
  
Beiträge gesamt: 12778

24. Sep 2019, 12:34
Bewertung:

gelesen: 8443

Beitrag als Lesezeichen
Hallo Shari,

das folgende Skript platziert alle Objekte einer Bibliothek im aktiven Dokument - je auf einem neuen Druckbogen.

Code
/*  
library_place_assets.jsx

//DESCRIPTION:Platziert Objekte einer Bibliothek im aktiven Dokument.
VERSION: 0.1
AUTHOR: Martin Fischer
EMAIL: InDesign[at]MartinFischer.de
DATE: 22.6.15
© Martin Fischer 2015
*/
// Bibliotheksobjekte_platzieren.jsx

app.doScript (main, ScriptLanguage.JAVASCRIPT, undefined, UndoModes.ENTIRE_SCRIPT, "library_place_assets.jsx");

function main()
{
if (app.documents.length == 0)
app.documents.add();
var doc = app.documents.firstItem(),
i, lib = null, assets = [], n_layer = null, n = 'Bibliotheksobjektname',
ps = (doc.paragraphStyles.itemByName(n).isValid)
? doc.paragraphStyles.itemByName(n)
: doc.paragraphStyles.add({
name: n,
pointSize: '12 pt',
justification:Justification.LEFT_ALIGN,
leftIndent: 0,
rightIndent: 0,
firstLineIndent: 0,
lastLineIndent: 0
});

if (app.libraries.length == 0)
error_exit('Keine Bibliothek geöffnet!')
else if (app.libraries.length == 1)
lib = app.libraries.firstItem();
else
lib = get_library(app.libraries.everyItem().name);

assets = lib.assets.everyItem().getElements();
assets.sort(assort);

n_layer = (doc.layers.itemByName(n).isValid) ? doc.layers.itemByName(n) : doc.layers.add({name: n});

for (i = 0; i < assets.length; i++)
{
var spread = (doc.spreads.length == 1 && doc.spreads.firstItem().pageItems.length == 0) ? doc.spreads.firstItem() : doc.spreads.add();
app.layoutWindows.firstItem().activeSpread = spread;
var tf = spread.textFrames.add({rotationAngle: 90, /*geometricBounds: [0, '-10 mm', doc.documentPreferences.pageHeight, 0],*/ itemLayer: n_layer, contents: assets[i].name, name: n, nonprinting : true});
tf.geometricBounds = [0, '-10 mm', doc.documentPreferences.pageHeight, -0.1];
tf.insertionPoints.firstItem().appliedParagraphStyle = ps;
assets[i].placeAsset(doc);
}


//=================================================================
// Funktionen
//=================================================================

//-----------------------------------------------------------------
// Bibliotheksobjekte sortieren
//-----------------------------------------------------------------
function assort(a,b)
{
return a.name > b.name;
}

//-----------------------------------------------------------------
// Bibliothek ermitteln
//-----------------------------------------------------------------
function get_library(lib_names)
{
var win = new Window ("dialog", "Auswahl der Bibliothek");
var gr = win.add ("group");
gr.drop_down = gr.add ( 'dropdownlist', undefined, lib_names);
gr.drop_down.selection = 0;
var btn_gr = win.add ("group");
btn_gr.alignment = "right";
btn_gr.add ("button", undefined, "OK");
btn_gr.add ("button", undefined, "Cancel");
if (win.show () == 1)
return( app.libraries.itemByName( lib_names[gr.drop_down.selection.index]) );
else
exit ();
}

//-----------------------------------------------------------------
// Ausstieg mit Fehlermeldung
//-----------------------------------------------------------------
function error_exit(message)
{
if (arguments.length > 0)
alert(message);
exit();
}
}



Und das folgende Skript macht das Gegenteil:
es sichert die Objekte je Druckbogen in einer Bibliothek:

Code
/* 
library_store2.jsx

//DESCRIPTION:Sichert Objekte der Druckbogen des aktiven Dokuments in einer Bibliothek
VERSION: 0.1
AUTHOR: Martin Fischer
EMAIL: InDesign[at]MartinFischer.de
DATE: 22.6.15
© Martin Fischer 2015
*/

app.doScript (main, ScriptLanguage.JAVASCRIPT, undefined, UndoModes.ENTIRE_SCRIPT, "library_store2.jsx");
//~ main();

function main()
{
if (app.documents.length == 0)
error_exit('Bitte ein Dokument öffnen.');

var doc = app.documents.firstItem(),
i, lib_obj_name = 'Bibliotheksobjektname',
lib = null, ass = new Array,
n_layer = (doc.layers.itemByName(lib_obj_name).isValid) ? doc.layers.itemByName(lib_obj_name) : doc.layers.add({name: lib_obj_name});

if (app.libraries.length == 0)
error_exit('Keine Bibliothek geöffnet!')
else if (app.libraries.length == 1)
lib = app.libraries.firstItem();
else
lib = get_library(app.libraries.everyItem().name);

for (i = 0; i < doc.spreads.length; i++)
{
var obj = [];
var spread = doc.spreads.item(i);
var tf = spread.textFrames.itemByName(lib_obj_name);
if (tf.isValid)
{
var n = tf.parentStory.contents;
if (lib.assets.itemByName(n).isValid)
lib.assets.itemByName(n).remove();

for (var x = 0; x < spread.pageItems.length; x++)
if (spread.pageItems.item(x).name != lib_obj_name)
obj.push(spread.pageItems.item(x));
ass[n] = lib.store(obj,{name: n});
}
}


//=================================================================
// Funktionen
//=================================================================

//-----------------------------------------------------------------
// xxx
//-----------------------------------------------------------------
function error_exit(message)
{
if (arguments.length > 0)
alert(message);
exit();
}
//-----------------------------------------------------------------
// Bibliothek ermitteln
//-----------------------------------------------------------------
function get_library(lib_names)
{
var win = new Window ("dialog", "Auswahl der Bibliothek");
var gr = win.add ("group");
gr.drop_down = gr.add ( 'dropdownlist', undefined, lib_names);
gr.drop_down.selection = 0;
var btn_gr = win.add ("group");
btn_gr.alignment = "right";
btn_gr.add ("button", undefined, "OK");
btn_gr.add ("button", undefined, "Cancel");
if (win.show () == 1)
return( app.libraries.itemByName( lib_names[gr.drop_down.selection.index]) );
else
exit ();
}
}


Im Zusammenspiel beider Skripte kann man z.B. auch die Formatierung "glätten".

(Dieser Beitrag wurde von Martin Fischer am 17. Feb 2020, 14:43 geändert)
Änderungsverlauf:
Beitrag geändert von Martin Fischer (Moderator) am 24. Sep 2019, 12:54
Beitrag geändert von Martin Fischer (Moderator) am 17. Feb 2020, 14:43