C# PDFsharp将运行时生成的位图添加到表格单元格

C# PDFsharp将运行时生成的位图添加到表格单元格,c#,bitmap,pdfsharp,migradoc,C#,Bitmap,Pdfsharp,Migradoc,我想使用PDFsharp和MigraDoc生成PDF。到目前为止,一切都很好 现在我想出了一个主意,在运行时创建一个位图,并将其添加到我的一个表格单元格中 我已经读到,可以从resource so添加位图,而不必将它们放在硬盘上 见: 这是我尝试将其应用于我的小项目: 创建位图的代码: Bitmap GreenDot = new Bitmap(32,32); Graphics GreenDotGraphics = Graphics.FromImage(GreenDot); GreenDotGra

我想使用PDFsharp和MigraDoc生成PDF。到目前为止,一切都很好

现在我想出了一个主意,在运行时创建一个位图,并将其添加到我的一个表格单元格中

我已经读到,可以从resource so添加位图,而不必将它们放在硬盘上

见:

这是我尝试将其应用于我的小项目:

创建位图的代码:

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);
.
.
.
将位图转换为字节[]的代码

public static byte[] ImageToByte(System.Drawing.Image img)
{
    using(var ms = new MemoryStream())
    {
        img.Save(ms,System.Drawing.Imaging.ImageFormat.Bmp);
        return ms.ToArray();
    }
}
当我运行代码时,我会得到一个警告,上面写着“warning:Image'base64:Qk02E[…]=='notfound.”(在这篇文章中,base64字符串被截断)

我猜我没有正确地将其转换为字节[]


有人能帮我找到正确的方法吗?

请注意,您使用的是1.50版中引入的功能

使用1.32或更早版本时,您会收到您提到的警告


使用1.50 beta 2版或更高版本时,您的代码可以正常工作。

是否将
AddImage()
的第一个参数的数据类型定义为
string
?这将解释错误消息,因为图像对象通过
ToString()
隐式转换为字符串。在这种情况下,您需要声明文件名而不是流(至少在我的项目中,我需要传递文件名)。请阅读链接的Wiki文章。是的,这篇文章说了什么<代码>节.添加图像(图像文件名)-您是否在变量名中看到单词
文件名
?这就是我写的您需要传递文件名的原因。MigraDoc现在接受包含带有前缀“BASE64:”的BASE64编码图像的文件名。在这种情况下,文件名不引用文件,文件名包含ASCII字符串中的位图的所有位,采用BASE64编码。字节数组(C#中的字节[])可以很容易地转换为文件名。如果您有一个流,您可以轻松地将其读入字节数组并使用它。但是,感谢您的努力。BASE64编码是正确的,但是原始消息中显示的警告以一种误导性的方式被截断,将“字节”而不是实际的BASE64数据,从而给人一种错误的印象(至少对我来说)。我使用的是1.50。这就是我想知道的原因。准确地说是1.50.4589.0。我成功地试用了这三个NuGet软件包:
PDFsharp MigraDoc WPF.1.50.4589-beta4
PDFsharp MigraDoc WPF.1.50.4619-beta4c
,以及
PDFsharp MigraDoc WPF.1.50.4000-beta3b
。Adobe Reader中的“文档属性”页面显示了用于创建PDF的版本。我重置了所有内容,重新启动了计算机,并重新分配了我以前使用的1.50 dll,该dll正在工作。也许你疯了。无论如何,谢谢你。很高兴知道我的代码从一开始就可以工作;)