[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, 12:34
Beitrag # 1 von 13
Bewertung:
(3947 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: 4664

28. Mai 2015, 18:56
Beitrag # 2 von 13
Beitrag ID: #540055
Bewertung: |||
(3880 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);
}


Gruß Kai Rübsamen


als Antwort auf: [#540031]

Pfad eines geöffneten Dokumentes in Skript verwenden

monomaniac
Beiträge gesamt: 6

29. Mai 2015, 06:52
Beitrag # 3 von 13
Beitrag ID: #540064
Bewertung:
(3817 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, 07:02 geändert)

Pfad eines geöffneten Dokumentes in Skript verwenden

Gerald Singelmann
  
Beiträge gesamt: 6249

29. Mai 2015, 14:28
Beitrag # 4 von 13
Beitrag ID: #540103
Bewertung: |
(3775 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: 6249

29. Mai 2015, 14:33
Beitrag # 5 von 13
Beitrag ID: #540104
Bewertung: |
(3773 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: 4664

29. Mai 2015, 16:31
Beitrag # 6 von 13
Beitrag ID: #540110
Bewertung:
(3723 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);
}


Gruß Kai Rübsamen


als Antwort auf: [#540104]

Pfad eines geöffneten Dokumentes in Skript verwenden

kkauer
Beiträge gesamt: 661

29. Mai 2015, 16:52
Beitrag # 7 von 13
Beitrag ID: #540113
Bewertung:
(3704 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: 4664

29. Mai 2015, 17:05
Beitrag # 8 von 13
Beitrag ID: #540115
Bewertung:
(3693 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);
}


Gruß Kai Rübsamen


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

Pfad eines geöffneten Dokumentes in Skript verwenden

kkauer
Beiträge gesamt: 661

29. Mai 2015, 17:46
Beitrag # 9 von 13
Beitrag ID: #540117
Bewertung:
(3663 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, 18:05 geändert)

Pfad eines geöffneten Dokumentes in Skript verwenden

Uwe Laubender
Beiträge gesamt: 4956

30. Mai 2015, 06:53
Beitrag # 10 von 13
Beitrag ID: #540123
Bewertung:
(3533 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".
*****
Mit herzlichem Gruß,
Uwe Laubender


als Antwort auf: [#540115]

Pfad eines geöffneten Dokumentes in Skript verwenden

Uwe Laubender
Beiträge gesamt: 4956

30. Mai 2015, 07:58
Beitrag # 11 von 13
Beitrag ID: #540126
Bewertung:
(3497 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.
*****
Mit herzlichem Gruß,
Uwe Laubender


als Antwort auf: [#540103]

Pfad eines geöffneten Dokumentes in Skript verwenden

Kai Rübsamen
Beiträge gesamt: 4664

7. Aug 2015, 11:17
Beitrag # 12 von 13
Beitrag ID: #541831
Bewertung:
(2734 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.

Gruß Kai Rübsamen


als Antwort auf: [#540123]

Pfad eines geöffneten Dokumentes in Skript verwenden

Uwe Laubender
Beiträge gesamt: 4956

7. Aug 2015, 11:50
Beitrag # 13 von 13
Beitrag ID: #541833
Bewertung:
(2724 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).
*****
Mit herzlichem Gruß,
Uwe Laubender


als Antwort auf: [#541831]
X

Veranstaltungskalender

Hier können Sie Ihre Anlässe eintragen, welche einen Zusammenhang mit den Angeboten von HilfDirSelbst.ch wie z.B. Adobe InDesign, Photoshop, Illustrator, PDF, Pitstop, Affinity, Marketing, SEO, Büro- und Rechtsthemen etc. haben. Die Einträge werden moderiert freigeschaltet. Dies wird werktags üblicherweise innert 24 Stunden erfolgen.

pdf-icon Hier eine kleine Anleitung hinsichtlich Bedeutung der auszufüllenden Formularfelder.

Veranstaltungen
05.02.2021 - 05.11.2021

Digicomp Academy AG, Limmatstrasse 50, 8005 Zürich
Freitag, 05. Feb. 2021, 13.00 Uhr - Freitag, 05. Nov. 2021, 17.00 Uhr

Lehrgang

Bilden Sie sich zum zertifizierten Publishing-Multimedia-Profi aus. Neben Fotografie und Video befassen Sie sich mit der Medienproduktion, digitalen Publikationen und dem Webdesign für Desktop- und mobile Endgeräte.

Preis: CHF 10'500.-
Dauer: 30 Tage (ca. 210 Lektionen) – Unterricht findet jeweils am Freitag von 13 - 19 Uhr und Samstag von 09 - 17 Uhr statt

Ja

Organisator: Digicomp Academy AG

Kontaktinformation: Kundenberater-Team, E-Mailkundenberatung AT digicomp DOT ch

digicomp.ch/d/9PM

Veranstaltungen
02.08.2021 - 03.08.2021

Digicomp Academy, Bern,Basel
Montag, 02. Aug. 2021, 08.30 Uhr - Dienstag, 03. Aug. 2021, 17.00 Uhr

Kurs

In diesem Advanced-Kurs erlernen Sie weitergehende Methoden im Dokumentenaufbau, der Typografie und im Bereich Layouttechniken. Nach diesem Kurs können Sie strukturierte Dokumente erstellen oder bestehende effizienter anpassen.

Preis: 1'400.– zzgl. 7.7% MWST
Dauer2 Tage

Ja

Organisator: Digicomp Academy AG

Kontaktinformation: Kundenberater-Team, E-Mailkundenberater AT digicomp DOT ch