2008-10-02 25 views
12

Estoy trabajando en una aplicación web ASP.Net que debe imprimir etiquetas creadas dinámicamente en hojas de etiquetas de estilo Avery estándar (un tamaño particular, por lo que solo una disposición general). Las etiquetas tienen un número variable de líneas (3-6) y pueden contener líneas de texto o una imagen gráfica de código de barras.Impresión de etiquetas de código de barras desde una página web

Nuestro primer corte, que heredé, usé fuentes monoespaciadas para reducir los problemas de formato, pero eso no permitió suficiente texto para las etiquetas y el cliente no estaba satisfecho. Básicamente fue texto formateado.

Mi próxima versión usa TABLE, DIV, CSS y un poco de cálculos de JavaScript para formatear las etiquetas usando fuentes proporcionales. Todavía requería un poco de ajuste (el usuario tenía que establecer sus márgenes de impresión correctamente y desactivar los encabezados y pies de página), pero parecía funcionar.

Sin embargo, parece que hay algunas variaciones sobre cómo las diferentes impresoras procesan el texto (WYS no es WYG), aunque probamos en diferentes navegadores usando al menos dos impresoras diferentes (una impresora de inyección de tinta y láser) , algunas etiquetas de usuario no se alinean. Las variaciones de márgenes leves se pueden ajustar ajustando los márgenes en el diálogo de configuración de página, pero el problema más difícil es que el espaciado entre etiquetas puede estar desactivado en una pequeña fracción de pulgada, de modo que si la primera etiqueta está bastante centrada, por al final de la página, el texto y las imágenes de la etiqueta se han arrastrado por la parte superior o inferior de las etiquetas.

Estamos a punto de cambiar a la generación de resultados de Word, Excel o PDF, lo que llevará bastante tiempo de desarrollo y es posible agregar pasos adicionales en el proceso de impresión.

Entonces, ¿alguien tiene alguna sugerencia sobre cómo hacer un diseño de HTML/CSS que se representará con precisión en diferentes tipos de impresoras? Realmente no me importa si los saltos de línea/palabra son un poco diferentes, pero necesito poder ubicar de manera predecible las esquinas superiores izquierdas de cada área de etiqueta.

Ahora las etiquetas fluyen por la página en una tabla y hemos estado ajustando el modelo de caja de las celdas y los DIV internos para que tengan una altura uniforme. Sospecho que el uso del posicionamiento absoluto de cada elemento puede ser la mejor respuesta, pero también será complicado debido a la generación de ASP.Net de los elementos de la etiqueta. Si supiera con certeza que funcionaría, preferiría intentarlo que tirar todo lo que tenemos que ir a un método de generación diferente.

Ligera actualización: Ahora mismo estoy haciendo algunas pruebas con posicionamiento absoluto - estableciendo solo la coordenada superior e izquierda de un elemento de bloque contenedor. Hasta el momento hay variaciones menores en el desplazamiento en la página (márgenes, alineación del papel, etc.), pero todos los navegadores e impresoras probados pusieron los elementos en exactamente los puntos correctos entre sí. Agradezco los consejos PDF, pero ¿alguien sabe de "errores" adicionales al usar el posicionamiento absoluto de esta manera?

Actualización: Para el registro, Reescribí la parte de impresión de etiquetas usando iTextSharp y funciona perfectamente - sin duda la forma de hacerlo en el futuro ...

Respuesta

27

Forget HTML y crear un PDF. La impresión HTML es extremadamente variable, no solo en todos los navegadores, sino en diferentes versiones del mismo navegador. PDF es mucho más fácil.

Incluso si lo hace exactamente bien con un navegador/configuración de fuente/impresora/fase de la luna, será lo más frágil que haya tenido que mantener.No importa cuánto tiempo piense que tomará hacer un PDF (y no es tan difícil, ya que hay algunas librerías gratuitas), HTML finalmente le tomará mucho más tiempo. Los lectores de PDF se implementan ampliamente y se imprimen de forma más uniforme que incluso los archivos de Word.

+0

Tengo que estar de acuerdo. Recientemente tuvimos un problema similar y generar archivos PDF fue la solución más rápida y simple. Incluso fuimos tan lejos como proporcionar una página de calibración para manejar las calibraciones de etiquetas e impresión para diferentes impresoras – BinaryMisfit

+0

PDF sería más difícil y menos flexible que un documento de Word, ¿no? –

+0

PDF es menos flexible que un archivo de Word porque no puede (fácilmente) editar un archivo PDF. Sin embargo, no creo que sea una consideración aquí. PDF es definitivamente más fácil de generar que un archivo de Word. Este artículo de Wikipedia enumera algunas de las maneras de hacerlo: http://en.wikipedia.org/wiki/List_of_PDF_software – Neall

5

La web no es un formato que garantice resultados de impresión uniformes. Dado el soporte estándar para la impresión de etiquetas con MS Word, y la relativa facilidad de automatización y generación, recomiendo encarecidamente seguir esa ruta.

No conozco CUALQUIER método para obtener impresiones percise en todos los tipos de navegadores, sistemas operativos e impresoras cuando utilizo contenido web.

+0

Sí, pero lo frustrante es que estamos tan cerca ... – CMPalmer

+1

Puede que estés AHORA MISMO, pero el la próxima actualización de FireFox, la próxima actualización de IE, y vuelves al punto de partida. –

0

Agregue algunas opciones a su aplicación que permitan a los usuarios ajustar el espaciado para su configuración particular. Puede incluir este derecho en la etiqueta si lo desea, y cambiar el estilo a través de selectores de medios, pero es probable que desee persistir en algún lugar, también.

+0

No podemos hacer que establezcan sus márgenes y sus encabezados y pies de página de manera confiable y las instrucciones se muestran en la página web de la etiqueta (y ocultos por los selectores de medios en la impresión), pidiéndoles que hagan micro ajustes al espaciado entre etiquetas no funcionará para nosotros. – CMPalmer

3

"precisamente" e "impresión" no son dos palabras que realmente funcionen juntas tan bien. Hice una aplicación OCR/OMR hace aproximadamente un año, e incluso cuando construí un PDF vi diferencias significativas entre los diferentes controladores de impresión y demás. Debido a eso, mi instinto es decirte que es posible que no tengas el 100% de éxito.

Si los problemas de diseño y CSS no funcionan tan bien para usted, puede que necesite recurrir a construir las etiquetas como imágenes usando GDI +, al menos de esa manera puede usar GetFontMetrics() y tal.

¡Buena suerte!

3

Tuve un problema similar y la respuesta es que no puede hacerlo. En cambio, genere un archivo PDF en tiempo real usando iTextSharp y lo pasé a la respuesta.

0

El flash también es un buen método para impulsar una etiqueta imprimible, aunque un poco más compleja de implementar y mantener. En la mayoría de los casos, muestra mucho más rápido que un PDF y puede incrustarlo en el diseño de la página y simplemente agregar un botón "Imprimir" dentro del flash.

Lo hice hace varios años cuando estábamos usando HTML y PDF para generar recibos de confirmación. HTML está "bien", pero está a merced del navegador web de los usuarios finales, por lo que rápidamente descartamos ese método. Los PDF son buenos siempre que tengan un lector de PDF, lo cual para nuestra sorpresa, muchos de nuestros clientes no lo hicieron. Así que eso también se abandonó después de cambiar a una versión FLASH utilizando una película flash simple que incluía algunas áreas de texto dinámico y un botón "imprimir". Comuniqué los datos entre la página y el flash usando algunos flash vars. También puedes usar el servicio web.

Cuando necesito algo más que texto simple, utilizo la edición de comunidad gratuita del componente PDF Generator del DynamicPDF.com. Funciona muy bien y es muy rápido.

2

Utilizando SQL Server Reporting Services, genero un PDF para enviar a la impresora, pero puede verse como HTML en la pantalla usando el control que puede incluir en sus páginas web. Hay archivos RDLC que están disponibles en Internet para imprimir en varios formatos Avery.

1

También tuve problemas con el enfoque HTML/CSS debido al comportamiento de impresión incoherente en los navegadores.

he creado un # biblioteca C para producir etiquetas de Avery de ASP.NET que espero que le puede resultar útil:

https://github.com/wheelibin/SharpPDFLabel#readme

Usted puede agregar imágenes y texto a las etiquetas, y es fácil de definir con mayor tipos de etiquetas.

(lo uso para las etiquetas de código de barras, el código de barras se genera como una imagen y luego se añadió a la etiqueta utilizando esta biblioteca.)

Saludos

+0

Solo estoy bajando esto porque el código ahora está desactualizado. Sin embargo, utilicé su proyecto como base de mi respuesta, por lo que me siento mal/incómodo por vencerlo. –

+1

jaja, no te preocupes - me alegro de que sea de alguna utilidad para alguien (podría haber estado bien si hubieras contribuido al original para hacerlo mejor en lugar de solo bifurcarlo, pero bueno ho) – wheelibin

+0

Supuse que incorrectamente parece, que realmente no estabas manteniendo el proyecto anterior, así que no quería molestarte sobre eso. Te he enviado una solicitud de extracción. –

0

acabo de ir a través de la misma cosa. Terminó cambiando y haciendo una breve pequeña aplicación JSF (que se ejecuta en Glassfish) que utiliza JasperReports para imprimir directamente en la impresora de etiquetas. Pulsador, etiqueta instantánea en la impresora, ni siquiera tiene que verlo en la pantalla si no lo desea, ya que Jasper puede enviar directamente a la impresora (así como a PDF en el navegador).

2

Reescribí el código SharpPDFLabel que se mencionó en 2011 esta semana porque necesitaba que fuera mucho más flexible (y para trabajar con la biblioteca iTextSharp actual).

Puede obtenerlo aquí: https://github.com/finalcut/SharpPDFLabel

que añade la posibilidad de especificar el contenido de cada etiqueta individual si quieres (o para continuar creando una hoja de etiquetas idénticas también). Al extender la clase , puede especificar el diseño de sus etiquetas con bastante facilidad.

+0

¿Cómo se agrega un código de barras itextsharp a una etiqueta? –

+0

en la parte superior de mi cabeza No estoy seguro lo siento. No he usado esta biblioteca mucho desde que hice mi actualización. No necesité agregar códigos de barras a ninguno de los míos; Solo nombres y direcciones (etiquetas postales). Supongo que es una imagen (el código de barras) así que tal vez algo así como: '' 'cs singleSheetLabelCreator.AddImage (myImageAsAStream); '' ' –

Cuestiones relacionadas