none
PDF Files reihenweise und sortiert ausdrucken

    Frage

  • Hallo,

    ich möchte eine ganze Reihe von PDF's ausdrucken, die auch sortiert aus dem Drucker kommen sollen.

    Der reine Aufruf mit ShellExecute führt dazu, dass einige Dateien verschluckt werden.

    CreateProcess mit WaitForSingleObject führt dazu, das alle PDF ausgedruckt werden, aber die Druckreihenfolge hat nichts mit der Reihenfolge der Druckerwarteschlange zu tun.

    Zuerst wird der kpl. Code abgearbeitet, dann druckt Windows die PDF's in einer Reihenfolge, die ich nicht nachvollziehen kann.

    Die u.g. Funktion rufe ich in einer Schleife durch des Recordset auf.

    Eigentlich hatte ich erwartet, daß der Code die nächste Datei erst dann aufruft, wenn das Acrobat-Fenster geschlossen ist.

    Dem ist aber nicht so.

    Function fktWaitForPDF(Aktion As String, stDatei) As Boolean
    Dim ProcInfo As PROCESS_INFORMATION, StartInfo As STARTUPINFO
    'Aktion = "C:\Program Files\Adobe\Acrobat 8.0\Acrobat\Acrobat.exe /P " 
    With StartInfo .cb = Len(StartInfo) ' Größe der Struktur übergeben .dwFlags = STARTF_USESHOWWINDOW ' Angeben, dass .wShowWindow benutzt wird .wShowWindow = 1 ' Fensterstil setzen End With If CreateProcess(0&, Aktion & stDatei, 0&, 0&, 1&, NORMAL_PRIORITY_CLASS, 0&, 0&, StartInfo, ProcInfo) = 0 Then MsgBox "CreateProcess konnte Acrobat.exe nicht ausführen." End If While WaitForSingleObject(ProcInfo.hProcess, 0) = WAIT_TIMEOUT DoEvents ' Zeitscheibe fortführen, danach Kontrolle an Windows Wend End Function

    Hier läufts genauso ab. Code läuft durch, dann werden die Fenster geöffnet und gedruckt, schön eines nach dem anderen nur die Reihenfolge stimmt nicht mit der des Funktionsaufrufes.

    Function fktWaitForPDF(Aktion As String, stDatei) As Boolean
    ' Startoptionen festlegen
    With ShExInfo
      .cbSize = Len(ShExInfo)
      '.fMask = SEE_MASK_FLAG_NO_UI Or SEE_MASK_CLASSNAME Or SEE_MASK_NOCLOSEPROCESS
      .hwnd = Me.hwnd
      .lpVerb = Aktion
      .lpFile = stDatei
      .lpParameters = ""
      .lpDirectory = DirName
      .nShow = SW_SHOWMAXIMIZED
    End With
    ' Programm ausführen
    Retval = ShellExecuteEx(ShExInfo)
    If Retval = 0 Then
      ' bei Fehler Text ausgeben
      Select Case ShExInfo.hInstApp
      Case SE_ERR_ACCESSDENIED
      Err.Raise 5, "ShellExecuteEx", "Zugriff verweigert"
      Case SE_ERR_FNF
      Err.Raise 5, "ShellExecuteEx", "Datei nicht gefunden"
      Case SE_ERR_NOASSOC
      Err.Raise 5, "ShellExecuteEx", "Datei ist mit keinem Programm verknüpft"
      End Select
      fktWaitForPDF = False
    Else
      'erfolgreich gedruckte Datei löschen
      fktWaitForPDF = True
    End If
    ' warten bis die Anwendung beendet wird
    test = WaitForSingleObject(ShExInfo.hProcess, INFINITE)
    Do While test = 1
      test = WaitForSingleObject(ShExInfo.hProcess, INFINITE)
    Loop
    End Function

    Ich hoffe es gibt eine Möglichkeit ohne dass der Benutzer jede Datei einzeln bestätigen muß.

     

    Gruß Matthias Fitzner

     

     

    Mittwoch, 15. Dezember 2010 09:11

Antworten