.NET Core RESTful API中Html转图片字节数组编译问题求助
问题说明
在Visual Studio 2019开发.NET Core RESTful应用,需求是将HTML模板转为图片字节数组用于打印。选用免费类库PdfSharpCore后,发现示例代码中的XImage.FromGdiPlusImage方法仅存在于不支持.NET Core的旧版PdfSharp中,PdfSharpCore无此方法,导致代码无法编译。
解决方案
方案1:基于PdfSharpCore + SkiaSharp实现PDF转图片
PdfSharpCore底层依赖SkiaSharp,可直接用SkiaSharp渲染PDF页面为Bitmap,替代原代码中缺失的XImage.FromGdiPlusImage逻辑。
修改后的代码
using PdfSharpCore.Pdf; using SkiaSharp; using System.IO; public byte[] GetBitmapByteArrayFromHtmlString(string html) { // 将HTML转为PDF文档 using var doc = PdfGenerator.GeneratePdf(html, PdfSharpCore.PageSize.A0, 20, null, null, null); var page = doc.Pages[0]; // 转换页面尺寸为Skia可用的像素单位(DPI设为96) const int dpi = 96; var width = (int)(page.Width.PointToPixel(dpi)); var height = (int)(page.Height.PointToPixel(dpi)); // 用SkiaSharp渲染PDF页面到Bitmap using var pdfStream = new MemoryStream(); doc.Save(pdfStream); pdfStream.Position = 0; using var skPdf = SKDocument.Open(pdfStream); using var bitmap = new SKBitmap(width, height); using var canvas = new SKCanvas(bitmap); canvas.Clear(SKColors.White); if (skPdf.PageCount > 0) { var pageCanvas = skPdf.GetPage(0).Canvas; canvas.DrawPicture(pageCanvas.Picture); } // 将Bitmap转为PNG字节数组 using var imageStream = new MemoryStream(); bitmap.Encode(imageStream, SKEncodedImageFormat.Png, 100); return imageStream.ToArray(); }
依赖安装
需安装以下NuGet包:
PdfSharpCoreSkiaSharpPdfSharpCore.Quality(包含HTML转PDF的PdfGenerator类)
方案2:直接HTML转图片(更简便)
若无需中间PDF转换步骤,可使用专门的HTML转图片类库,跳过PDF环节减少开销,例如HtmlToImage.NetCore:
示例代码
using HtmlToImage.NetCore; using System.Drawing.Imaging; public byte[] GetBitmapByteArrayFromHtmlString(string html) { var converter = new HtmlConverter(); // 对应A0尺寸(96DPI)的像素值,可按需调整 var imageBytes = converter.FromHtmlString(html, width: 1189, height: 1684, format: ImageFormat.Png); return imageBytes; }
依赖安装
安装NuGet包:HtmlToImage.NetCore
内容的提问来源于stack exchange,提问作者Chris Varga
相关产品推荐
相关产品推荐

