Renderizar HTML como una imagen

Estoy generando un cupón basado en una entrada dinámica y una imagen recortada, y estoy mostrando el cupón usando ntml y css en este momento, el problema es que imprimir esto se ha convertido en un problema debido a cómo los fondos desaparecen al imprimir y otros problemas, así que creo que la mejor solución sería poder generar una imagen basada en html, o configurar algún tipo de plantilla que tome cadenas y una imagen, y genere una imagen usando la imagen introducida como fondo y ponga el información de cupón en la parte superior.

¿Hay algo que haga esto ya?

¡Esto es para un sitio web ASP.NET 3.5 C #!

Gracias por adelantado.

editar: sería genial si la salida se puede basar en la entrada de HTML, ya que el cupón se diseñó manipulando el DOM usando jQuery y arrastrando cosas, todo funciona bien, es solo cuando se trata de la impresión (en papel) ) tiene problemas de indexación z

Lo que puede hacer es crear una página aspx que cambie el tipo de respuesta para que esté en el formato que desea y luego coloque la imagen en la secuencia. Creé un generador de código de barras que hace algo similar. Si se excluyen todas las formalidades para generar la imagen, Page_Load tendrá el siguiente aspecto:

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(); 

¡y eso es! Entonces todo lo que tienes que hacer en tu imagen es configurar la URL para que sea algo así como RenderImage.aspx? MagicParm = WooHoo o lo que sea que necesites. De esa forma puede hacer que represente lo que quiera especificar.

Puede renderizar html en un bitmap utilizando el control WebBrowser en una aplicación winforms o consola.

Un ejemplo de esto se puede encontrar aquí: http://www.wincustomize.com/articles.aspx?aid=136426&c=1

El ejemplo anterior se puede modificar para ejecutar en ASP.Net creando un nuevo STAThread y realizando una aplicación. Ejecutar sobre él para iniciar un nuevo ciclo de mensajes.

Alternativa PHP / Ruby

Si ha accedido a esta pregunta y está buscando realmente algo que funcione sin Windows, puede probar la biblioteca KHTML: http://wiki.goatpr0n.de/projects/khtmld

El sitio web tiene un nombre ridículo, lo admito, pero puedo asegurarle que es genuino. Otras páginas relacionadas son: la página de sourceforge http://khtml2png.sourceforge.net/

Prueba PDFSharp … no es exactamente “toma este HTML y crea un PDF”, pero con un pequeño truco puedes hacer fácilmente un PDF con la información que estás utilizando para crear el HTML.

MARKUP SOLO SOLUCIÓN ALTERNATIVA

Use SVG y XSLT para transformar los datos html en una imagen que pueda ser renderizada / guardada / etc.

Debo admitir que al principio fue tedioso hacer que esto funcionara debido a todas las coordenadas, pero bien vale la pena el esfuerzo una vez que se está ejecutando.

Hay una biblioteca de creación de imágenes muy poderosa llamada GD que a menudo uso con PHP.

Me hacen creer que hay una envoltura para esta biblioteca que los progtwigdores de ASP pueden usar. Prueba esto

A menos que los “otros problemas” sean bastante severos, ¿no podría simplemente indicar a sus usuarios que activen Imágenes de fondo al imprimir?

En cualquier caso, prefiero publicar un PDF en lugar de una imagen, ya que está destinado a la impresión.

Simplemente configure su CSS correctamente, para que tenga un archivo CSS dirigido al medio de impresión. Es bastante fácil garantizar que el cupón siempre será legible, sin preocuparse por si tienen o no imágenes BG. El movimiento con agilidad a una imagen no tiene ningún sentido, a menos que haya algún motivo por el que no desee que sea legible por máquina.

No lo he intentado solo, pero debería poder renderizar HTML en una imagen usando el control WebBrowser y el método DrawToBitmap () heredado de la clase base Control.

ACTUALIZACIÓN: Lo intenté yo mismo y hay algunas advertencias. El control WebBrowser no parece representar la página web hasta que se muestre el control, por lo que el WebBrowser debe estar en un Formulario y el Formulario debe mostrarse para que se represente el HTML y se genere el evento DocumentCompleted.