[GastForen Programmierung/Entwicklung JavaScript Illustrator Skript: Ebenen ein- und ausblenden und Export

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Themen
Beiträge
Moderatoren
Letzter Beitrag

Illustrator Skript: Ebenen ein- und ausblenden und Export

q3player
Beiträge gesamt: 67

7. Feb 2018, 10:32
Beitrag # 1 von 3
Bewertung:
(2219 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo zusammen,

ich habe mir zu dem Thema schon einige Code-Schnipsel gesammelt, komme aber mit der Lösung meines Problems nicht weiter.

Hintergrund:
Wir erstellen für den Verpackungsbereich komplexe AI-Dateien (CS6, Mac). Hierbei kommt es vor, dass es von einer Verpackung mehrere Sorten gibt, die sich nur marginal unterscheiden. Beispiel Lacktischdecken: 4 Farbvarianten, unterscheiden sich nur in 1 Wort (Farbe xxx) und im Barcode.

Wir legen die 4 Sorten in einer AI an, wobei die Bereiche, die unterschiedlich sind, auf separaten Ebenen liegen (Sorte 1, Sorte 2, usw.), der Rest auf unterschiedlichen Ebenen, die aber für alle Sorten gleich sind (Stanze, RZ, Info usw.). Bei Korrekturen an allen Sorten muss man so die Änderungen nur 1x machen.

Für das Erstellen von Ansichts-PDFs zur Abstimmung mit dem Kunden ergibt sich dann immer der gleiche Arbeitsablauf:

Sorten-Ebene 1 ein, alle anderen Sorten aus, PDF erstellen und benennen mit "..._Sorte_1_...".
Sorten-Ebene 2 ein, alle anderen Sorten aus, PDF erstellen und benennen mit "..._Sorte_2_...".
Sorten-Ebene 3 ein, alle anderen Sorten aus, PDF erstellen und benennen mit "..._Sorte_3_...".
...

Und genau diesen Ablauf möchte ich per Skript automatisieren.

Ich habe das Skript "saveLayersToAI" von Rassadin Pavel als Grundlage nehmen wollen, aber da wird aus jeder einzelnen Ebene eine separate AI erstellt. Ich muss mir also vorher eine Abfrage einbauen, welche Ebenen fix sind bzw. welche Ebenen der Reihe nach ein- und ausgeblendet werden. Ausgabe als PDF ist dann wiederum einfach, allerdings muss ich auch von der derzeit aktiven Sorten-Ebene den Namen übernehmen und als Teil des Dateinamens verwenden.

Im Moment fehlt mir die richtige Idee für den Ansatz.

Von hinten aufgerollt:
- PDF Export ist einfach
- Speichern als AI ist einfach
- Namen ändern ist einfach
- Ebenen aus- und einblenden ist einfach
- Ebenen-Namen abfragen ist einfach
Aber wie wird da jetzt ein Schuh draus ...

Danke im voraus für Denkanstöße :-)

q3player
X

Illustrator Skript: Ebenen ein- und ausblenden und Export

q3player
Beiträge gesamt: 67

13. Feb 2018, 16:39
Beitrag # 2 von 3
Beitrag ID: #562405
Bewertung:
(1137 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ok, ich bin schon einen Schritt weiter:

Basierend auf einigen Vorgaben bzgl.
- Dateibenennung
- Ebenenbenennung
habe ich eine Lösung entwickelt, die auf dem Desktop einen neuen Ordner erstellt, in dem dann die einzelnen AI-Files abgelegt werden.

Die Hauptdatei mit den ein- und auszublendenen Ebenen muss das Schlüsselwor "MULTI" enthalten. Die einzelnen Sorten-Ebenen müssen mit dem Wort "Sorte" beginnen.

Der Ordername ergibt sich aus dem Dateinamen der Hauptdatei. Das Skript blendet erst alle Sorten-Ebenen aus und danach der Reihe nach ein und danch wieder aus. In diesem Loop wird auf Basis des Ursprungs-Namens und aus dem Ebenen-Namen der gerade sichtbaren Sorte ein individueller Dateiname generiert und die Datei im Ordner auf dem Desktop als AI gesichert.

Code
var doc = app.activeDocument; 
var splitfolder = "_SPLIT";

// Dateinamen auslesen, bereinigen
var arr = doc.name.split(".");
var extension = "";
if (arr.length>1) extension = "." + arr.pop();
var filename = arr.join(".");
var foldername = filename;
var foldername = foldername.replace(/RZ_/,""); // lösche RZ_ für Ordnernamen
var foldername = foldername.replace(/\s/g,"_"); // ersetze Blanks durch Unterstriche
var foldername = foldername.replace("ß","ss"); // ersetze ß durch ss
var foldername = foldername.replace("%","Pr"); // ersetze %-Zeichen durch Pr
var foldername = foldername.replace(/[^-a-zA-Z0-9._]/g,""); // ersetze sonstige Sonderzeichen und Umlaute

// Export-Ordner generieren
var export_folder = "~/Desktop/" + foldername + splitfolder;
var assets_folder = new Folder (export_folder);
assets_folder.create();

// Ebene ausblenden
function hide_layer (a) {
var docHide = app.activeDocument;
var myLayers1 = docHide.layers;
var hideName1 = a;
try {
hideLayer1 = myLayers1.getByName (hideName1);
hideLayer1.visible = false;
redraw();
}
catch (e) {}
}

// Ebene einblenden
function show_layer (a) {
var docShow = app.activeDocument;
var myLayers2 = docShow.layers;
var showName2 = a;
try {
showLayer2 = myLayers2.getByName (showName2);
showLayer2.visible = true;
redraw();
}
catch (e) {}
}

// Array bilden mit Namen aller Ebenen
var myLayers = [];
var layerCount = doc.layers.length;
for (var ii = layerCount - 1; ii >= 0; ii--) {
var currentLayer = doc.layers[ii];
myLayers.push (currentLayer);
}

// alle Ebenen namens "Sorte*" ausblenden
for (var ii = layerCount - 1; ii >= 0; ii--) {
var isSorte = (myLayers[ii].name).indexOf("Sorte");
if (isSorte >= 0) {
hide_layer (myLayers[ii].name);
}
}

// der Reihe nach Ebenen namens "Sorte*" einblenden und speichern mit neuem Namen
// basierend auf aktuell eingeblendeter Sorten-Ebene
for (var ii = layerCount - 1; ii >= 0; ii--) {
var isSorte = (myLayers[ii].name).indexOf("Sorte");
if (isSorte >= 0) {

show_layer (myLayers[ii].name); // Sorten-Ebene einblenden

// Name der aktuellen Sorten-Ebene ermitteln
// Wort "Sorte" aus dem Namen löschen
var actLayName = myLayers[ii].name;
actLayName = actLayName.replace (/Sorte/,"");

// Sorten-Dateiname generieren aus Ursprung
// Wort "_MULTI" aus dem Namen ersetzen durch Ebenen-Namen
var sortFileName = filename;
sortFileName = sortFileName.replace(/_MULTI/,actLayName);

var save_options = new IllustratorSaveOptions();
save_options.embedICCProfile = false;
save_options.pdfCompatible = false;
var packaged_file = File (export_folder + "/" + sortFileName);

doc.saveAs(packaged_file, save_options); // Datei speichern mit neuem Namen

hide_layer (myLayers[ii].name); // Sorten-Ebene ausblenden
}
}

doc.close (SaveOptions.DONOTSAVECHANGES);



als Antwort auf: [#562321]

Illustrator Skript: Ebenen ein- und ausblenden und Export

q3player
Beiträge gesamt: 67

14. Feb 2018, 14:19
Beitrag # 3 von 3
Beitrag ID: #562414
Bewertung:
(1112 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Finale Lösung:

Code
var doc = app.activeDocument; 
var splitfolder = "_SPLIT";

// Dateinamen auslesen, bereinigen
var arr = doc.name.split(".");
var extension = "";
if (arr.length>1) extension = "." + arr.pop();
var filename = arr.join(".");
var foldername = filename;
var foldername = foldername.replace(/RZ_/,""); // lösche RZ_ für Ordnernamen
var foldername = foldername.replace(/\s/g,"_"); // ersetze Blanks durch Unterstriche
var foldername = foldername.replace("ß","ss"); // ersetze ß durch ss
var foldername = foldername.replace("%","Pr"); // ersetze %-Zeichen durch Pr
var foldername = foldername.replace(/[^-a-zA-Z0-9._]/g,""); // ersetze sonstige Sonderzeichen und Umlaute

// Export-Ordner generieren
var export_folder = "~/Desktop/" + foldername + splitfolder;
var assets_folder = new Folder (export_folder);
assets_folder.create();

// Ebene ausblenden
function hide_layer (a) {
var docHide = app.activeDocument;
var myLayers1 = docHide.layers;
var hideName1 = a;
try {
hideLayer1 = myLayers1.getByName (hideName1);
hideLayer1.visible = false;
redraw();
}
catch (e) {}
}

// Ebene einblenden
function show_layer (a) {
var docShow = app.activeDocument;
var myLayers2 = docShow.layers;
var showName2 = a;
try {
showLayer2 = myLayers2.getByName (showName2);
showLayer2.visible = true;
redraw();
}
catch (e) {}
}

// Array bilden mit Namen aller Ebenen
var myLayers = [];
var layerCount = doc.layers.length;
for (var ii = layerCount - 1; ii >= 0; ii--) {
var currentLayer = doc.layers[ii];
myLayers.push (currentLayer);
}

// alle Ebenen namens "Sorte*" ausblenden
for (var ii = layerCount - 1; ii >= 0; ii--) {
var isSorte = (myLayers[ii].name).indexOf("Sorte");
if (isSorte >= 0) {
hide_layer (myLayers[ii].name);
}
}

// der Reihe nach Ebenen namens "Sorte*" einblenden und speichern mit neuem Namen
// basierend auf aktuell eingeblendeter Sorten-Ebene
for (var ii = layerCount - 1; ii >= 0; ii--) {
var isSorte = (myLayers[ii].name).indexOf("Sorte");
if (isSorte >= 0) {

show_layer (myLayers[ii].name); // Sorten-Ebene einblenden

// Name der aktuellen Sorten-Ebene ermitteln
// Wort "Sorte" aus dem Namen löschen
var actLayName = myLayers[ii].name;
actLayName = actLayName.replace (/Sorte/,"");

// Sorten-Dateiname generieren aus Ursprung
// Wort "_MULTI" aus dem Namen ersetzen durch Ebenen-Namen
var sortFileName = filename;
sortFileName = sortFileName.replace(/_MULTI/,actLayName);

var save_options = new IllustratorSaveOptions();
save_options.embedICCProfile = false;
save_options.pdfCompatible = false;
var packaged_file = File (export_folder + "/" + sortFileName);

doc.saveAs(packaged_file, save_options); // Datei speichern mit neuem Namen

hide_layer (myLayers[ii].name); // Sorten-Ebene ausblenden
}
}

doc.close (SaveOptions.DONOTSAVECHANGES);


Auf Basis des Dateinamens mit dem Schlüsselwort "MULTI" wird auf dem Desktop ein neuer Ordner erzeugt. Alle Ebenen mit dem Schlüsselwort "Sorte" im Namen werden ausgeblendet. Danach werden der Reihe nach
- die Ebenen mit "Sorte" erst einzeln eingeblendet
- neuer Dateiname aus Ebenen-Name generiert
- Datei mit neuem Namen gespeichert
- aktuelle Sorten-Ebene wieder ausgeblendet
- Datei ohne Änderung (!) geschlossen
und wieder von vorne.

Mit einem 2. separaten Skript erstelle ich dann aus allen .ai in einem Ordner PDFs für den Kunden:

Code
var dir = Folder.selectDialog("Ordner wählen mit .ai-Dateien"); 
var files = dir.getFiles("*.ai");

var pvoptions = new PDFSaveOptions();
pvoptions.pDFPreset = 'Ansichts-PDF 150dpi'; // Name der PDF-Settings für Ansichts-PDF

var varnish = "Lack"; // Name der Ebene für den Lack-Film
var white = "SF Weiss"; // Name der Ebene für den Weiß-Hinterleger


function hide_lack () {
var doclack = app.activeDocument;
var myLayers2 = doclack.layers;
var HideName2 = varnish;
try {
HideLayer2 = myLayers2.getByName (HideName2);
HideLayer2.visible = false;
redraw();
}
catch (e) {}
}

function hide_sfweiss () {
var docwht = app.activeDocument;
var myLayers1 = docwht.layers;
var HideName1 = white;
try {
HideLayer1 = myLayers1.getByName (HideName1);
HideLayer1.visible = false;
redraw();
}
catch (e) {}
}


for (var f = 0; f < files.length; f++) {
var doc = app.open(files[f]);
hide_lack ();
hide_sfweiss ();
var pdfFile = new File(app.activeDocument.fullName.toString().replace(".ai",".pdf"));
var saveOpts = new PDFSaveOptions();
saveOpts.pDFPreset = 'Ansichts-PDF 150dpi'; // Name der PDF-Settings für Ansichts-PDF
app.activeDocument.saveAs (pdfFile, saveOpts);
doc.close (SaveOptions.DONOTSAVECHANGES);
}



als Antwort auf: [#562405]
Hier Klicken

Veranstaltungen

Hier können Sie Ihre Anlässe eintragen, welche einen Zusammenhang mit den Angeboten von HilfDirSelbst.ch haben. Die Einträge werden moderiert freigeschaltet. Dies wird werktags üblicherweise innert 24 Stunden erfolgen. pdf-icon Hier eine kleine Anleitung.

Veranstaltungen
26.09.2018

Hochschuloe der Medien, Stuttgart
Mittwoch, 26. Sept. 2018, 19.00 - 21.00 Uhr

Vertrag

Nur auf den ersten Blick scheint dieses Thema exotisch. Aber eine neue EU-Richtlinie und deren Auswirkungen auf deutsche Gesetze werden dieses Thema auch für Publisher interessant machen. Die EU-Richtlinie "2102 zu Barrierefreiheit" besagt folgendes: Ab dem 23. September 2018 müssen alle öffentlichen Stellen ihre neuen (Office- oder PDF-) Dokumente grundsätzlich barrierefrei veröffentlichen. Im Juni wurde der Gesetzentwurf zur Umsetzung dieser Richtlinie im deutschen Bundestag vom "Ausschuss für Arbeit und Soziales" (19/2728) angenommen. Es wird also ernst für "öffentliche Stellen" und damit auch für deren Dienstleister, die mit der Umsetzung beauftragt werden. Die Richtlinie gilt nämlich nicht nur für Bundes- und Landesbehörden, sondern auch für Verbände, die im Allgemeininteresse liegende Aufgaben erfüllen. Das wären somit auch Gerichte, Polizeistellen, Krankenhäuser, Universitäten, Bibliotheken und einige mehr. Weitere Informationen findest Du hier, hier und hier. Wenn also oben genannte Auftraggeber zu Deinen Kunden zählen, solltest Du Dich vorbereiten. Und da es neben Websites auch um alle downloadbaren Dateien geht sind eben auch PDFs zukünftig barrierefrei zu erstellen. Arbeitet man in InDesign, können dort einige Vorbereitungen getroffen werden. Klaas Posselt ist der ausgewiesene Spezialist im deutschsprachigen Raum für alle Fragen rund um das Thema. Deshalb freuen wir uns, dass er uns in einem Vortrag die Grundlagen dazu vermitteln wird. Wir setzen voraus, dass Du den Umgang mit InDesign gewohnt bist, die Gründe und Vorteile von der Nutzung von Formaten kennst und weißt, wie man lange Dokumente „richtig“ aufbaut. Der Vortrag setzt bewusst DANACH ein. Inhalt des Vortrages ist der Hintergrund von „Barrierefreiheit“ und Möglichkeiten und Grenzen innerhalb von InDesign. Es wird erklärt, welche Bedeutung das kostenpflichtige PlugIn MadeToTag hat und warum und für was man es braucht. Ziel ist es den Rahmen aufzuzeigen, in dem sich das Thema „Barrierefreiheit“ in InDesign abspielt. Du weißt hinterher, wo die „Baustellen“ sind, wo Du weitergehende Infos bekommst und welchen Weg Du einschlagen musst. Am nächsten Tag veranstalten wir zwei Bootcamps, die das Thema praktisch vertiefen. "IDUGS Bootcamp #2" und "IDUGS Bootcamp #3" Klaas Posselt ist studierter Dipl.-Ing. für Druck- und Medientechnik und kam über verschiedene Anfragen zum Thema barrierefreie PDF Dokumente. Seit über 10 Jahren arbeitet er in den Bereichen Medientechnik und Publishing zwischen Medienherstellern, Druckermaschinen und digitalen Ausgabekanälen. Er schult, begleitet und unterstützt Kunden bei der Einführung und Optimierung von Publikationsprozessen und auf dem Weg zu neuen digitalen Ausgabekanälen — egal ob E-Books, barrierefreie PDFs oder Webplattformen. Als Chairman des PDF/UA Competence Center der PDF Association beteiligt er sich an der Weiterentwicklung und Verbreitung des Standards PDF/UA für barrierefreie PDF Dokumente. Diese Veranstaltung kommt nur zu Stande durch die freundliche Unterstützung von "Six Offene Systeme GmbH" -- Enterprise-Content-Management-System und Media-Asset-Management-System.

Nein

Organisator: IDUG Stuttgart

Kontaktinformation: Christoph Steffens, E-Mailchristoph.steffens AT gmail DOT com

https://idug47.eventbrite.de

Veranstaltungen
27.09.2018

Screen IT, Uster
Donnerstag, 27. Sept. 2018, 17.30 - 20.00 Uhr

Infoveranstaltung

Das Angebot an Publishing-Software ist gross. Deshalb empfiehlt sich eine externe Beratung durch unabhängige Software-Experten aus der jeweiligen Branche. Nicht immer muss es eine teure Mietlösung sein, die nach Beendigung der Mietdauer einem nicht einmal gehört. Es gibt sehr gute und auch in der Qualität ausreichende Alternativen, ja sogar kostenlose Freeware. Lassen Sie sich an diesem Abend einmal vor Augen führen, was diese Programme können und wie viel sie kosten.

Ja

Organisator: Screen IT und pre2media

Kontaktinformation: Peter Jäger, E-Mailinfo AT pre2media DOT ch

https://www.pre2media.ch/-1/de/infoanlass/