[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: 70

7. Feb 2018, 10:32
Beitrag # 1 von 3
Bewertung:
(2992 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: 70

13. Feb 2018, 16:39
Beitrag # 2 von 3
Beitrag ID: #562405
Bewertung:
(1910 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: 70

14. Feb 2018, 14:19
Beitrag # 3 von 3
Beitrag ID: #562414
Bewertung:
(1885 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]

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
16.02.2019 - 29.06.2019

3400 Burgdorf, BE
Samstag, 16. Feb. 2019, 08.30 Uhr - Samstag, 29. Juni 2019, 08.30 Uhr

Lehrgang

Mit dem Erwerb des Zertifikats Publisher Basic beweisen Sie Ihre Kompetenz für die Mitarbeit bei der Gestaltung und Umsetzung von Publishing-Projekten. Das Zertifikat wird bei den Arbeitgebern immer bekannter; diese wissen, dass Sie mit diesem Abschluss sehr gutes KnowHow erworben haben. Nach erfolgreicher Absolvierung dieses Lehrgangs sind Sie in der Lage, die Zertifikatsprüfung abzulegen.

Ja

Organisator: PubliCollege GmbH

Kontaktinformation: Beat Kipfer, E-Mailinfo AT publicollege DOT ch

www.publicollege.ch

Publisher Basic
Veranstaltungen
20.02.2019

Aarau
Mittwoch, 20. Feb. 2019, 17.30 Uhr

Kurs

Der Kurs richtet sich an interessierte PhotoshopanwenderInnen, welche ihre Kenntnisse in der Bildbearbeitung vertiefen möchten. Da der Fokus auf das QV der Polygrafie gelegt wird, können Ausbildner, Berufsleute, Prüfungsexperten sowie Lernende gleichermassen profitieren.

Mittwoch, 20. Februar 2019 bis Mittwoch, 13. März 2019
4 Kursabende à 4 Lektionen, 17.30 bis 20.45 Uhr
CHF 352.–

Nein

Organisator: Schule für Gestaltung Aargau

Kontaktinformation: Nadja Elsener, E-Mailnadja.elsener AT sfgaargau DOT ch

https://www.sfgaargau.ch/kurse/E-004.php

Hier Klicken