Std.-Drucker wechseln und drucken

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von lris08.

    Std.-Drucker wechseln und drucken

    Hallo,

    hab ein kleines Problem mit dem Drucken eines PDF's mit unten stehenden Code...

    Wenn ich nun Office-Dokumenten wie z.B. Word oder eine Email ausdrucken will funktioniert das wenn das Programm wie Word oder Outlook NICHT geöffnet sind perfekt...

    Wenn diese Programme aber geöffnet sind, wird der Std.-Drucker nicht geändert und druckt einfach darauf los.

    Wie könnte ich das umgehen ??

    Mir fehlt da total der Ansatz...

    Gruß
    Alex

    VB.NET-Quellcode

    1. 'Drucker merken
    2. Dim pd As New PrintDocument()
    3. For Each s As String In PrinterSettings.InstalledPrinters
    4. 'Standarddrucker ?
    5. If pd.PrinterSettings.PrinterName = s Then
    6. 'MsgBox(s & " ist der Standardrucker.")
    7. MeinDrucker = s
    8. End If
    9. Next s
    10. 'Drucker auswählen für PDFCreator
    11. SetDefaultPrinter(DirectCast("PDFCreator", String))
    12. Dim pdfjob As PDFCreator.clsPDFCreator
    13. pdfjob = New PDFCreator.clsPDFCreator
    14. Try
    15. pdfjob.cStart(, True)
    16. Catch ex As Exception
    17. 'gemerkten Drucker wieder als Standard einsetzen
    18. SetDefaultPrinter(DirectCast(MeinDrucker, String))
    19. ' und Fehlermeldung
    20. Fehlermeldung = ex.Message & " - Fehler: Dateivorschau_erstellen, Fehler beim Drucken . . . "
    21. Fehler_Instance.Ausgabe(Fehlermeldung)
    22. End Try
    23. 'PDFCreater vorbereiten und Dokument drucken
    24. With pdfjob
    25. .cOption("UseAutosave") = 1
    26. .cOption("UseAutosaveDirectory") = 1
    27. .cOption("AutosaveFormat") = 2 ' 0 = PDF, 1 = PNG, 2 = JPEG
    28. .cOption("AutosaveDirectory") = OutputPath
    29. .cOption("AutosaveFilename") = OutputFilename
    30. .cClearCache()
    31. .cPrintFile(OriginalDatei)
    32. End With
    33. pdfjob.cPrinterStop = False
    34. 'Wir warten bis der Druckjob gedruckt wurde
    35. Do Until pdfjob.cCountOfPrintjobs = 0
    36. Application.DoEvents()
    37. Loop
    38. pdfjob.cClose()
    39. pdfjob = Nothing
    40. 'gemerkten Drucker wieder als Standard einsetzen
    41. SetDefaultPrinter(DirectCast(MeinDrucker, String))

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „lris08“ ()

    Hallo,

    sorry, wenn ich mit dem Thema nerve, aber bekomms ned auf die Reihe...

    Habe aber etwas gefunden, was mit Kopfschmerzen bringt...

    Der Codeablauf stimmt, es wird alles abgearbeitet - auch wird der Std.-Drucker neu gesetzt.
    Nur wenn der Druck über Word (z.B. wenn das Dokument halt ein Word Dokument ist) angestroßen wird, drucker er auf den alten Std.-Drucker aus... obwohl der Std.-Drucker neu gesetzt wurde.

    Kann mir das nicht erklären...

    Habe schon gedacht, ok - vielleicht läuft der Code schneller ab als der Std.-Drucker im System erkennt wird bzw. von Word, aber habe es 100 mal nachvollzogen, der neue Std.-Drucker wird vor anstroß des druckens in Word gesetzt...
    Ausgedruckt wird aber nur auf den alten Std.-Drucker.

    Das komische daran ist aber, dies passiert nur wenn Word vorher geöffnet ist...
    Wenn Word vorher geschlossen ist, läuft alles perfekt ab...

    Verstehe es nicht... Habt Ihr da ne Idee woran das leigen kann?

    Gruß
    Alex


    EDIT:

    Mit ist gerade nich was aufgefallen,,, Wenn ich den Druck starte wenn Word schon geöffnet ist, wird keine weitere Instanz von Word aufgemacht, sondern er druckt über das derzeit geöffnete Dokument bzw. führ er darüber den Druckbefehl aus...
    Könnte ich nicht dagen, starte eine neue Word instanz ?

    Code:

    VB.NET-Quellcode

    1. Try
    2. pdfjob.cStart(, True)
    3. Catch ex As Exception
    4. 'gemerkten Drucker wieder als Standard einsetzen
    5. SetDefaultPrinter(DirectCast(AltStdDrucker, String))
    6. ' und Fehlermeldung
    7. Fehlermeldung = ex.Message & " - Fehler: Dateivorschau_erstellen, Fehler beim Drucken . . . "
    8. Fehler_Instance.Ausgabe(Fehlermeldung)
    9. Finally
    10. 'gemerkten Drucker wieder als Standard einsetzen
    11. SetDefaultPrinter(DirectCast(AltStdDrucker, String))
    12. End Try
    13. 'PDFCreater vorbereiten und Dokument drucken
    14. With pdfjob
    15. .cOption("UseAutosave") = 1
    16. .cOption("UseAutosaveDirectory") = 1
    17. .cOption("UseAutosaveDirectory") = 1
    18. .cOption("AutosaveFormat") = 2 ' 0 = PDF, 1 = PNG, 2 = JPEG
    19. .cOption("AutosaveDirectory") = OutputPath
    20. .cOption("AutosaveFilename") = OutputFilename
    21. .cClearCache()
    22. .cPrintFile(OriginalDatei)
    23. End With
    24. pdfjob.cPrinterStop = False
    25. 'Wir warten bis der Druckjob gedruckt wurde
    26. Do Until pdfjob.cCountOfPrintjobs = 0
    27. Application.DoEvents()
    28. Loop
    29. pdfjob.cClose()
    30. pdfjob = Nothing
    Bilder
    • Image2.jpg

      24,44 kB, 504×247, 231 mal angesehen