[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:
(15658 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: 5316

17. Jan 2020, 09:48
Beitrag # 2 von 12
Beitrag ID: #573616
Bewertung:
(15648 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 ); 



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:
(15639 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: 5316

17. Jan 2020, 12:09
Beitrag # 4 von 12
Beitrag ID: #573619
Bewertung:
(15626 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


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: 5316

17. Jan 2020, 14:07
Beitrag # 5 von 12
Beitrag ID: #573620
Bewertung:
(15610 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?


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:
(15590 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: 5316

17. Jan 2020, 16:13
Beitrag # 7 von 12
Beitrag ID: #573622
Bewertung:
(15584 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?


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:
(15579 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: 5316

17. Jan 2020, 17:17
Beitrag # 9 von 12
Beitrag ID: #573624
Bewertung:
(15568 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


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:
(15319 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: 5316

20. Jan 2020, 16:02
Beitrag # 11 von 12
Beitrag ID: #573657
Bewertung:
(15292 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.


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:
(15002 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)
X