PrintDocument.DocumentName --- Datei aufrufen und drucken

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von INOPIAE.

    PrintDocument.DocumentName --- Datei aufrufen und drucken

    Hallo,

    vielleicht habe ich einen Denkfehler und bitte um Hilfe.

    Ich versuche gerade über PrintDocument1.DocumentName eine Datei direkt zu drucken.
    Problem dabei ist, dass die Ausgaben immer leer sind/bleiben.

    VB.NET-Quellcode

    1. PrintDocument1.DocumentName = _Quellpfaddatei
    2. PrintDocument1.PrinterSettings.PrinterName = "Microsoft Print To PDF"
    3. If Not PrintDocument1.PrinterSettings.IsValid Then Return
    4. PrintDocument1.PrinterSettings.PrintToFile = True
    5. Dim _tempfile As String = "MSADV_" & getrandombystring("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", 7) & ".pdf"
    6. PrintDocument1.PrinterSettings.PrintFileName = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) & "\" & _tempfile
    7. PrintDocument1.Print()


    Über PrintDocument1.DocumentName legt man doch den Dateinamen fest, die er zu drucken hat.... Und genau da vermute ich meinen Denkfehler.

    Die Ausgabe soll als PDF erfolgen, darum auch den "Microsoft Print To PDF"

    Was sagt Ihr dazu ?

    Viele Grüße
    M

    michl75 schrieb:

    Problem dabei ist, dass die Ausgaben immer leer sind/bleiben.
    Welchen Inhalt hat denn Deine PrintDocument1_PrintPage()-Prozedur?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Moment. Versuchst Du, eine vorhandene Datei zu drucken? Das geht so nicht. Rufe die Datei mit einem "print"-Verb auf, das sollte klappen. Glaub ich zumindest.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Wie geschrieben:

    VB.NET-Quellcode

    1. Diagnostics.Process.Start(New Diagnostics.ProcessStartInfo With {.FileName = DeinDateipfad, .Verb = "print"})
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    VaporiZed schrieb:

    eine vorhandene Datei zu drucken
    ist mit

    michl75 schrieb:

    "Microsoft Print To PDF"
    nicht sinnvoll.
    @michl75 Was ganz genau willst Du erreichen?
    Und
    Schaust Su hier: Drucken mehrseitiger Dokumente
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @RodFromGermany

    Ich bastel mir selbst ein kleines Dokumentenmanagement.

    Wenn ich mir einen Datensatz in meinem Dokumentenmanagement anlege, soll auch ein PDF erstellt werden, dass ich als nicht mehr änderbar on der Datenbank speichere.

    Mein Vorgehen wäre gewesen, also gedacht ...

    Von der Datei über "Microsoft Print To PDF" Printer die PDF von einer bestimmten Datei erstellen lassen, diese Datei dann in meiner Datenbank speichern.

    Das Drucken so: (hätte gedacht)

    VB.NET-Quellcode

    1. PrintDocument1.DocumentName = _Quellpfaddatei <<<< ------------------ DAS KLAPPT ABER NICHT WIE GEHOFFT
    2. PrintDocument1.PrinterSettings.PrinterName = "Microsoft Print To PDF"
    3. If Not PrintDocument1.PrinterSettings.IsValid Then Return
    4. PrintDocument1.PrinterSettings.PrintToFile = True
    5. Dim _tempfile As String = "MSADV_" & getrandombystring("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", 7) & ".pdf"
    6. PrintDocument1.PrinterSettings.PrintFileName = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) & "\" & _tempfile
    7. PrintDocument1.Print()


    Das speichern ganz einfach so:

    VB.NET-Quellcode

    1. Dim _b As Byte() = File.ReadAllBytes(_Quellpfaddatei)
    2. DokumenteTableAdapter.InsertQuery_DateiEinsetzen(_ArchivID, True, Date.Now.ToString, 0, Date.Now.ToString, 0, _Quelldateiname, _Quelltyp, _b)


    Darum war die Verlockung so groß den "Microsoft Print To PDF" zu nehmen, da man da ja mehr oder weniger alles vorgeben kann... dann zack Datei nehmen und in DB packen.

    Edit: Die dann in der DB gespeicherte Datei möchte ich dann zugleich als Vorschaubild verwenden,

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „michl75“ ()

    @michl75 Dann fang an, einfach Deinen Text im PrintPage()-Event zeilenweise auszugeben.
    Nimm einen StringBuilder, den Du mit Deinen Zeilen befüllst.
    Den kompletten String gibst Du dann in einem Einzeiler aus, lies dazu in dem oben verlinkten Tut.
    Teste dies im PrintPreviewDialog, da kannst Du sehr schnell im Debugger klienere Änderungen vornehmen und Dein PDF vorbereiten.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    michl75 schrieb:

    Wenn ich mir einen Datensatz in meinem Dokumentenmanagement anlege, soll auch ein PDF erstellt werden, dass ich als nicht mehr änderbar on der Datenbank speichere.

    Dir ist hoffentlich bewusst, dass eine PDF-Datei relativ leicht zu ändern ist. (und immer schon war: Hier einige Programm in der historischen Folge: Acrobat (nicht der Reader), OpenOffice, Word 2016)
    Und wenn PDF-Datei zur Archivierung genutzt werden sollen, sollten sie im PDF-A-Format gespeichert werden.
    NB. Es ist doch schön, wenn man lesbare Namen vergibt. Siehe auch [VB.NET] Beispiele für guten und schlechten Code (Stil).