我正在使用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
。我是否需要任何转换或中间对象来将图像渲染为图像?
答案 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);
}