2017-12-06 4 views
-3

Ich wollte PDFsharp und MigraDoc verwenden, um PDFs zu erzeugen. Bis jetzt funktioniert alles perfekt.PDFsharp MigraDoc Runtime generierte Bitmap zur Tabellenzelle hinzufügen

Jetzt habe ich eine Idee, um eine Bitmap während der Laufzeit zu erstellen und zu einer meiner Tabellenzellen hinzuzufügen.

Ich habe gelesen, dass es möglich ist, Bitmaps von Ressource so hinzuzufügen, ohne sie auf der Festplatte zu haben.

See: http://www.pdfsharp.net/wiki/MigraDoc_FilelessImages.ashx

Das ist mein Versuch, es zu meinem kleinen Projekt anzupassen ist:

-Code für die Bitmap zu erstellen:

Bitmap GreenDot = new Bitmap(32,32); 
Graphics GreenDotGraphics = Graphics.FromImage(GreenDot); 
GreenDotGraphics.FillEllipse(Brushes.Green,0,0,32,32); 

//The next step will be converting the Bitmap to an byte[] 

var byteGreenDot = ImageToByte(GreenDot); 

//Now converting it to string as seen in the WikiPage 

string stringGreenDot = Convert.ToBase64String(byteGreenDot); 
string FinalGreenDot = "base64:"+ stringGreenDot; 

//Now creating a table 
. 
. 
. 
cell = MyRow.Cell[1]; 
cell.AddImage(FinalGreenDot); 
. 
. 
. 

-Code für Bitmap-Umwandlung [] auf Byte

public static byte[] ImageToByte(System.Drawing.Image img) 
{ 
    using(var ms = new MemoryStream()) 
    { 
     img.Save(ms,System.Drawing.Imaging.ImageFormat.Bmp); 
     return ms.ToArray(); 
    } 
} 

Wie ich den Code ausführen, werde ich eine Warnung mit dem Hinweis "Warnung : Bild 'base64: Qk02E [...] ==' nicht gefunden. ' (Die Base64-Zeichenfolge wurde für diesen Beitrag abgeschnitten).

Ich vermute, dass ich es nicht korrekt in Byte [] konvertieren.

Kann mich jemand auf die richtige Spur bringen?

+1

Ist der Datentyp des ersten Parameters von 'AddImage()' nicht definiert als 'string'? Dies würde die Fehlermeldung erklären, da das Bildobjekt implizit in eine Zeichenkette über 'ToString()' konvertiert wird. In diesem Fall müssen Sie einen Dateinamen anstelle eines Streams angeben (zumindest in meinem Projekt muss ich Dateinamen übergeben). – ViRuSTriNiTy

+0

Bitte lesen Sie den verlinkten Wiki-Artikel. – SUM

+0

Ja, und was sagt der Artikel? 'section.AddImage (imageFilename);' - Siehst du das Wort 'Dateiname' im Variablennamen? Deshalb habe ich geschrieben, dass Sie einen Dateinamen weitergeben müssen. – ViRuSTriNiTy

Antwort

-1

Beachten Sie, dass Sie eine Funktion verwenden, die mit Version 1.50 eingeführt wurde.

Wenn Sie Version 1.32 oder früher verwenden, erhalten Sie die Warnung, die Sie erwähnen.

Ihr Code funktioniert wie erwartet, wenn Version 1.50 Beta 2 oder höher verwendet wird.

+0

Ich benutze 1,50. Deshalb frage ich mich. 1.50.4589.0 um genau zu sein. – SUM

+0

Ich habe diese drei NuGet-Pakete erfolgreich ausprobiert: 'PDFsharp-MigraDoc-WPF.1.50.4589-beta4',' PDFsharp-MigraDoc-wpf.1.50.4619-beta4c' und 'PDFsharp-MigraDoc-wpf.1.50.4000-beta3b '. Auf der Seite Dokumenteigenschaften in Adobe Reader wird angezeigt, welche Version zum Erstellen einer PDF verwendet wurde. –

+0

Ich habe alles neu gestartet die Maschine neu gestartet und die 1.50 dll, die ich zuvor verwendet hat neu zugewiesen und es funktioniert. Vielleicht ist VS wild geworden. Danke trotzdem. Gut zu wissen, dass mein Code von Anfang an funktionierte;) – SUM

Verwandte Themen