Renderizar HTML como uma imagem

Estou gerando um cupom baseado em input dinâmica e uma imagem cortada, e estou exibindo o cupom usando ntml e css agora, o problema é que imprimir isso se tornou um problema por causa de como os planos de fundo desaparecem durante a impressão e outros problemas, então eu acho que a melhor solução seria gerar uma imagem baseada no html, ou configurar algum tipo de template que inclua strings e uma imagem, e gere uma imagem usando a imagem alimentada como plano de fundo e coloque a imagem informações de cupons na parte superior.

Existe alguma coisa que já faz isso?

Isto é para um site ASP.NET 3.5 C #!

Desde já, obrigado.

edit: Seria ótimo se a saída pudesse ser baseada na input HTML, já que o cupom é projetado manipulando o DOM usando jQuery e arrastando coisas, tudo funciona bem, é só quando se trata da impressão (para papel ) tem problemas de indexação z.

O que você pode fazer é criar uma página aspx que altere o tipo de resposta para estar no formato desejado e, em seguida, coloque a imagem no stream. Eu criei um gerador de código de barras que faz uma coisa semelhante. Excluindo todas as formalidades da geração da imagem, o Page_Load será parecido com isto:

Bitmap FinalBitmap = new Bitmap(); MemoryStream msStream = new MemoryStream(); strInputParameter == Request.Params("MagicParm").ToString() // Magic code goes here to generate your bitmap image. FinalBitmap.Save(msStream, ImageFormat.Png); Response.Clear(); Response.ContentType = "image/png"; msStream.WriteTo(Response.OutputStream); if ((FinalBitmap != null)) FinalBitmap.Dispose(); 

e é isso! Então tudo que você precisa fazer na sua imagem é definir a URL como algo como RenderImage.aspx? MagicParm = WooHoo ou o que você precisar. Dessa forma, você pode renderizar o que quiser.

Você pode renderizar html para um bitmap usando o controle WebBrowser em um aplicativo winforms ou console.

Um exemplo disso pode ser encontrado aqui: http://www.wincustomize.com/articles.aspx?aid=136426&c=1

O exemplo acima pode ser modificado para ser executado no ASP.Net, criando um novo STAThread e executando um Application.Run nele para iniciar um novo loop de mensagem.

Alternativa PHP / Ruby

Se você accessu esta questão e está realmente procurando por um sistema que funcione sem o Windows, você pode tentar a biblioteca KHTML: http://wiki.goatpr0n.de/projects/khtmld

O site tem um nome ridículo eu admito, mas posso garantir que é genuíno. Outras páginas relacionadas são: the sourceforge page http://khtml2png.sourceforge.net/

Tente o PDFSharp … não é exatamente um “pegue este HTML e faça um PDF”, mas com uma pequena quantidade de mexer você pode facilmente fazer um PDF com as informações que você está usando para fazer o HTML.

MARKUP SOMENTE SOLUÇÃO ALTERNATIVA

Use SVG e XSLT para transformar os dados html em uma imagem que pode ser renderizada / salva / etc.

Admito que no início foi tedioso fazer isso funcionar por causa de todas as coordenadas, mas valeu a pena, uma vez que está em execução.

Existe uma biblioteca de criação de imagens muito poderosa chamada GD, que eu geralmente uso com PHP.

Sou levado a acreditar que há um wrapper para essa biblioteca que os programadores de ASP podem usar. Tente isso

A menos que os “outros problemas” sejam bastante severos, você não poderia simplesmente instruir seus usuários a ativar as Imagens de Fundo ao imprimir?

Em qualquer caso, eu seria o padrão para servir um PDF, em vez de uma imagem, o dobro, uma vez que se destina a impressão.

Basta configurar o seu css corretamente, para que você tenha um arquivo css direcionado para o meio de impressão. É muito fácil garantir que o cupom será sempre legível, sem se preocupar se eles têm imagens em BG ou não. Não é recomendável mover-se com agulhas para uma imagem, a menos que haja algum motivo para que você não queira que ela seja legível por máquina.

Eu não tentei para mim mesmo, mas você deve ser capaz de renderizar HTML em uma imagem usando o controle WebBrowser eo método DrawToBitmap () herdado da class base Control.

UPDATE: eu tentei isso sozinho e há algumas ressalvas. O controle WebBrowser não parece processar a página da Web até que o controle seja exibido, portanto, o WebBrowser precisa estar em um formulário e o formulário deve ser mostrado para o HTML a ser processado eo evento DocumentCompleted a ser gerado.