Search code examples
c#asp.net-mvcmemorystreamhtml-rendering

C# MVC save View as png


i have problem with png HTML renderer, i am trying to send png of View to email, but on email i get 0B .png PS: Ticket.pdf is ok

 using (MemoryStream ms = new MemoryStream())
        {

            var pdf = PdfGenerator.GeneratePdf(RenderRazorViewToString("TicketTemplateBig", model), PdfSharp.PageSize.A4);
            pdf.Save(ms, false);

            /////////////////
            //Bitmap bitmap = new Bitmap(Convert.ToInt32(1024), Convert.ToInt32(1024), System.Drawing.Imaging.PixelFormat.Format32bppArgb);
            using (MemoryStream ms2 = new MemoryStream())
            {
                //Image image = TheArtOfDev.HtmlRenderer.WinForms.HtmlRender.RenderToImage(RenderRazorViewToString("TicketTemplateBig", model));

                Bitmap bitmap = (Bitmap)Image.FromFile(@"C:\logo.png");
                bitmap.Save(ms2, ImageFormat.Png);


                /////////////////
                await ms.FlushAsync();
                await ms2.FlushAsync();
                mm.Attachments.Add(new Attachment(ms, string.Format("Ticket.pdf"), "application/pdf"));
                streams.Add(ms);
                mm.Attachments.Add(new Attachment(ms2, string.Format("logo.png"), "application/png"));
                streams.Add(ms2);
                await client.SendMailAsync(mm);
            }
        }

Solution

  • problem : stream was on last position

    result : ms2.Position = 0;

               using (MemoryStream ms = new MemoryStream())
            {
    
                var pdf = PdfGenerator.GeneratePdf(RenderRazorViewToString("TicketTemplateBig", model), PdfSharp.PageSize.A4);
                pdf.Save(ms, false);
    
                using (MemoryStream ms2 = new MemoryStream())
                {
                    Image image = TheArtOfDev.HtmlRenderer.WinForms.HtmlRender.RenderToImage(RenderRazorViewToString("TicketTemplateBig", model));
                    image.Save(ms2, ImageFormat.Png);
                    ms2.Position = 0;
                    await ms.FlushAsync();
                    await ms2.FlushAsync();
                    mm.Attachments.Add(new Attachment(ms, string.Format("Ticket.pdf"), "application/pdf"));
                    mm.Attachments.Add(new Attachment(ms2, string.Format("Ticket.png"), "application/png"));
                    await client.SendMailAsync(mm);
                }
            }
    

    Thanks Guys