Connect failed: Connection timed out

[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 9
Bewertung:
(8451 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
X

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

Martin Fischer
  
Beiträge gesamt: 12779

24. Sep 2019, 12:34
Beitrag # 2 von 9
Beitrag ID: #571952
Bewertung:
(8444 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 ();
}

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


als Antwort auf: [#571950]
(Dieser Beitrag wurde von Martin Fischer am 17. Feb 2020, 14:43 geändert)

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

Shari172
Beiträge gesamt: 12

24. Sep 2019, 13:59
Beitrag # 3 von 9
Beitrag ID: #571957
Bewertung:
(8419 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


als Antwort auf: [#571952]

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

Martin Fischer
  
Beiträge gesamt: 12779

24. Sep 2019, 15:20
Beitrag # 4 von 9
Beitrag ID: #571958
Bewertung:
(8406 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.


als Antwort auf: [#571957]

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

Ingo Herber
Beiträge gesamt: 454

17. Feb 2020, 13:54
Beitrag # 5 von 9
Beitrag ID: #574148
Bewertung:
(6951 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,
sehe ich das richtig, dass das mit CC Libraries nicht mehr funktioniert?

library_store2 meldet "Keine Bibliothek geöffnet"
library_place_assets stoppt mit Fehlernummer 24, "error_exit is not a funktion"

(getestet mit ID 15.0.1)


Herzliche Grüße,
Ingo


als Antwort auf: [#571958]

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

Martin Fischer
  
Beiträge gesamt: 12779

17. Feb 2020, 14:46
Beitrag # 6 von 9
Beitrag ID: #574150
Bewertung:
(6940 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Ingo,

grundsätzich sollten beide Skripte auch in CC funktionieren.

Antwort auf: library_store2 meldet "Keine Bibliothek geöffnet"


Hast Du denn eine Bibliothek geöffnet?


Antwort auf: library_place_assets stoppt mit Fehlernummer 24, "error_exit is not a funktion"


In diesem Skript hatte ich versäumt, die Funktion error_exit() zu integrieren. Das ist jetzt oben korrigiert.


als Antwort auf: [#574148]

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

Uwe Laubender
Beiträge gesamt: 5316

17. Feb 2020, 14:50
Beitrag # 7 von 9
Beitrag ID: #574151
Bewertung:
(6937 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,
in den CC-Versionen von InDesign wohl, aber natürlich nicht mit den CC Libraries. Im Unterschied zu den Bibliothekelementen der indl-Dateien.


als Antwort auf: [#574150]

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

Martin Fischer
  
Beiträge gesamt: 12779

17. Feb 2020, 15:05
Beitrag # 8 von 9
Beitrag ID: #574153
Bewertung:
(6930 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Richtig!

Funktioniert nicht mit Bibliotheksobjekten aus der Cloud.


als Antwort auf: [#574151]
(Dieser Beitrag wurde von Martin Fischer am 17. Feb 2020, 15:07 geändert)

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

Ingo Herber
Beiträge gesamt: 454

17. Feb 2020, 15:28
Beitrag # 9 von 9
Beitrag ID: #574154
Bewertung:
(6925 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf: Hast Du denn eine Bibliothek geöffnet?


Sorry, ich dachte, die CC Libraries hätten die indl-Bibliothek ganz abgelöst.
Jedes Objekt aus der geöffneten Bibiliothek wird nun auf einer eigenen Seite platziert.

Antwort auf: In diesem Skript hatte ich versäumt, die Funktion error_exit() zu integrieren.


Es kommt jetzt keine Fehlermeldung mehr. Aber es wird scheinbar auch nichts in die geöffnete Bibliothek geschrieben.
... sorry, ich möchte Dich hiermit nicht aufhalten. Für meine Idee, eine Art Übersicht einer CC-Librarie zu erzeugen, scheint das hier nicht das richtige zu sein.

Mir gings in erster Linie um die CC-Libraries. Da prüfe ich derzeit, inwiefern ich unseren Workflow optimieren kann. (mit mäßiger Begeisterung)
Ich kann zwar wohl eine Bibliothek zu einer CC-Librarie migrieren, aber nicht umgekehrt.

Herzliche Grüße,
Ingo


als Antwort auf: [#574150]
X