Mehrere PDFs drucken
-
Hallo Community,
Aus meiner C++ Anwendung soll es möglich sein, mehrere PDF-Dokumente nacheinander automatisch zu drucken.
Das Problem das sich mir dabei stellt ist, das die Schleife des Programmes schneller durchlaufen wird als der Druckaufruf im Acrobat Reader stattfinden kann.
Das bedeutet, wenn ich z.B. 7 Dokumente zum drucken habe, werden mir z.B. 5 Dokumente ausgedruckt die restlichen 2 Dokumente werden 'geschluckt' da der Reader bereits wieder geschlossen wurde
Hier mal der Code der meinen Schleife darstellt
if (prtDialog.ShowModal() == wxID_OK) { wxString druckerName = prtDialog.GetPrintDialogData().GetPrintData().GetPrinterName(); wxString pathToPDF_Reader = newInitfile->ValueGet(_T("READER"), _T("acrobatpath")).GetAsWxString(); for (ordFilePrintStore::iterator itPrint=printStore.begin(); itPrint!=printStore.end(); itPrint++) { wxString finalStringForPrint; wxFileName fnDwnlObj(itPrint->second); if (fnDwnlObj.FileExists()) { finalStringForPrint << pathToPDF_Reader << _T(" /t /p /h ") << itPrint->second << _T(" \"") << druckerName << _T("\" "); // hier dann schon verschiedenes ausprobiert
Habe dann folgendes als Schleifenkörper getestet. Alles leider nur mit mäßigen Erfolg
if (itPrint==printStore.begin()) { // Erster Durchgang prozID nehmen prozID = wxExecute(finalStringForPrint); } else { // Wird mit neuer ID geöffnet, geht aber dann auf den bereits geöffneten Reader mit der prozID wxExecute(finalStringForPrint); } // Am Ende der For-Schleife gebe ich dann wxKill(prozID, wxSIGKILL);
hab mir auch schon gedacht, gut evtl. solange das Dokument geöffnet ist ist die Bearbeitung dieses im Reader noch nicht beendet. Bringt mir allerdings auch das gleiche ergebnis.
prozID = wxExecute(finalStringForPrint); wxFileName fnIsOpen(itPrint->second); bool isOpen = true; do { if (fnIsOpen.IsFileWritable()) { isOpen = false; } }while(isOpen); wxKill(prozID, wxSIGKILL);
Gibt es irgendeine möglichkeit vom Acrobat Reader z.B. eine Rückmeldung zu bekommen das der Druck für dieses Dokomunt abgeschickt worden ist. Oder kann ich irgendwie abfragen ob der Prozess gerade 'arbeitet' oder nix zu tun hatt !?
Oder was würdet Ihr mir Vorschlagen das er die Schleife nicht zu schnell durchläuft, und den Reader quasi schon schließt bevor er den Druckauftrag gegeben hatt.
Natürlich könnte man schon hergehen und mit 'wxSleep()' oder einer 'sinnlosen for-schleife' dafür sorgen das er für jedes Dokument z.B. 5 sec zeit hat bevor er schließt. Dies würde ich allerdings nur sehr ungern tun, da die Dokoumente die gedruckt werden sollen schon mal in die hunderte oder in die Tausende gehen können. Und das dann ein erheblicher Zeitaufwand wäre..
Würd mich über jede Anregung freuen...
Mfg
Ollow