PDFsharp Bild aus Picturebox in ds PDF

  • VB.NET
  • .NET (FX) 4.0

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von darkwood.

    PDFsharp Bild aus Picturebox in ds PDF

    Hallo zusammen,

    weiss gar nicht ob ich hier überhaupt schon mal was gepostet habe, lese viel mit, bedanke mich schonmal für die vielen Problemlösungen. :)

    Ich möchte gern in VB ein Bild aus einer PictureBox mit PDFsharp in einem PDF platzieren. Bilder "fromFile" funktionieren problemlos. Ich habe einige Samples in C# gesehen, die gehen aber nicht für VB.

    Wie gesagt, so allgemein mit Text und Linien und Bilder aus einem File komme ich klar. Nur aus einer PictureBox funktioniert nicht.

    Ich bin für jedes Schnipsel dankbar :)

    Danke und schönen Abend!

    der Jens
    Willkommen im Forum, auch wenn Du schon länger dabei bist. :thumbup:

    darkwood schrieb:

    Bilder "fromFile" funktionieren problemlos.
    Welchen Datentyp erwartet denn das PDFSharp?
    Was wird wie in der PictureBox dargestellt?
    Wenn Du im PaintEvent der PictureBox was malst, splitte das auf und rufe eine neue Prozedur mit der Graphics-Instanz auf.
    Dieselbe Prozedur rufst Du auf mit einer Graphics-Instanz von einer Bitmap, und diese kannst Du dann an PDFSharp durchreichen:

    VB.NET-Quellcode

    1. Using bmp As New Bitmap(100, 100)
    2. Using g = Graphics.FromImage(bmp)
    3. g.Clear(Color.Transparent)
    4. g.DrawLine(Pens.Red, 0, 0, 100, 100)
    5. ' Bitmap befüllen
    6. End Using
    7. bmp.Save("C:\Temp\Test.png", System.Drawing.Imaging.ImageFormat.Png)
    8. ' was mit bmp anstellen
    9. End Using

    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!
    @darkwood Dann verwende die Bitmap-Instanz der PNG bzw. die Bitmap-Instanz der GIF.
    Wo liegt das Problem?
    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!
    Ich habe es jetzt so gelöst. Danke für Deine Hilfe und die des .NET-Snippetconverter :)

    VB.NET-Quellcode

    1. ​Dim ms As MemoryStream = New MemoryStream()
    2. PictureBox1.Image.Save(ms, System.Drawing.Imaging.ImageFormat.Png)
    3. Dim buff As Byte() = ms.GetBuffer()
    4. Dim Image As PdfSharp.Drawing.XImage = PdfSharp.Drawing.XImage.FromStream(ms)
    5. gfx.DrawImage(Image, 50, 500)
    @darkwood Was für Konstruktoren hat denn das XImage?
    Wenn Du eh je eine Instanz Deiner Bilder hältst (hier in der PictureBox) kannst Du auch eine Bitmap-Instanz erstellen und diese der PictureBox zuweisen und diese dann dem XImage zuweisen.
    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!
    Ich hoffe Du meinst das hier:

    VB.NET-Quellcode

    1. ' Zusammenfassung:
    2. ' Tests if a file exist. Supports PDF files with page number suffix.
    3. '
    4. ' Parameter:
    5. ' path:
    6. ' The path to a BMP, PNG, GIF, JPEG, TIFF, or PDF file.
    7. Public Shared Function ExistsFile(path As String) As Boolean
    8. '
    9. ' Zusammenfassung:
    10. ' Creates an image from the specified stream. Silverlight supports PNG and JPEG
    11. ' only.
    12. '
    13. ' Parameter:
    14. ' stream:
    15. ' The stream containing a BMP, PNG, GIF, JPEG, TIFF, or PDF file.
    16. Public Shared Function FromStream(stream As Stream) As XImage
    17. '
    18. ' Zusammenfassung:
    19. ' Creates an image from the specified file.
    20. '
    21. ' Parameter:
    22. ' path:
    23. ' The path to a BMP, PNG, GIF, JPEG, TIFF, or PDF file.
    24. Public Shared Function FromFile(path As String) As XImage

    darkwood schrieb:

    Ich hoffe Du meinst das hier
    Genau das.
    Sieht leider etwas mau aus, ich hatte auf einen Konstruktor mit einem Image als Parameter gehofft.
    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!
    Ach, ich bin ganz zu frieden mit der Lösung. Jetzt habe nur noch ein Problem. Ich habe ein zweites Bild als HEX codiert in einem String stehen und würd diesen nun auch gern über den Memory Stream im PDF platzieren. Da bräuchte ich nicht erst die PictureBox damit befüllen. Bin leider noch laienhaft unterwegs....Ich beiss mich durch :D

    darkwood schrieb:

    Ich habe ein zweites Bild als HEX codiert in einem String stehen
    Ist das ein Base64String oder wie sieht das aus?
    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!
    Das sieht so aus. Wenn ich das als GIF File Speichere habe ich das so gemacht.

    VB.NET-Quellcode

    1. Dim myFileStream As New FileStream(Verzeichnis & "\Unterschrift.gif", FileMode.Create, FileAccess.ReadWrite)
    2. 'Funktion umwandeln Hex zu Ascii
    3. strSource = (hex2ascii(Hex))
    4. 'MessageBox.Show(strSource.Length)
    5. 'File schreiben Encoding ist wichtig (1252)
    6. bteEndode = Encoding.GetEncoding(1252).GetBytes(strSource)
    7. myFileStream.Write(bteEndode, 0, bteEndode.Length)
    8. myFileStream.Close()


    Quellcode

    1. 47494638396100010001f00000ffffff0000002c00000000000100010002....

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

    @darkwood Was soll nun mit diesem String passieren?
    Soll diese Zeichenfolge als Folge von Bytes in Hex-Schreibweise interpretiert und als Bild dargestellt werden?
    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!
    Der String soll in einen MenoryStream wandern, damit den dann in dem PDF platzieren kann mit ...PdfSharp.Drawing.XImage.FromStream(ms). Ich hab schon einiges probiert, klappt leider nicht so recht. Ich werde den wohl temporär als File speichern und dann mit PdfSharp.Drawing.XImage.FromFile(Bild Path) im PDF ausgeben.

    darkwood schrieb:

    Der String soll in einen MenoryStream wandern
    Ich nehme an, nachdem die Chars Paarweise als Hex-Zahl interpretiert und in Byte konvertiert wurden. :?:
    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!