2008-12-02 29 views
11

Estoy generando un cupón basado en la 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 por la forma en que los fondos desaparecen al imprimir y otros problemas, así que creo que la mejor solución sería 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 alimentado como fondo y pone la información del cupón en la parte superior.Renderizar HTML como una imagen

¿Hay algo que ya lo haga?

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

Gracias de antemano.

editar: Sería fantástico si la salida se pudiera 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 justo cuando se trata del impresión (en papel) tiene problemas de indexación z.

Respuesta

10

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. Excluyendo todos los trámites de la generación de la imagen, podrás Load se verá algo como esto:

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 todo! 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.

+0

así que esto permitirá generar dinámicamente una imagen como fondo con texto en arriba, sacado de una base de datos? Si es así, ¡suena espectacular! – Tablet

+0

Sí. Puede crear el cupón completo como una imagen en su procesador y devolverlo. O si desea colocar texto encima, tendrá que hacer las cosas un poco más complicadas y crear un div o una tabla con el renderizador como fondo. –

+0

¿Cuál es el código mágico? – user287745

0

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

Me hacen creer que hay un envoltorio para esta biblioteca que los programadores de ASP pueden usar. Try this

0

A menos que los "otros problemas" sean bastante graves, ¿no podría simplemente indicarle 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.

+0

¿Puedo generar un PDF usando HTML? Si se "imprime" en PDF, simplemente causaría el mismo problema que estoy teniendo con z-indexing – Tablet

1

Probar PDFSharp ... no es exactamente un "tomar este HTML y hacer un PDF", pero con un pequeño truco puedes hacer fácilmente un PDF con la información que estás utilizando para hacer el HTML.

+4

pequeña cantidad puede ser una subestimación allí; D –

3

Puede renderizar html en un mapa de bits 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 puede ser modificado para funcionar en ASP.Net mediante la creación de un nuevo STAThread y realizar una Application.Run sobre él para iniciar un nuevo bucle de mensajes.

3

PHP/Ruby Alternativa


Si ha accedido a esta pregunta y en realidad se está buscando soething que funcionará sin Windows, puede buscar en 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 sourceforge http://khtml2png.sourceforge.net/

0

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.

0

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

ACTUALIZACIÓN: Probé esto 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.

1

MARCADO SOLO solución alternativa

Uso SVG y XSLT para transformar los datos HTML en una imagen que puede ser renderizado/guardados/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.

Cuestiones relacionadas