[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt CS6 // alle Bibliothek-Elemente in ID-Dokument platzieren

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

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

Shari172
Beiträge gesamt: 12

24. Sep 2019, 12:06
Beitrag # 1 von 4
Bewertung:
(1255 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

wir haben eine CS6 Bibliothek mit 92 verschiedenen Elementen, die wir gerne als eine Art Übersicht in einem InDesign-Dokument platzieren möchte.
Die Elemente sind immer gleich aufgebaut: Platzhalterrahmen + Textrahmen mit Maßen darauf.
Gibt es hierfür eine Möglichkeit/Script, wie die Elemente auf fortlaufenden Seiten untereinander platziert werden können?

Viele Grüße,
Shari
----------
www.satzkiste.de
Hier Klicken X

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

Martin Fischer
  
Beiträge gesamt: 12183

24. Sep 2019, 12:34
Beitrag # 2 von 4
Beitrag ID: #571952
Bewertung:
(1248 mal gelesen)
URL zum Beitrag
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 ();
}
}



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".

Viele Grüße
Martin




als Antwort auf: [#571950]
(Dieser Beitrag wurde von Martin Fischer am 24. Sep 2019, 12:54 geändert)

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

Shari172
Beiträge gesamt: 12

24. Sep 2019, 13:59
Beitrag # 3 von 4
Beitrag ID: #571957
Bewertung:
(1223 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hey Martin,
vielen Dank!
Also ich hab es auch gleich mal getestet und das funktioniert ja schonmal prima.
Merkt sich das Script etwa wo jedes Element in der Bibliothek dazugehört? Gerade hab ich nämlich einen Rahmen platziert, verändert und verschoben und ihn dann in der Bibliothek aktualisiert.
Wenn du mir da noch eine Minierklärung geben könntest, dann kann ich das Wissen hier auch etwas teilen :)

Viele GRüße,
Shari
----------
www.satzkiste.de


als Antwort auf: [#571952]

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

Martin Fischer
  
Beiträge gesamt: 12183

24. Sep 2019, 15:20
Beitrag # 4 von 4
Beitrag ID: #571958
Bewertung:
(1210 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Shari,

das Skript "library_place_assets.jsx" platziert der Reihe nach alle Bibliotheksobjekte je auf einen Druckbogen.
Ferner erzeugt es links vom Druckbogen auf der Montagefläche einen Textrahmen mit dem Namen "Bibliotheksobjektname" in den es den Namen des jeweiligen Bibliothekobjekts schreibt.

Das Skript "library_store2.jsx" geht alle Druckbogen durch und prüft, ob es einen Textrahmen mit dem Namen "Bibliotheksobjektname" findet. Ist dies der Fall, dann ermittelt es aus dessen Inhalt den Namen des Bibliothekobjekts.
Findet es in der Bibliothek ein Bibliotheksobjekt mit diesem Namen, dann wird es gelöscht.
Danach werden die Objekte des Druckbogens gesammelt und mit dem ermittelten Namen des Bibliothekobjekts in der Bibliothek gespeichert (wobei der Textrahmen mit dem Namen "Bibliotheksobjektname" übergangen wird).

Kurz:
Bibliotheksobjekte in der Biblithek mit dem aus dem Druckbogen ermittelten Namen werden erst gelöscht und dann mit diesem Namen neu eingefügt.
Andere Objekte (ohne Namensgleichheit) werden einfach ergänzt.

Der Mechanismus ist zugegebenermaßen etwas speziell und birgt durchaus Risiken (ist nicht ganz "wasserdicht"). Es hat mir seinerzeit für eine schnelle Überarbeitung meiner Bibliotheken gedient und dazu konnte ich ein paar unterschlagene Bedingungen (Koordinatenursprung, Namen für Ebenen und Textrahmen) als unproblematisch voraussetzen.
Mir war es wichtig, während der Überarbeitung der Bibliotheksobjekte in der InDesign-Datei auf den Namen des Bibliotheksobjekts Einfluss nehmen zu können. Dieser Trick könnte in der "Allgemeinheit" stören/scheitern. Aber im Moment fehlt mir die Zeit, das Skript "wasserdicht" zu machen.


Mir ist gerade aufgefallen, dass die Zeile
Code
					justification:Justification.LEFT_ALIGN, 

Probleme bereiten kann, wobei mir die Ursache spontan unerklärlich ist.
Wenn bei der Ausführung etwas hakt, dann diese Zeile mit vorangestellten // oder durch Löschen unschädlich machen.

Viele Grüße
Martin




als Antwort auf: [#571957]
X
Hier Klicken

Aktuell

Photoshop / Lightroom
Lightroom_-Detailkontrast_300

Veranstaltungskalender

Hier können Sie Ihre Anlässe eintragen, welche einen Zusammenhang mit den Angeboten von HilfDirSelbst.ch wie z.B. Adobe InDesign, Photoshop, Illustrator, PDF, Pitstop, Affinity, Marketing, SEO, Büro- und Rechtsthemen etc. haben. Die Einträge werden moderiert freigeschaltet. Dies wird werktags üblicherweise innert 24 Stunden erfolgen.

pdf-icon Hier eine kleine Anleitung hinsichtlich Bedeutung der auszufüllenden Formularfelder.

Veranstaltungen
18.11.2019

Düsseldorf
Montag, 18. Nov. 2019, 09.30 Uhr

Schulung, Seminar

Mit WordPress ist es möglich, ohne große Kosten und ohne Programmierkenntnisse eine ansprechende Webseite zu erstellen, die allen Anforderungen des modernen Webdesigns – besonders unter Beachtung der Suchmaschinenoptimierung (SEO) – gerecht wird. Unsere Schulung Webdesign mit WordPress zeigt Ihnen, wie Sie hochwertige Webseiten mit WordPress erstellen.

Ja

Organisator: Cleverprinting.de

https://www.cleverprinting.de/schulungen/schulung-webdesign-mit-wordpress/

Suchmaschinen-optimiertes Webdesign mit WordPress
Veranstaltungen
19.11.2019 - 20.11.2019

Düsseldorf
Dienstag, 19. Nov. 2019, 09.30 Uhr - Mittwoch, 20. Nov. 2019, 17.30 Uhr

Schulung, Seminar

Unsere Schulung „Zweitägige Weiterbildung zum Cleverprinting-Reinzeichner“ bietet allen Anwendern, die in Agenturen oder freiberuflich als Reinzeichner bzw. in der Reinzeichnung arbeiten, topaktuelles Grafik- und PrePress-Fachwissen rund um das Thema „Druckdatenerstellung mit InDesign, Photoshop, Acrobat“.

Ja

Organisator: Cleverprinting.de

https://www.cleverprinting.de/zweitaegige-weiterbildung-zum-cleverprinting-reinzeichner/

Zweitägige Weiterbildung zum Cleverprinting-Reinzeichner