// Save and Export open Docs as PDF.jsx
// Version 1.0
// 27.9.2007 Wolfgang Reszel
//
// Speichert alle offenen InDesign-Dokumente und exportiert sie anschließend als PDF. Die PDF-Vorgabe kann vorher ausgewählt werden.
// Vorgabewerte
initPreferences();
Preferences.PdfProfile = "ID Modul 210"; // PDF-Vorgabe (Name oder Nummer, Default: 6)
Preferences.SaveToDesktop = false; // PDF immer auf Schreibtisch exportieren (nur Mac)
Preferences.CloseAfterExporting = true; // Dokumente nach dem Exportieren schließen
//Preferences.Suffix = " [###]"; // Text, welcher zum Dateinamen hinzugefügt werden soll (### = PDF-Vorgabename)
//Preferences.Prefix = "";
//Preferences.SuffixPreset = {
// "[ID Modul 210]" : " [Mod]",
//}
//Preferences.UseSuffixPreset = {
// "[ID Modul 210]" : true,
//}
//Preferences.SuffixWebPreset = {
// "[ID Modul 210]" : false,
//}
//Preferences.PrefixPreset = {
// "[ID Modul 210]" : "",
//}
//Preferences.UsePrefixPreset = {
// "[ID Modul 210]" : false,
//}
//Preferences.PrefixWebPreset = {
// "[ID Modul 210]" : false,
//}
// Ab hier keine Veränderungen vornehmen
$.localize = true;
// Sprachstrings
msgCancel = {de:"Abbrechen", en:"Cancel" };
msgOk = {de:"Sichern und Exportieren", en:"save and export"};
msgNoOpenDocs = {en:"No open documents!", de: "Es gibt keine offenen Dokumente!"};
msgTitle = {en:"Save and Export all open documents as PDF", de:"Geöffnete Dokumente sichern und als PDF exportieren"};
msgIntro = {en:"PDF export profile:", de:"PDF-Export-Vorgabe:"};
msgNoPreset = {en:"No export preset selected!", de:"Keine PDF-Export-Vorgabe ausgewählt"};
msgPrefix = {en:"filename suffix:", de:"Vor dem Dateinamen hinzufügen:" } ;
msgSuffix = {en:"filename suffix:", de:"Hinter dem Dateinamen hinzufügen:" } ;
msgSuffixVar = {en:"%PROFILE%", de:"%EXPORTVORGABE%"};
msgSaveToDesktop = {en:"Export to desktop", de:"Auf Schreibtisch exportieren"};
msgCloseDocs = {en:"Close documents after exporting", de:"Dokumente nach dem Exportieren schließen"};
msgFinished = {en:"%1 of %2 documents have been exported successfully.", de:"%1 von %2 Dokumenten wurden erfolgreich exportiert."};
msgFinishedError = {en:"%1 of %2 documents have been exported.\nFollowing documents couldn't be exported:", de:"%1 von %2 Dokumenten wurden exportiert.\nDie folgenden Dokumente konnten nicht exportiert werden:"};
msgExportError = {en:" (export error)", de:" (Fehler beim Exportieren)"};
msgSaveError = {en:" (save error)", de:" (Fehler beim Sichern)"};
msgWebNaming = {en:"web",de:"Web"};
// Wenn kein Dokument offen, dann Beenden
if (app.documents.length<1) { alert(msgNoOpenDocs); exit(); }
readPreferences();
// Dialogfenster erstellen
var dlg = new Window('dialog', localize(msgTitle) );
dlg.alignChildren = 'left';
dlg.panel = dlg.add('panel');
dlg.panel.alignChildren = 'left';
dlg.profile = dlg.panel.add('group', undefined );
dlg.profile.add('statictext', undefined, localize(msgIntro));
dlg.theList = dlg.profile.add('dropdownlist', undefined);
dlg.edit1 = dlg.panel.add('group', undefined );
dlg.useprefix = dlg.edit1.add('checkbox', undefined, localize(msgPrefix) );
dlg.prefix = dlg.edit1.add('edittext', undefined, Preferences.Prefix, {name:'prefix'} );
dlg.prefix.characters = 20;
dlg.prefixweb = dlg.edit1.add('checkbox', undefined, localize(msgWebNaming) );
dlg.edit2 = dlg.panel.add('group', undefined );
dlg.usesuffix = dlg.edit2.add('checkbox', undefined, localize(msgSuffix) );
dlg.suffix = dlg.edit2.add('edittext', undefined, Preferences.Suffix, {name:'suffix'} );
dlg.suffix.characters = 20;
dlg.suffixweb = dlg.edit2.add('checkbox', undefined, localize(msgWebNaming) );
dlg.options = dlg.add('group', undefined );
dlg.savetodesktop = dlg.options.add('checkbox', undefined, localize(msgSaveToDesktop));
dlg.savetodesktop.value = Preferences.SaveToDesktop;
if (!($.os.indexOf("Mac")>-1)) {
dlg.savetodesktop.enabled = false;
dlg.savetodesktop.value = false;
}
dlg.closedocs = dlg.options.add('checkbox', undefined, localize(msgCloseDocs));
dlg.closedocs.value = Preferences.CloseAfterExporting;
dlg.buttons = dlg.add('group',undefined,{orientation:'row'});
dlg.buttons.alignment='center';
dlg.buttons.add('button', undefined, localize(msgCancel), {name:'cancel'});
dlg.buttons.add('button', undefined, localize(msgOk), {name:'ok'} );
var lastSelection = null;
var suffixNoWeb = "";
var prefixNoWeb = "";
dlg.theList.onChange = function () {
if (this.selection != null) {
if (this.selection.text != lastSelection) {
if (Preferences.SuffixPreset[this.selection.text] != null) {
dlg.suffix.text = Preferences.SuffixPreset[this.selection.text];
} else {
dlg.suffix.text = Preferences.Suffix;
}
if (Preferences.PrefixPreset[this.selection.text] != null) {
dlg.prefix.text = Preferences.PrefixPreset[this.selection.text];
} else {
dlg.prefix.text = Preferences.Prefix;
}
if (Preferences.SuffixWebPreset[this.selection.text]) {
dlg.suffixweb.value = true;
} else {
dlg.suffixweb.value = false;
}
if (Preferences.PrefixWebPreset[this.selection.text]) {
dlg.prefixweb.value = true;
} else {
dlg.prefixweb.value = false;
}
if (Preferences.UseSuffixPreset[this.selection.text]) {
dlg.usesuffix.value = true;
dlg.suffix.enabled = true;
dlg.suffixweb.enabled = true;
} else {
dlg.usesuffix.value = false;
dlg.suffix.enabled = false;
dlg.suffixweb.enabled = false;
}
if (Preferences.UsePrefixPreset[this.selection.text]) {
dlg.useprefix.value = true;
dlg.prefix.enabled = true;
dlg.prefixweb.enabled = true;
} else {
dlg.useprefix.value = false;
dlg.prefix.enabled = false;
dlg.prefixweb.enabled = false;
}
suffixNoWeb = "";
prefixNoWeb = "";
}
// Platzhalter ### im Suffix durch PDF-Vorgabe ersetzen
dlg.suffix.text = dlg.suffix.text.replace ("###", myCleanFileName(this.selection.text));
dlg.suffix.text = dlg.suffix.text.replace ("[[","[");
dlg.suffix.text = dlg.suffix.text.replace ("]]","]");
if (dlg.suffixweb.value == true) {
suffixNoWeb = dlg.suffix.text;
dlg.suffix.text = URLencode(dlg.suffix.text);
} else {
if (suffixNoWeb != "") dlg.suffix.text = suffixNoWeb;
}
dlg.prefix.text = dlg.prefix.text.replace ("###", myCleanFileName(this.selection.text));
dlg.prefix.text = dlg.prefix.text.replace ("[[","[");
dlg.prefix.text = dlg.prefix.text.replace ("]]","]");
if (dlg.prefixweb.value == true) {
prefixNoWeb = dlg.prefix.text;
dlg.prefix.text = URLencode(dlg.prefix.text);
} else {
if (prefixNoWeb != "") dlg.prefix.text = prefixNoWeb;
}
}
lastSelection = this.selection.text;
};
dlg.suffixweb.onClick = function () {
dlg.theList.notify('onChange');
};
dlg.prefixweb.onClick = function () {
dlg.theList.notify('onChange');
};
dlg.usesuffix.onClick = function () {
if (this.value == true) {
dlg.suffix.enabled = true;
dlg.suffixweb.enabled = true;
} else {
dlg.suffix.enabled = false;
dlg.suffixweb.enabled = false;
}
};
dlg.useprefix.onClick = function () {
if (this.value == true) {
dlg.prefix.enabled = true;
dlg.prefixweb.enabled = true;
} else {
dlg.prefix.enabled = false;
dlg.prefixweb.enabled = false;
}
};
//dlg.usesuffix.notify('onClick');
//dlg.useprefix.notify('onClick');
//dlg.usesuffix.notify('onClick');
//dlg.useprefix.notify('onClick');
for(var onePreset = 0; onePreset < app.pdfExportPresets.length; onePreset++){
dlg.theList.add('item',app.pdfExportPresets.item(onePreset).name,onePreset);
if (app.pdfExportPresets.item(onePreset).name == Preferences.PdfProfile || onePreset == Preferences.PdfProfile-1) {
dlg.theList.selection = onePreset;
}
}
if (!dlg.theList.selection) { dlg.theList.selection = 0; }
// Welcher Knopf wurde gedrückt
result = dlg.show();
// Wenn nicht auf Exportieren geklickt wurde, Skript beenden
if (result != 1) { exit(); }
// Keine PDF-Vorgabe ausgewählt
var myPreset = dlg.theList.selection;
if (!myPreset) { alert(msgNoPreset); exit();}
var suffix = "";
if (dlg.usesuffix.value == true) {
var suffix = dlg.suffix.text;
}
var prefix = "";
if (dlg.useprefix.value == true) {
var prefix = dlg.prefix.text;
}
Preferences.PdfProfile = dlg.theList.selection.text;
Preferences.Suffix = suffix;
Preferences.Prefix = prefix;
Preferences.SaveToDesktop = dlg.savetodesktop.value;
Preferences.CloseAfterExporting = dlg.closedocs.value;
//Preferences.PrefixPreset[Preferences.PdfProfile] = Preferences.Prefix;
//Preferences.SuffixPreset[Preferences.PdfProfile] = Preferences.Suffix;
//Preferences.UseSuffixPreset[Preferences.PdfProfile] = dlg.usesuffix.value;
//Preferences.UsePrefixPreset[Preferences.PdfProfile] = dlg.useprefix.value;
//Preferences.SuffixWebPreset[Preferences.PdfProfile] = dlg.suffixweb.value;
//Preferences.PrefixWebPreset[Preferences.PdfProfile] = dlg.prefixweb.value;
//writePreferences();
// Initialisierung
var myDocs = app.documents;
var maxDocs = myDocs.length;
var exportedDocs = 0;
var errors = "";
var myCounter = 0;
// Fenster mit Fortschrittbalken anzeigen
var progress = new Window('palette', localize(msgTitle) );
progress.bar = progress.add('progressbar');
progress.file = progress.add('statictext');
progress.file.size = [500,15];
progress.bar.size = [500,15];
progress.bar.maxvalue = maxDocs*2;
progress.show();
// Alle offenen Dokumente verarbeiten
for( oneDoc = 0 ; oneDoc < myDocs.length ; oneDoc++ ){
myCounter++;
myFile = myDocs[oneDoc];
progress.file.text = myCounter+"/"+maxDocs+": "+myFile.name;
progress.bar.value= myCounter*2-1;
myFile.save();
progress.bar.value= myCounter*2-0.01;
if (myFile.saved) {
// Entscheiden, ob auf Schreibtisch oder im Dokumentordner exportiert wird
if (dlg.savetodesktop.value) {
var path = '~/Desktop';
} else {
var path = myFile.filePath;
}
// Dateiname setzen
if (dlg.suffixweb.value == true) {
var myFilename = URLencode(cutFileName(myFile.name));
} else {
var myFilename = cutFileName(myFile.name);
}
var pdfFile = new File( path +'/' + prefix + myFilename + suffix + '.pdf' )
try{
// PDF exportieren
app.properties.pdfExportPreferences.pageRange = "1886547553"; // Alle Seiten
myFile.exportFile(ExportFormat.pdfType, pdfFile, false, myPreset.toString() );
exportedDocs++;
}
catch(e){
errors = errors + "\n" + myFile.name + localize(msgExportError);
};
} else {
errors = errors + "\n" + myFile.name + localize(msgSaveError);
}
if (dlg.closedocs.value) { myFile.close(); oneDoc--;}
}
progress.bar.value= maxDocs*2;
//if (errors == "") {
// alert(localize(msgFinished,exportedDocs,maxDocs));
//} else {
// alert(localize(msgFinishedError,exportedDocs,maxDocs)+errors);
//}
exit();
// Funktion zum Abtrennen der Dateiendung
function cutFileName (oneFile) {
return oneFile.toString().substring (0, oneFile.length-5)
}
// Funktion zum Ersetzen von (hinsichtlich des Dateisystems) problematischen
// Zeichen im Namen eines Vorgabesets (Slash, Backslash, Doppelpunkt)
function myCleanFileName(oneFilename) {
var oneFilename = String(oneFilename.toString().split('/').join('_').split('\\').join('_').split(':').join('¯'));
return oneFilename;
}
function URLencode(string) {
string = string.replace(/ /g,"_").toLowerCase();
string = string.replace(/ä/g,"ae");
string = string.replace(/ö/g,"oe");
string = string.replace(/ü/g,"ue");
string = string.replace(/ß/g,"ss");
return string;
}
// Voreinstellungen laden und speichern
// 2007-10-05 Wolfgang Reszel
//
// - Am Anfang eines Skripts muss initPreferences() aufgerufen werden
// - Danach können mit Preferences.xxx = yyy, Preferences.yyy = zzz ...
// die Standardeinstellungen festgelegt werden
// - Es folgt readPreferences(), welches die Einstellungsdatei ausliest
// und das Object Preferences entsprechend ändert
// - Es können Preferences-Objekte verändert und auch neue angelegt werden
// - Mit writePreferences() wir das komplette Preferences-Objekt in die
// Einstellungsdatei geschrieben
//
// Die Einstellungsdatei befindet sich eine Hierarchiestufe höher als das
// Skript und dort im Preferences-Ordner. Hier ein Beispiel:
// Skript: ~/Library/Preferences/Adobe InDesign/Version 5.0/Scripts/Scripts Panel/Skript.jsx
// Einstellungsdatei: ~/Library/Preferences/Adobe InDesign/Version 5.0/Scripts/Preferences/Skript.preferences
function initPreferences() {
scriptFile = File($.fileName);
scriptName = scriptFile.name.match(/^.*\./g).toString();
preferencesFile = File(scriptFile.parent.path.toString() + "/Preferences/" + scriptName + "preferences");
preferencesFile.encoding = "UTF-8";
Preferences = new Object();
}
function readPreferences() {
if (preferencesFile.open("r")) {
try {
var evaluated = eval(preferencesFile.read());
if (evaluated) Preferences = evaluated;
} catch (e) {}
}
preferencesFile.close();
}
//function writePreferences( ) {
// if (!preferencesFile.parent.exists) {preferencesFile.parent.create();}
// if (preferencesFile.open("w")) {
// preferencesFile.writeln(Preferences.toSource());
// }
// preferencesFile.close();
//}