构建一个.net core restful API,我需要在响应中返回一个图像的字节数组,图像首先需要从html转换

w8rqjzmb  于 2023-05-21  发布在  .NET
关注(0)|答案(1)|浏览(194)

我正在Visual Studio 2019中使用一个.net core restful应用程序,该应用程序返回要打印的图像的字节数组。我有HTML模板存储,需要转换为图像,所以我使用PdfSharpCore,主要是因为这是最好的,我可以找到,而不必购买库。我的问题是我发现的代码样本说它适用于PdfSharpCore,但它在样本中使用了XImage.FromGdiPlusImage,这在PdfSharpCore中不可用,只有在PdfSharp中,这在.net核心应用程序中应该不受支持。我花了一整天想把它编译出来。任何帮助将不胜感激。如果我错了,有一个更简单的方法来实现这一点,请随时分享。

public byte[] GetBitmapByteArrayFromHtmlString( String html )
{
    byte[]    data;

    // Convert the HTML string to a PDF document
    //HtmlToPdf converter = new HtmlToPdf();

    // Create an XGraphics object from the first page of the PDF document
    PdfDocument doc = PdfGenerator.GeneratePdf(html,PdfSharpCore.PageSize.A0,20,null,null,null);
    PdfPage page = doc.Pages[0];
    XGraphics gfx = XGraphics.FromPdfPage( doc.Pages[0] );

    // Create an XImage object from the XGraphics object
    int width = Convert.ToInt32(gfx.PdfPage.Width.ToString());
    int height = Convert.ToInt32(gfx.PdfPage.Height.ToString());
    XImage image = XImage.FromGdiPlusImage(new Bitmap(width, height));

    // Create a bitmap image from the XImage object
    Bitmap bitmap = new Bitmap( image.PixelWidth, image.PixelHeight, System.Drawing.Imaging.PixelFormat.Format32bppArgb );
    bitmap.SetResolution( (float) image.HorizontalResolution, (float) image.VerticalResolution );

    using( MemoryStream stream = new MemoryStream() )
    {
        bitmap.Save( stream, System.Drawing.Imaging.ImageFormat.Png );
        data = stream.ToArray();
    }

    return data;
   
    // Save the bitmap image to a file
    //bitmap.Save("image.png", System.Drawing.Imaging.ImageFormat.Png);

} /* End GetBitmapByteArrayFromHtmlString */
sczxawaw

sczxawaw1#

如果你不能使用XImage.FromGdiPlusImage,那么一个解决方案是:
1.将Bitmap保存到MemoryStream(以核心构建的PDFsharp支持的格式)
1.从该MemoryStream创建XImage
OTOH,如果您的代码使用GDI+中的Bitmap类,那么请考虑使用支持XImage.FromGdiPlusImage的PDFsharp的GDI构建。但是,正如你所写的,这在Linux或Mac下的核心环境中不可用。

相关问题