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


Log in to reply