Druckauftrag mit eigenem Namen speichern

Ich habe folgende Situation:
Ich starte in einem Programm automatisch
einen Druckauftrag für den PDFCreator. Die erzeugte PDF-Datei soll von
dem Programm jedesmal einen Namen für die PDF-Datei vorgegeben bekommen.
Dafür
habe ich das Beispiel TestPage2PDF.js so modifiziert, dass es einen
Dateinamen übergeben bekommt und auf den Druckauftrag wartet.
Ich
starte also in meinem Programm TestPage2PDF.js und übergebe einen
Dateinamen. Dann starte ich den Druckauftrag. Das funktioniert auch wie
gewünscht.

Mein Problem ist jetzt: Es kann passieren, dass das
Programm 2 Druckaufträge nahezu zeitgleich anstoßen muss (also während
TestPage2.PDF noch auf den Druckauftrag wartet). D.h. es muss auch 2 mal
die TestPage2PDF.js angestoßen werden. Leider geht das nicht, da dann
ja bereits eine Instanz vom PDFCreator ausgeführt wird.
Gibt es für mein Problem eine Lösung?

Vielen Dank im Voraus

Hallo,


von der JobQueue wird auch eine Methode “WaitForJobs” zur Verfügung gestellt, die auf mehrere Druckaufträge wartet. Ich vermute mal, dass Sie wissen wie viele Jobs zu einem Zeitpunkt gedruckt wurden und so können Sie dem Skript ein Parameter n mit übergeben, der angibt auf wie viele Druckaufträge gewartet werden soll.

In der Skriptdatei würde das in etwa so aussehen:

if(PDFCreatorJobQueue.WaitForJobs(n))
{
DoWork()
}
else
{
print(“Something went wrong. Only 3 Jobs arrived instead of” + n);
}

Ich hoffe, dass das weiterhilft :slight_smile:

Grüße,
Sazan

Vielen Dank für die Antwort.

Leider kenne ich die Zeitpunkte nicht. Die Zeitpunkte werden durch Benutzeraktionen ausgelöst.
Es kann also passieren, dass das Script angestoßen wird und 1 Auftrag gedruckt werden soll. Nun kann aber 1 s später plötzlich der nächste Anstoß kommen und das Script würde noch mal angestoßen werden. Das funktioniert dann jedoch nicht, da die Instanz noch offen ist (vom 1. Anstoß).

Die einzige derzeit zur Verfügung stehende Möglichkeit, dieses Problem zu umgehen, wäre folgende: Sie nutzen vom PDFCreator-Objekt (ProgID: “PDFCreatorBeta.PDFCreator”) die IsInstanceRunning Property, um abzufragen, ob denn noch das Skript vom ersten Anstoß läuft.

IsInstanceRunning liefert True, falls eine andere PDFCreator Instanz arbeitet (im obigen Beispiel würde es also True zurückliefern nach dem erstmaligen Anstoß des Skriptes) und False andernfalls.

Also fragt man immer bevor man das Skript ein weiteres mal Anstößt, ob denn noch eine Instanz vom PDFCreator gerade läuft, falls das Ergebnis dieser Abfrage von IsInstanceRunning True ist, dann wartet man (je nach Druckauftragsmänge vielleicht n*3 Sekunden oder so etwas) und probiert es erneut.

PseudoCode:

while(PDFCreator.IsInstanceRunning)
{
Thread.Sleep(n * 3000); //Waits 3 Seconds for each job (n jobs in our queue assumed)

StartScript();

Bemerkung: Diese Lösung ist nicht sehr gut, da aktiv gewartet wird. Rechenzeitverschwendung + Abschätzung der Wartezeit nicht leicht. Daher bieten wir mit der nächsten Version des PDFCreators ein JobFinished event an. Das würde in ihrem Fall bedeuten, dass Sie sich beim letzten Job der Queue an dem JobFinished event registrieren und sobald dieser fertig ist, können Sie das Skript erneut starten.