如何将PNG作为byte []提供给HtmlImageLoadEventArgs回调?

时间:2015-02-17 08:36:03

标签: c# png html-rendering

我正在使用HTML Renderer来创建PDF。我实现了一个图像提供程序到服务器映像(PNG)。它的HandleImageLoad被正确调用,但提供的imgae未在PDF中显示,但看起来像时钟(?)图像。

这是设置:

ImageProvider imgProvider = new ImageProvider();

PdfSharp.Pdf.PdfDocument pdf = TheArtOfDev.HtmlRenderer.PdfSharp.PdfGenerator.GeneratePdf(
    HTML, PdfSharp.PageSize.A4, 20, 
    null, null, imgProvider.HandleImageLoad);

public void HandleImageLoad(object sender, HtmlImageLoadEventArgs args)
{
      var img = LoadFromSource(args.Src);
        if(img == null)
        {
            args.Handled = false;
            args.Callback();
            Log.Error("Missing image: {0}", args.Src);
        }
        else
        {
            args.Handled = true;
            args.Callback(img.Data);
        }                                       
} 

变量img已在名为byte[]的成员中将PNG存储为Data。我是否需要任何转换或中间对象来将图像渲染为图像?

1 个答案:

答案 0 :(得分:4)

好的,我发现了。图像类型必须是PdfSharp.Drawing.XImage类型。最简单的方法是将PNG灯加载为System.Drawing.Image

using (var mem = new MemoryStream(img.Data))
{
    System.Drawing.Image sysImg = System.Drawing.Image.FromStream(mem, false, true);
    var ximg = PdfSharp.Drawing.XImage.FromGdiPlusImage(sysImg);
    args.Callback(ximg);
}