none
Drucken von Dateien

    Frage

  • Hallo zusammen,

    ich möchte Outlook Anlagen für eine Anzahl selektierter Mails automatisch drucken, ohne dass Anwender irgendetwas außer dem Drucker einstellen sollen, d.h. es soll auch kein Druckdialog aufgehen. Der Drucker kann ggf. aus einer Liste ausgewählt werden. Die Anlagen werden als Datei in irgendein Verzeichnis gespeichert und von dort aus abgerufen. Nun zum Problem mit dem Code. Beim Drucken werden aus irgendeinem Grund nicht alle Dateien erkannt obwohl diese vorhanden sind, es kommt eine Fehlermeldung z.B. von Word, ob die Datei verschoben oder gelöscht wurde. Außerdem öffnet sich bei bestimmten Dateitypen ungefragt die Anwendung zu einer Datei, wenn als Drucker z.B. ein PDF Drucker angegeben wurde  (z.B. Soda oder Free PDF). Hat jemand ein Idee woran das liegen könnte oder eine Empfehlung wie man so eine Aufgabe besser lösen kann? Hier mein Code:

    Dim strFile As String = "C:\Temp\test.XLSX"
    Dim objProcess As New System.Diagnostics.ProcessStartInfo

           Dim strPrinterName As String = myPrinterName
           
           With objProcess
    .FileName = strFile
    .WindowStyle = ProcessWindowStyle.Hidden
    .Verb = "printTo"
    .Arguments = """" & strPrinterName & """"
    .CreateNoWindow = True
    .UseShellExecute = True
    End With
    Try
    System.Diagnostics.Process.Start(objProcess)
    Catch ex As Exception
    MessageBox.Show(ex.Message)
    End Try

    Gruß

    Thomas

    Samstag, 19. November 2016 17:13

Alle Antworten

  • Hallo Thomas,

    sofern du nach Möglichkeit jeden Dateityp drucken können willst, fällt mir hierfür auch keine bessere Möglichkeit ein.

    Beim Drucken werden aus irgendeinem Grund nicht alle Dateien erkannt obwohl diese vorhanden sind, es kommt eine Fehlermeldung z.B. von Word, ob die Datei verschoben oder gelöscht wurde.

    Bitte yeige uns wie du sämtliche Dateien, die ausgedruckt werden sollen ermittelst. Außerdem solltest du uns die exakte Fehlermeldung zitieren und ggf. noch zusätzliche Informationen nennen. Denn so aus dem Kontext gerissen ergibt das für mich wenig Sinn.

    Außerdem öffnet sich bei bestimmten Dateitypen ungefragt die Anwendung zu einer Datei, wenn als Drucker z.B. ein PDF Drucker angegeben wurde (z.B. Soda oder Free PDF).

    Falls du auf PDF-Drucker und deren Nachfrage nach dem Dateispeicherort o.ä. hinaus willst, so wirst du das maximal über Einstellungen des Druckers ändern können. Denn so arbeiten diese Drucker nun mal. Ob und wenn ja wo es eine solche Einstellung gibt hängt vom verwendeten Drucker ab.

    Wenn gar kein Drucker für den Dateityp angegeben ist, wird diese mit dem Standardprogramm geöffnet. Auch das ist hier das Standardverhalten von Windows.


    Tom Lambert - .NET (C#) MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    Samstag, 19. November 2016 18:22
  • Bitte yeige uns wie du sämtliche Dateien, die ausgedruckt werden sollen ermittelst. Außerdem solltest

    Ich habe zuerst die selektierten Mails:

               For i As Integer = 1 To myOlSel.Count

    Dann die Anlagen:

    colAtts = oMail.Attachments

          If colAtts.Count Then
                    For Each oAtt In colAtts

    Da ich zum Drucken die Datei brauche, speichere ich diese zunächst in ein Temp-Verzeichnis

        sTemp = System.IO.Path.GetTempPath & strPrefix & " " & oAtt.FileName

        oAtt.SaveAsFile(sTemp)

    Nun gibt es in der Anwendung zwei Optionen für den Anwender: "Anlagen Drucken" und "Anlagen speichern"

    Der Druck-Zugriff auf die Datei erfolgt anhand des Codes weiter oben

    Wenn die Option "Anlagen Speichern" aktiviert ist, wird das Attachment erneut gespeichert:
            sFileTargetPath = sDirectory & "\" & strPrefix & " " & oAtt.FileName
    ...
         oAtt.SaveAsFile(sFileTargetPath)

    Dazwischen wird noch geprüft, ob die Datei vorhanden ist etc.

    Am Ende wird die Temp Datei gelöscht. Und hier habe ich vermutl. das Problem, dass die Datei vom PDF Viewer oder Printer geöffnet sein könnte, bzw. dass diese gerade gedruckt wird und deswegen noch geöffnet ist. Nun möchte ich diese Dateien natürlich nicht ewig aufbewahren. Das können sehr schnell sehr viele und sehr große Dateien sein. Nur woher soll ich wissen, wann der Anwender seinen Viewer schließt und ich wieder Zugriff auf die Datei habe?

    Falls du auf PDF-Drucker und deren Nachfrage nach dem Dateispeicherort o.ä. hinaus willst,

    Es öffnet sich z.B. Excel wenn

                    Process.Start(psi)

    ausgeführt wird, ein PDF Drucker angesprochen wird und die Datei z.B. die Endung ".ods" ist. Dann wird gefragt, ob ich "Änderungen Speichern" möchte. Keine Ahnung was das soll. Ich habe an dieser Stelle dann zwei Fenster pro Anlage offen einmal das PDF Programm und einmal die Datei-Anwendung (in dem Fall wird Excel erkannt)

    Gruß

    Thomas


    • Bearbeitet datech-hh Sonntag, 20. November 2016 14:07
    Sonntag, 20. November 2016 13:50