如何将 PNG 作为字节 [] 提供给 HtmlImageLoadEventArgs 回调?
How to serve PNG to HtmlImageLoadEventArgs callback as byte[]?
我正在使用 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
已将 PNG 作为 byte[]
存储在名为 Data
的成员中。我是否需要任何转换或中间对象来将图像 属性 渲染为图像?
好的,我知道了。图像类型必须是 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);
}
我正在使用 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
已将 PNG 作为 byte[]
存储在名为 Data
的成员中。我是否需要任何转换或中间对象来将图像 属性 渲染为图像?
好的,我知道了。图像类型必须是 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);
}