Usuário com melhor resposta
Html to Image !!

Pergunta
-
Boa noite galera..
Estou tentando converter o conteúdo de uma div (incluindo imagens) em uma imagem, para o usuário fazer o download da mesma no final.
De início, gostaria de saber se podem me ajudar com a geração da imagem.
Quando passo uma simples string, tranquilo... Mas quando tento passar a div exibe a seguinte mensagem:
"Não é possível obter o conteúdo interno de essa porque os conteúdos não são literais.
"
Segue:
HTML:
<div runat="server" id="essa"> Teste: <asp:Literal runat="server" ID="ltrTeste" Text="Testando" /><br /> <img src="../Images/heroAccent.png" /> <asp:Button ID="btnGerar" runat="server" OnClick="btnGerar_Click" Text="Gerar" /> </div>
Código:
protected void btnGerar_Click(object sender, EventArgs e) { Bitmap oBitmap = new Bitmap(468, 60); Graphics oGraphic = Graphics.FromImage(oBitmap); String scolor = "Black"; String sText = essa.InnerHtml; Color oColor = Color.FromName(scolor); SolidBrush oBrush = new SolidBrush(oColor); SolidBrush oBrushwrite = new SolidBrush(Color.White); oGraphic.FillRectangle(oBrush, 0, 0, 468, 60); Font oFont = new Font("Arial", 13); PointF oPoint = new PointF(5f, 5f); oGraphic.DrawString(sText, oFont, oBrushwrite, oPoint); Response.ContentType = "image/jpeg"; oBitmap.Save(Response.OutputStream, ImageFormat.Jpeg); }
Respostas
-
Olá Terra,
O Nuno já respondeu o que tem que fazer, eu estava testando isso, e abaixo está o código de como deve ficar:
protected void btnGerar_Click(object sender, EventArgs e) { Bitmap oBitmap = new Bitmap(468, 60); Graphics oGraphic = Graphics.FromImage(oBitmap); String scolor = "Black"; var sb = new StringBuilder(); essa.RenderControl(new HtmlTextWriter(new StringWriter(sb))); string sText = sb.ToString(); Color oColor = Color.FromName(scolor); SolidBrush oBrush = new SolidBrush(oColor); SolidBrush oBrushwrite = new SolidBrush(Color.White); oGraphic.FillRectangle(oBrush, 0, 0, 468, 60); Font oFont = new Font("Arial", 13); PointF oPoint = new PointF(5f, 5f); oGraphic.DrawString(sText, oFont, oBrushwrite, oPoint); Response.ContentType = "image/jpeg"; oBitmap.Save(Response.OutputStream, ImageFormat.Jpeg); }
Uma observação para o RenderControl funcionar vc deve fazer override do metodo "VerifyRenderingInServerForm" para não chamar o método da classe base, e tbm setar a propriedade "EnableEventValidation" da página para false.
Qualquer coisa é só perguntar. Abraços!
Alexsandre R. Almeida
E-mail: alexsandrer@gmail.com
Twitter: @AlexRAlmeida- Sugerido como Resposta Seilor Bonancio JuniorModerator terça-feira, 5 de fevereiro de 2013 10:52
- Marcado como Resposta Seilor Bonancio JuniorModerator sexta-feira, 8 de fevereiro de 2013 12:37
Todas as Respostas
-
Olá Terra,
quando um HtmlControl tem mais que um filho não dá para usar a propriedade InnerHtml. Uma solução é usar o método RenderControl.
Nuno Gomes http://nunogomes.net
-
Olá Terra,
O Nuno já respondeu o que tem que fazer, eu estava testando isso, e abaixo está o código de como deve ficar:
protected void btnGerar_Click(object sender, EventArgs e) { Bitmap oBitmap = new Bitmap(468, 60); Graphics oGraphic = Graphics.FromImage(oBitmap); String scolor = "Black"; var sb = new StringBuilder(); essa.RenderControl(new HtmlTextWriter(new StringWriter(sb))); string sText = sb.ToString(); Color oColor = Color.FromName(scolor); SolidBrush oBrush = new SolidBrush(oColor); SolidBrush oBrushwrite = new SolidBrush(Color.White); oGraphic.FillRectangle(oBrush, 0, 0, 468, 60); Font oFont = new Font("Arial", 13); PointF oPoint = new PointF(5f, 5f); oGraphic.DrawString(sText, oFont, oBrushwrite, oPoint); Response.ContentType = "image/jpeg"; oBitmap.Save(Response.OutputStream, ImageFormat.Jpeg); }
Uma observação para o RenderControl funcionar vc deve fazer override do metodo "VerifyRenderingInServerForm" para não chamar o método da classe base, e tbm setar a propriedade "EnableEventValidation" da página para false.
Qualquer coisa é só perguntar. Abraços!
Alexsandre R. Almeida
E-mail: alexsandrer@gmail.com
Twitter: @AlexRAlmeida- Sugerido como Resposta Seilor Bonancio JuniorModerator terça-feira, 5 de fevereiro de 2013 10:52
- Marcado como Resposta Seilor Bonancio JuniorModerator sexta-feira, 8 de fevereiro de 2013 12:37