[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Pfad eines geöffneten Dokumentes in Skript verwenden

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

Pfad eines geöffneten Dokumentes in Skript verwenden

monomaniac
Beiträge gesamt: 6

28. Mai 2015, 14:34
Beitrag # 1 von 13
Bewertung:
(4794 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,
ich würde gerne aus einem geöffneten Dokument ein PDF mit einem bestimmten Preset erstellen und dieses PDF mit dem gleichen Namen im gleichen Ordner abspeichern (arbeite auf PC). Ich kann zwar in Javascript meist entziffern, was welche Zeile macht, habe aber vom Programmieren keine Ahnung.
Was ich bisher gefunden habe:

var myPDFExportPreset = app.pdfExportPresets.item("druck");
app.activeDocument.exportFile(ExportFormat.pdfType, File("/c/myTestDocument.pdf"),
false, myPDFExportPreset);

Auf die Art wird in C: ein PDf des geöffneten Dokumentes mit dem Namen myTestDocument.pdf und dem Preset "druck" erzeugt. Ich müsste also diesen Teil hier ersetzen: File("/c/myTestDocument.pdf") und zwar in
File("PfadDesDokumentes/NameDesDokumentes.pdf")

Kann mir jemand sagen, ob das grundsätzlich machbar ist und wenn ja, wie? Danke schonmal.
X

Pfad eines geöffneten Dokumentes in Skript verwenden

Kai Rübsamen
Beiträge gesamt: 4684

28. Mai 2015, 20:56
Beitrag # 2 von 13
Beitrag ID: #540055
Bewertung: |||
(4727 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo!

Ja, das ist machbar. Z.B. so:

Code
// das Dokument im Vordergrund 
var curDoc = app.documents[0];
// die gespeicherte PDF-Vorlage
var pdfPreset = app.pdfExportPresets.itemByName ("Hier den Name der Vorlage eintragen");
// den Suffix vom Dokumentnamen abtrennen
var curName = curDoc.name.split(".")[0];

// der Pfad zum Ordner, in welchem sich das Dokument befindet
try {
// wenn das Dok nicht gespeichert wurde, wirft diese Zeile einen Fehler
var fPath = curDoc.filePath;
}
catch (e) {
alert ("Achtung:\rDas Dokument wurde noch nicht gespeichert!");
exit();
}

// Verweis auf die neue Datei
var theFile = (File(fPath + "/" + curName + ".pdf"));

// der eigentliche Export
if (pdfPreset.isValid) {
curDoc.exportFile(ExportFormat.PDF_TYPE , theFile , false , pdfPreset);
}
else {
alert ("Die Exportvorlage gibt es nicht!\rEs wird mit der Standardeinstellung exportiert.");
curDoc.exportFile(ExportFormat.PDF_TYPE , theFile , false);
}



als Antwort auf: [#540031]

Pfad eines geöffneten Dokumentes in Skript verwenden

monomaniac
Beiträge gesamt: 6

29. Mai 2015, 08:52
Beitrag # 3 von 13
Beitrag ID: #540064
Bewertung:
(4664 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Wow. Danke! Ich werds gleich mal testen und wenn alles klappt, muss meine Frau wohl damit leben, dass unser Erstgeborener, der in Kürze auf die Welt kommt wohl Kai heisen wird :-)

Edit: Es läuft!


als Antwort auf: [#540055]
(Dieser Beitrag wurde von monomaniac am 29. Mai 2015, 09:02 geändert)

Pfad eines geöffneten Dokumentes in Skript verwenden

Gerald Singelmann
  
Beiträge gesamt: 6269

29. Mai 2015, 16:28
Beitrag # 4 von 13
Beitrag ID: #540103
Bewertung: |
(4622 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Die Zeile ist problematisch
Code
var curName = curDoc.name.split(".")[0]; 

da es Anwender gibt, die ihre Dateien ich.will.punkte.indd nennen.

Besser
Code
var curName = curDoc.name.split("."); 
curName.pop();
curName = curName.join(".");


aber eigentlich ungeschlagen:
Code
var curName = curDoc.name.replace(/\.indd$/i,""); 



als Antwort auf: [#540055]

Pfad eines geöffneten Dokumentes in Skript verwenden

Gerald Singelmann
  
Beiträge gesamt: 6269

29. Mai 2015, 16:33
Beitrag # 5 von 13
Beitrag ID: #540104
Bewertung: |
(4620 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Noch mehr genörgel :(

Ich halte es für eine gute Idee, auf try{}catch() zu verzichten, wenn das auf einfache Weise geht.

Dieser Block geht anders:
Code
try {  
// wenn das Dok nicht gespeichert wurde, wirft diese Zeile einen Fehler
var fPath = curDoc.filePath;
}
catch (e) {
alert ("Achtung:\rDas Dokument wurde noch nicht gespeichert!");
exit();
}


,da jedes Dokument die beiden Eigenschaften .modified und .saved besitzt.

doc.saved == true, wenn das Dokument überhaupt schon mal gespeichert wurde.
doc.modified == false, wenn das Dokument seit der letzten Speicherung nicht verändert wurde.


als Antwort auf: [#540055]

Pfad eines geöffneten Dokumentes in Skript verwenden

Kai Rübsamen
Beiträge gesamt: 4684

29. Mai 2015, 18:31
Beitrag # 6 von 13
Beitrag ID: #540110
Bewertung:
(4570 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ich empfinde das nicht als Genörgel. Du darfst dich ruhig hier wieder öfters beteiligen :)

Anstelle von 'split' hätte ich noch die Variante:
Code
var curName = curDoc.name.slice(0,-5); 


Das mit dem try/catch vermeiden, finde ich gut. Danke.

Ich habe es so umgeschrieben:

Code
// Name der PDF-Exportvorlage 
var pdfPresetName = "Hier den Name der Vorlage eintragen";

// vorbeugenderweise das Anzeigen von Dialogen aktivieren
app.scriptPreferences.userInteractionLevel = UserInteractionLevels.interactWithAll;

// prüfen, ob ein Dokument geöffnet ist
if (app.documents.length == 0) {
alert ("Es ist kein Dokument offen.");
exit();
}

// das Dokument im Vordergrund
var curDoc = app.documents[0];

if (!curDoc.saved) {
alert("Achtung!\rPDF kann nicht exportiert werden, da Dokument: '" + curDoc.name + "' noch nie gespeichert wurde.");
exit();
}

// den Suffix vom Dokumentnamen abtrennen
var curName = curDoc.name.replace(/\.indd$/i,"");

// der Pfad zum Ordner, in welchem sich das Dokument befindet
var fPath = curDoc.filePath;
// Verweis auf die neue Datei
var theFile = (File(fPath + "/" + curName + ".pdf"));

// die gespeicherte PDF-Vorlage
var pdfPreset = app.pdfExportPresets.itemByName(pdfPresetName);

// der eigentliche Export
if (pdfPreset.isValid) {
curDoc.exportFile(ExportFormat.PDF_TYPE , theFile , false , pdfPreset);
}
else {
alert ("Die Exportvorlage gibt es nicht!\rEs wird mit der Standardeinstellung exportiert.");
curDoc.exportFile(ExportFormat.PDF_TYPE , theFile , false);
}



als Antwort auf: [#540104]

Pfad eines geöffneten Dokumentes in Skript verwenden

kkauer
Beiträge gesamt: 661

29. Mai 2015, 18:52
Beitrag # 7 von 13
Beitrag ID: #540113
Bewertung:
(4551 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Warum ein Fallback auf einen Standard-Export wenn die Aufgabe klar als "Export mit einem spezifischen Setting" definiert wurde?


als Antwort auf: [#540110]

Pfad eines geöffneten Dokumentes in Skript verwenden

Kai Rübsamen
Beiträge gesamt: 4684

29. Mai 2015, 19:05
Beitrag # 8 von 13
Beitrag ID: #540115
Bewertung:
(4540 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Karsten, das hab ich mich zwischendurch auch gefragt u. dann einfach drin gelassen. Der Fallback macht eigentlich keinen Sinn u. das Skript sollte dann besser abbrechen.

Und ja, das Skript sollte eigentlich einen Hinweis bringen, falls es an dieser Stelle bereits ein PDF mit gleichem Namen gibt. Das hat diese Version noch nicht.

Code
// Name der PDF-Exportvorlage 
var pdfPresetName = "highres";

// vorbeugenderweise das Anzeigen von Dialogen aktivieren
app.scriptPreferences.userInteractionLevel = UserInteractionLevels.interactWithAll;

// prüfen, ob ein Dokument geöffnet ist
if (app.documents.length == 0) {
alert ("Es ist kein Dokument offen.");
exit();
}

// das Dokument im Vordergrund
var curDoc = app.documents[0];

if (!curDoc.saved) {
alert("Achtung!\rPDF kann nicht exportiert werden, da Dokument: '" + curDoc.name + "' noch nie gespeichert wurde.");
exit();
}

// den Suffix vom Dokumentnamen abtrennen
var curName = curDoc.name.replace(/\.indd$/i,"");

// der Pfad zum Ordner, in welchem sich das Dokument befindet
var fPath = curDoc.filePath;
// Verweis auf die neue Datei
var theFile = (File(fPath + "/" + curName + ".pdf"));

// prüfen, ob die PDF-Vorlage vorhanden ist und Dok exportieren
var pdfPreset = app.pdfExportPresets.itemByName(pdfPresetName);
if (!pdfPreset.isValid) {
alert ("Achtung:\rDie angegebene Exportvorlage fehlt!");
exit();
}
else {
alert("Hinweis:\rDas PDF wird mit der Vorlage '" + pdfPresetName + "' exportiert!");
curDoc.exportFile(ExportFormat.PDF_TYPE , theFile , false , pdfPreset);
}



als Antwort auf: [#540113]
(Dieser Beitrag wurde von Kai Rübsamen am 29. Mai 2015, 19:25 geändert)

Pfad eines geöffneten Dokumentes in Skript verwenden

kkauer
Beiträge gesamt: 661

29. Mai 2015, 19:46
Beitrag # 9 von 13
Beitrag ID: #540117
Bewertung:
(4510 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
nun ist es ganz kapøtt, machen wir Feierabend/WE ;)

EDIT: Ich habe mich "verlesen"! Das wäre eine Möglichkeit.


als Antwort auf: [#540115]
(Dieser Beitrag wurde von kkauer am 29. Mai 2015, 20:05 geändert)

Pfad eines geöffneten Dokumentes in Skript verwenden

Uwe Laubender
Beiträge gesamt: 5316

30. Mai 2015, 08:53
Beitrag # 10 von 13
Beitrag ID: #540123
Bewertung:
(4380 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf [ Kai Rübsamen ] Und ja, das Skript sollte eigentlich einen Hinweis bringen, falls es an dieser Stelle bereits ein PDF mit gleichem Namen gibt. Das hat diese Version noch nicht.


Hallo, Kai!

Es gibt noch 'ne Möglichkeit weshalb der Export schiefgehen könnte: Das PDF wurde bereits geschrieben, kann aber nicht überschrieben werden, da z.B. in Acrobat Pro geöffnet.

Diese Situation könnte man umgehen, indem der Dateiname eine "einzigartige" Komponente enthält. Zum Beispiel das Ergebnis aus Date.now() als String. Ist aber hier nicht "in Auftrag gegeben".


als Antwort auf: [#540115]

Pfad eines geöffneten Dokumentes in Skript verwenden

Uwe Laubender
Beiträge gesamt: 5316

30. Mai 2015, 09:58
Beitrag # 11 von 13
Beitrag ID: #540126
Bewertung:
(4344 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf [ Gerald Singelmann ] aber eigentlich ungeschlagen:
Code
var curName = curDoc.name.replace(/\.indd$/i,""); 



Hallo, Kai!
Gerald hat vollkommen recht. Diese Methode ist ungeschlagen, denn sie deckt mehrere "Fälle" ab:

1. Klein/Groß/Gemischtschreibung der Endung ist egal
2. Funktioniert, ob nun eine Endung vorhanden ist oder *nicht*
3. Funktioniert auch, wenn keine Endung vergeben ist und der Dateiname die Anzahl von 6 Zeichen unterschreitet

Deine Methode mit slice() zieht immer 5 Zeichen am Namensende ab.

Ich weiss, die Chance, dass jemand seine InDesign-Dateien *ohne* Endung speichert ist gering, aber immerhin gegeben.


als Antwort auf: [#540103]

Pfad eines geöffneten Dokumentes in Skript verwenden

Kai Rübsamen
Beiträge gesamt: 4684

7. Aug 2015, 13:17
Beitrag # 12 von 13
Beitrag ID: #541831
Bewertung:
(3581 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Uwe,

Zitat Es gibt noch 'ne Möglichkeit weshalb der Export schiefgehen könnte: Das PDF wurde bereits geschrieben, kann aber nicht überschrieben werden, da z.B. in Acrobat Pro geöffnet.

Ist das so?

Gerade mal getestet. Das PDF ist in Acrobat offen. PDF exportiert mit try/catch und eigentlich einen Fehler erwartet. Es gibt aber keinen. Stattdessen bleibt das Dokument in Acrobat geöffnet und verweist auch auf einen Pfad. Der Finder zeigt aber ein neues Speicherdatum. Nach Schließen und erneutem Öffnen zeigt dann das PDF den neuen Inhalt.


als Antwort auf: [#540123]

Pfad eines geöffneten Dokumentes in Skript verwenden

Uwe Laubender
Beiträge gesamt: 5316

7. Aug 2015, 13:50
Beitrag # 13 von 13
Beitrag ID: #541833
Bewertung:
(3571 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo, Kai!
Das ist mir neu.

Hatte den Fall vor ein paar Jahren, damals mit InDesign CS5 und Adobe Reader 9 getestet. Genauer gesagt, es ging damals darum den PDF-Export nicht im Hintergrund ablaufen zu lassen, sondern nach der alten Methode im Vordergrund (CS4 und davor).


als Antwort auf: [#541831]
X