per Code Thumbnail eines Dokuments (Docx,PDF,PP,...) erstellen und als Bild Abspeichern

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

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von durb.

    per Code Thumbnail eines Dokuments (Docx,PDF,PP,...) erstellen und als Bild Abspeichern

    Hallo zusammen! Dies ist mein erster Post in diesem Forum, ich habe mich angemeldet weil eure Beiträge mir schon bei einigen Problemen weitergeholfen haben.

    Zu meinem Problem: ich möchte automatisch durch Angabe eines Dateipfads zu einem beliebigen Dokument die erste Seite dieses Dokumentes im selben Pfad als .png Bild abspeichern.
    Gibt es eine Funktion von VB die dieses ermöglicht und die ich auch nach langem Suchen einfach nicht finden konnte?
    Mein bisheriger Ansatz ist sehr unsauber, er öffnet lediglich das Dokument, wartet wenige Sekunden bis es auch bestimmt maximiert geöffnet wurde, macht einen Screenshot und speichert diesen ab.
    Problem bei dieser Methode:
    • Bild hat rechts und links überdimensionale leere Spalten
    • es ist nicht garantiert, dass die Seite ganz angezeigt wird
    • Bearbeitungsbars der Programme, in denen die Dokumente angezeigt werden, werden im Screenshot mit abgebildet.
    Hier der Code meines Ansazes:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Dim sInfile As String = System.Configuration.ConfigurationSettings.AppSettings("infile") 'InputFile Dateinamen laden
    3. Dim sOutfile As String = System.Configuration.ConfigurationSettings.AppSettings("outfile") 'OutputFile Dateinamen laden
    4. Dim picture As New Bitmap(My.Computer.Screen.Bounds.Width, My.Computer.Screen.Bounds.Width)
    5. Dim graphics As Graphics = graphics.FromImage(picture)
    6. Dim process As New Process()
    7. process.StartInfo.FileName = sInfile
    8. process.StartInfo.WindowStyle = ProcessWindowStyle.Maximized
    9. process.Start()
    10. process.WaitForInputIdle()
    11. System.Threading.Thread.Sleep(2000)
    12. graphics.CopyFromScreen(0, 0, 0, 0, picture.Size)
    13. process.CloseMainWindow()
    14. picture.Save(sOutfile, System.Drawing.Imaging.ImageFormat.Png)
    15. End Sub


    Und hier ein Bild, wie falsch mein bisheriger Screenshot aussieht:


    Schon einmal vielen Dank für Eure hilfe, ich bin mir sicher ihr hab da schon einen Plan :)
    Liebe Grüße Durb

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

    Willkommen im Forum. :thumbup:

    durb schrieb:

    Gibt es eine Funktion von VB die dieses ermöglicht
    Nein.
    Wende mal Deine Such-Aktivität in die Richtung, das Problem auf einen PDF-Drucker abzuwälzen, ihn per Batch entsprechend anzusteuern.
    Ich habe allerdings keine Ahnung, ob es sowas gibt.
    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!
    Hallo zusammen,

    Danke für eure Vorschläge, nachdem mir "zu PDF zu drucken" in VB dann aber zu unsauber wurde, habe ich mir einige "Document to Image" Converter mit Kommandozeilenaufruf angesehen und nutze nun schließlich das Programm "Convert Document to Image" und bin sehr zufrieden damit. Allen, die auf das selbe Problem stoßen, empfehle ich dieses Programm.
    Eine kurze Beispiel-Syntax: CDTI.exe /S"C:\input.docx" /T"C:\output.jpg" /1 1 /4 100
    die Parameter: /s = input; /t = output; /1 = SeitenAuswahl; /4 = Qualität

    Liebe Grüße Durb
    Hallo, ich habe an diesem Thema weitergearbeitet und benötige nun wieder eure Hilfe!

    Wie vorgeschlagen nutze ich nun ein spooling Tool namens "ImagePrinter" der als Drucker erkannt wird und den ich Dokumente senden kann. Deren erste Seite wird dann als Bild abgespeichert - toll! Nun komme ich aber nach tagelangem Suchen einfach nicht auf das Ergebnis, wie ich diesen Druckbefehl per Code in VB erteilen kann! Mein bisheriger Code erzeugt nur ein weißes Blatt:

    VB.NET-Quellcode

    1. Dim printDoc As New PrintDocument()
    2. printDoc.DocumentName = "C:\temp\document.docx"
    3. printDoc.PrinterSettings.PrinterName = "ImagePrinter"
    4. printDoc.PrinterSettings.FromPage = 1
    5. printDoc.PrinterSettings.ToPage = 1
    6. printDoc.PrinterSettings.PrintRange = 1
    7. printDoc.Print()


    Ich hoffe ihr könnt mir da weiter helfen! :)
    Liebe Grüße Durb

    durb schrieb:

    nur ein weißes Blatt
    Richte diesen Drucker als Standarddrucker ein und dann dies:

    VB.NET-Quellcode

    1. Dim pr As New Process
    2. pr.StartInfo.FileName = "C:\temp\document.docx"
    3. pr.StartInfo.Verb = "Print"
    4. pr.Start()
    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!

    durb schrieb:

    gibt es eine?
    K.A. Vielleicht kann das Verb "Print" erweitert werden, es gibt da auch eine Property Verbs.
    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!