[GastForen Programmierung/Entwicklung JavaScript PDF Export Indesign 2019 per JavaScript

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

PDF Export Indesign 2019 per JavaScript

mikeW
Beiträge gesamt: 6

17. Jan 2020, 08:36
Beitrag # 1 von 12
Bewertung:
(1763 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,
seit einigen Jahren nutzen wir ein Script, welches nach Auswahl eines Ordners die darin befindlichen Indesign-Docs mit einem ebenfalls ausgewählten Profil als PDF schreibt. Seit wir von Indesign 2015 auf 2019 umgestellt haben, funktioniert das leider nicht mehr - die Dateien haben einfach nur verpixelte Bilder.
Nach langen Versuchen hat sich herausgestellt, dass nicht die Profile das Problem sind, sondern Indesign einfach die verknüpften Bilddateien nicht lädt und so den Export als PDF mit den eingebetteten Vorschaubildern macht. Unterbricht man den Ablauf der Schleife mit einem alert("test") zeigt sich auch, dass hinter jeder Verknüpfung ein Uhr-Symbol steht, was wohl soviel heisst, wie warte aufs laden - eine Beschreibung dazu habe ich nicht finden können.
Kurios ist, sobald ich das Script abbreche, verschwinden die Uhr-Symbole und ich kann die Datei mit dem gleichen Script ausdrucken, so lange ich sie geöffnet lasse.
Noch kurioser wird es, wenn man eine Schleife über alle Verknüpfungen laufen lässt und während dieser Schleife ein alert("test") ausgibt - dann kann man direkt sehen, wie alle Verknüpfungen ihr Uhr-Symbol verlieren und am Ende das Doc korrekt als PDF geschrieben wird.
Langer Rede... die Frage ist nun, ob Adobe es generell untersagt, in einer Schleife aus mehreren Indesign-Docs PDFs zu schreiben und es auf diese Weise verhindern möchte, oder ob noch ein Fehler im Detail steckt. Ich habe mal einen verkürzten Code angehängt, vielleicht findet hier schon jemand einen Hinweis.
Code
	// INDD Exportieren als PDF in angegebenes Verzeichnis 
var selfolder = Folder.selectDialog("Wählen Sie das Verzeichnis, in dem sich die InDesign-Dateien befinden!");
var zf = Folder.selectDialog("Wählen Sie das Verzeichnis, in das die PDF-Dateien gespeichert werden sollen!");
var pdfPresetName = '';
var dateierw=FileExt.editContents;
if ( (selfolder != null) && (zf != null) ) {
var myPDFExportPreset = app.pdfExportPresets.item(0);
var zielfolder = getpathPath(""+zf);
var myFolder = new Folder(selfolder);
var dateiliste = myFolder.getFiles("*.indd");
for (var i=0; i < dateiliste.length; i++) {
var quelldatei = File(dateiliste[i]);
var zieldatei = zielfolder+changeExtension(getfileName(quelldatei+""), ".indd", ".pdf",dateierw);
// lade Datei in Indesign
try {
var myDocument = app.open(quelldatei, true);
} catch (err) {
getErrMsg (err);
}
// exportiere Datei in angegebenes Verzeichnis
try {
myDocument.exportFile(ExportFormat.pdfType, File(zieldatei), false, myPDFExportPreset, "", true);
//myDocument.close(SaveOptions.no);
} catch (err) {
getErrMsg(err);
}
}

}

X

PDF Export Indesign 2019 per JavaScript

Uwe Laubender
Beiträge gesamt: 4621

17. Jan 2020, 09:48
Beitrag # 2 von 12
Beitrag ID: #573616
Bewertung:
(1754 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Mike,

sind denn die Verknüpfungen in den anvisierten Dateien ok?
Oder braucht InDesign einfach Zeit, den Abgleich zu machen, wenn Du eine solche CC 2019-Datei händisch öffnest?

Möglicherweise öffnest Du CC 2015-Dateien in CC-2019?
Dann solltest Du gleich nach dem Öffnen die Datei speichern. Und erst dann weitermachen.

Hm. Die Zeile ist auskommentiert, in der Du die InDesign-Datei nach dem PDF-Export schließt. Das ist nicht gut. Je nach Umfang Deiner Dateiliste und Umfang Deiner InDesign-Datei wird InDesign dann langsamer und langsamer.

Noch ein Tipp:

Code
// Am Anfang des Skripts: 
app.scriptPreferences.properties =
{
enableRedraw : false ,
userInteractionLevel : UserInteractionLevels.NEVER_INTERACT
};



Code
// Bei geordnetem Abbruch und am Ende des Skripts: 
app.scriptPreferences.properties =
{
enableRedraw : true,
userInteractionLevel : UserInteractionLevels.INTERACT_WITH_ALL
};


Was noch dazu helfen könnte:
Setze das zweite Argument von app.open() auf false, sodass die InDesign-Dateien fensterlos geöffnet werden.

Code
var myDocument = app.open( quelldatei, false ); 

*****
Mit herzlichem Gruß,
Uwe Laubender


als Antwort auf: [#573613]

PDF Export Indesign 2019 per JavaScript

mikeW
Beiträge gesamt: 6

17. Jan 2020, 10:03
Beitrag # 3 von 12
Beitrag ID: #573618
Bewertung:
(1745 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Uwe,
danke für die schnelle Antwort, aber alles das hatte ich schon probiert:
1. im "Normalfall" wird die Datei geschlossen - ist jetzt nur zu Testzwecken offen geblieben
2. die Dateien sind alle bereits 2019er, da gibt es kein Problem
3. alle Verknüpfungen sind im Zugriff - originär liegen diese auf einem Netzlaufwerk, aber zum Test habe ich mir ein einfaches Doc mal mit lokalen Bildern angelegt mit dem gleichen Resultat.
4. app.open(datei,false) ist auch der "Normalfall", wenn man sie sichtbar hat, kann man die Palette mit den Verknüpfungen halt sehen.
5. auch die preferences ändern am Verhalten leider nichts.
Viele Grüße,
Mike


als Antwort auf: [#573616]

PDF Export Indesign 2019 per JavaScript

Uwe Laubender
Beiträge gesamt: 4621

17. Jan 2020, 12:09
Beitrag # 4 von 12
Beitrag ID: #573619
Bewertung:
(1732 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Mike,
dann probiere mal die PDFs automatisiert mit Peter Kahrels Skript Batch Convert/Export zu exportieren. Falls das auch nicht funktioniert, könnte der Wurm im Betriebssystem sein.

Ich kann jedenfalls das Phänomen hier mit meinem InDesign CC 2019 auf Windows 10 nicht beobachten.

Hier der Link zu Peter Kahrels Skript:

Batch-process (convert/export/import) documents
Peter Kahrel | Letzter Update: 2 Feb. 2019
https://creativepro.com/...n/batch_convert.html
*****
Mit herzlichem Gruß,
Uwe Laubender


als Antwort auf: [#573618]
(Dieser Beitrag wurde von Uwe Laubender am 17. Jan 2020, 12:10 geändert)

PDF Export Indesign 2019 per JavaScript

Uwe Laubender
Beiträge gesamt: 4621

17. Jan 2020, 14:07
Beitrag # 5 von 12
Beitrag ID: #573620
Bewertung:
(1716 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Mike,

was Du noch gar nicht erwähnt hast:
Auf welchem Betriebsystem genau bist Du unterwegs?
*****
Mit herzlichem Gruß,
Uwe Laubender


als Antwort auf: [#573613]

PDF Export Indesign 2019 per JavaScript

mikeW
Beiträge gesamt: 6

17. Jan 2020, 15:21
Beitrag # 6 von 12
Beitrag ID: #573621
Bewertung:
(1696 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Das Problem ist auf Windows 10 und Windows 7 - hat wohl damit nix zu tun.
Ich habe jetzt begonnen, mal mit dem von Dir erwähnten Tool zu experimentieren. Ohne weitere Einstellungen kommt das gleiche bei raus. Sobald ich aber das Häkchen bei Update modified Links setze, funktioniert es.
Daher habe ich mein eigenes Script mal um eine Link-Anpassungsfunktion erweitert, obwohl das laut Status der Links eigentlich nicht nötig ist (der Status ist für alle Links "Normal" - was auch immer das heisst). Nun dachte ich, einfach über alle Links gehen und update()-Funktion aufrufen. Schnell das Script erweitert - ohne Erfolg. Durch Zufall hatte ich mir dann den Status der Links noch in dieser Schleife ausgeben lassen, und jetzt funktionierte es. Warum auch immer - die Frage ist, ob man sich nun auf das Resultat verlasssen kann?
p.s. übrigens auch schade, dass das andere Script nur als bin-Version vorliegt...


als Antwort auf: [#573620]
(Dieser Beitrag wurde von mikeW am 17. Jan 2020, 15:22 geändert)

PDF Export Indesign 2019 per JavaScript

Uwe Laubender
Beiträge gesamt: 4621

17. Jan 2020, 16:13
Beitrag # 7 von 12
Beitrag ID: #573622
Bewertung:
(1690 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf: …Durch Zufall hatte ich mir dann den Status der Links noch in dieser Schleife ausgeben lassen, und jetzt funktionierte es. Warum auch immer - die Frage ist, ob man sich nun auf das Resultat verlasssen kann?
p.s. übrigens auch schade, dass das andere Script nur als bin-Version vorliegt...


Hallo Mike,
kannst Du mal Code posten zum Nachvollziehen?

1. Der Code, der die Links updaten sollte, aber zu keiner Besserung führte.
2. Der Code, der nun das bessere Resultat bringt.

Ohne da einen Vergleich zu haben, kann ich nichts dazu sagen.

Auch vielleicht wichtig:
Welche Dateiarten sind denn platziert?
*****
Mit herzlichem Gruß,
Uwe Laubender


als Antwort auf: [#573621]

PDF Export Indesign 2019 per JavaScript

mikeW
Beiträge gesamt: 6

17. Jan 2020, 16:25
Beitrag # 8 von 12
Beitrag ID: #573623
Bewertung:
(1685 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Uwe,
hier der Code:
Code
                
var linklist = myDocument.links;
for (var lc=0; lc < linklist.length; lc++) {
var link = linklist.item(lc);
var ln = "";
try {
ln=link.status;
$.writeln("Link: "+getLinkStatusText(ln));
link.update();
} catch (err) {
debug=debug+"\n"+getErrMsg (err);
}
}


Wenn ich link.status weglasse, gibt es immer noch keine originalen Bilder im PDF, mit schon. Sinn macht das für mich eigentlich nicht.


als Antwort auf: [#573622]

PDF Export Indesign 2019 per JavaScript

Uwe Laubender
Beiträge gesamt: 4621

17. Jan 2020, 17:17
Beitrag # 9 von 12
Beitrag ID: #573624
Bewertung:
(1674 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Mike,
danke für die Skriptzeilen.

Doch, doch, das kann schon sinnvoll sein, den link.status einzufangen.
Zumindest wird dann das Objekt Link gezwungen den gerade aktuellen Status auszuwerfen.

Denn: Zunächst arbeitest Du mit der links-collection ohne dass Du die einzelnen Elemente der Collection tiefer befragst.
Wie soll ich's noch ausdrücken? Vielleicht so: Eine Collection hat eine eher "lose" Verbindung zu ihren Elementen.

Ich würde meinen, dass die Schleife ohne ln=link.status das gewünschte Ergebnis bringen müsste, wenn Du die Collection in einen glasklaren Array wandelst.

Um den Unterschied mal herauszuarbeiten:

Code
// Collection: 
var linklist = myDocument.links;


Code
// Array with resolved elements: 
var linklist = myDocument.links.everyItem().getElements();


Was macht everyItem().getElements() ?


Lies, besser arbeite Dich mal durch zwei Artikel von Marc Autret mit besonderem Augenmerk auf das Stichwort Object Specifiers:

On ‘everyItem()’ – Part 1
Marc Autret, June 30, 2010
http://www.indiscripts.com/.../on-everyitem-part-1

On ‘everyItem()’ – Part 2
Marc Autret, July 19, 2010
http://www.indiscripts.com/.../on-everyitem-part-2
*****
Mit herzlichem Gruß,
Uwe Laubender


als Antwort auf: [#573623]

PDF Export Indesign 2019 per JavaScript

mikeW
Beiträge gesamt: 6

20. Jan 2020, 11:59
Beitrag # 10 von 12
Beitrag ID: #573654
Bewertung:
(1425 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Uwe,
danke für den Hinweis, aber ich sehe für die Funktion keinen Unterschied, egal ob ich über everyitem gehe oder direkt die Links nutze. Sobald ich die Funktion für den Status weglasse, funktioniert es nicht. Ganz vereinfacht habe ich hier die Schleife mal weggelassen:
Code
                  var h = myDocument.links.everyItem().status;  
var linklist = myDocument.links.everyItem().update();

aber egal, ob ich noch eine Schleife über alle Linklist-Elemente mache, oder die obige Funktion einfach nur aufrufen, das Resultat bleibt - ohne den status funktioniert es nicht.


als Antwort auf: [#573624]

PDF Export Indesign 2019 per JavaScript

Uwe Laubender
Beiträge gesamt: 4621

20. Jan 2020, 16:02
Beitrag # 11 von 12
Beitrag ID: #573657
Bewertung:
(1398 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Mike,
Du hast doch nicht etwas das getElements() nach everyItem() bei Deinen Versuchen weggelassen? Das ist ganz wesentlich. Das erst baut den Array zusammen.
*****
Mit herzlichem Gruß,
Uwe Laubender


als Antwort auf: [#573654]

PDF Export Indesign 2019 per JavaScript

mikeW
Beiträge gesamt: 6

27. Jan 2020, 11:38
Beitrag # 12 von 12
Beitrag ID: #573726
Bewertung:
(1108 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Uwe,
nein, da habe ich nichts vergessen, nur stark vereinfacht ;)
Wie auch immer, es funktioniert dort auch immer nur, wenn ich den status mit triggere, ohne wird immer die eingebettete Bilddatei genutzt, hier mal der eigentliche Code:

Code
                  var linklist = myDocument.links.everyItem().getElements();  
for (var lc=0; lc < linklist.length; lc++) {
var h=linklist[lc].status;
linklist[lc].update();
}


Sobald ich die status-Zeile weglasse, hat der update-Befehl keine Wirkung.
Wobei ja immer noch die Frage wäre, warum es überhaupt einen Update-Befehl braucht, da ja eigentlich alle Daten korrekt verbunden sind und alles ja bis zum Umstieg Indesign2015-2019 funktionierte.

Was ich ganz vergass: es funktionert meist auch, wenn ich den update-Befehl weglasse, aber den status abfrage - also quasi gar nichts am Objekt selbst mache.


als Antwort auf: [#573657]
(Dieser Beitrag wurde von mikeW am 27. Jan 2020, 11:41 geändert)
Hier Klicken X
Hier Klicken

Aktuell

Affinity

| 24.02.2020

fuelltext_300

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
07.02.2020 - 11.09.2020

Digicomp Academy AG, 8005 Zürich
Freitag, 07. Feb. 2020, 13.00 Uhr - Freitag, 11. Sept. 2020, 12.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. Mit dem Abschluss «Publisher Professional – Profil «Multimedia» verliehen durch die Digicomp Academy AG, bestätigen Sie Ihre Praxiserfahrungen und Qualifizierung in den genannten Themengebieten gegenüber Ihrem Arbeitgeber sowie Ihren Kunden.

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

Nein

Organisator: Digicomp Academy AG

Kontaktinformation: Isil Günalp, E-Mailisil.guenalp AT digicomp DOT ch

https://www.digicomp.ch/weiterbildung/software-anwendungs-trainings/adobe-trainings/publishing-lehrgaenge/lehrgang-publisher-professional-profil-multimedia

Veranstaltungen
22.02.2020 - 04.07.2020

Lehrgang zielgerichtet auf die Zertifizierung zum Publisher Basic

Schulungsraum PubliCollege, Kronenhalde 9d, 3400 Burgdorf
Samstag, 22. Feb. 2020, 13.14 Uhr - Samstag, 04. Juli 2020, 13.15 Uhr

Projektseminar/Lehrgang

Ziele In der Medienproduktion unter Einbezug der aktuellen Publishing-Programme mitarbeiten. Voraussetzungen Sie möchten gestalterisch tätig sein und eigene grafische Ideen kompetent entwickeln sowie umsetzen; Medienproduktionen professionell planen und ausführen. Kompetenzen Nach Abschluss dieses Lehrgangs können Sie Printpublikationen aller Art von der Gestaltung über die Umsetzung bis zu druckfertige PDFs erstellen. Sie sind fähig, CI/CD-Vorgaben umzusetzen. Sie lernen die Grundlagen der grafischen Gestaltung kennen und setzen diese mit Adobe Photoshop, InDesign und Illustrator effizient um.

15 Halbtage, jeweils am Samstag von 08.30 bis 14 Uhr im Kursraum des PubliCollege, 3400 Burgdorf


Daten
Samstag, 22.2., 29.2., 14.3., 21.3., 28.3., 4.4., 25.4., 2.5., 9.5., 16.5., 6.6., 13.6., 20.6., 27.6., 4.7. 2020
Reservedatum am 23.5. 2020

Ja

Organisator: PubliCollege GmbH, 3400 Burgdorf

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

https://www.publicollege.ch/kursangebote/20-publisher-basic

Hier Klicken