Pregunta

Estoy trabajando en una aplicación web ASP.Net que debe imprimir etiquetas creadas dinámicamente en hojas de etiquetas estándar de estilo Avery (un tamaño particular, por lo que solo un diseño 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.

Nuestro primer corte, que heredé, usó fuentes monoespaciadas para reducir los problemas de formato, pero eso no permitía que el texto encajara en las etiquetas y el cliente no estaba satisfecho. Básicamente era texto formateado.

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

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

Estamos a punto de pasar a generar una salida de Word, Excel o PDF que llevará bastante tiempo de desarrollo y posiblemente agregará pasos adicionales en el proceso de impresión.

Entonces, ¿alguien tiene alguna sugerencia sobre cómo hacer un diseño HTML / CSS que se renderice 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 posicionar previsiblemente las esquinas superiores izquierdas de cada área de etiqueta.

En este momento, 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 usar el posicionamiento absoluto de cada elemento puede ser la mejor respuesta, pero eso también será complicado debido a la generación ASP.Net de los elementos de la etiqueta. Si supiera con certeza que funcionaría, preferiría probarlo que tirar todo lo que tenemos para ir a un método de generación diferente.

Ligera actualización: En este momento estoy haciendo algunas pruebas con posicionamiento absoluto, configurando solo la coordenada superior e izquierda de un elemento de bloque que contiene. Hasta ahora, existen pequeñas variaciones en el desplazamiento de la página (márgenes, alineación del papel, etc.), pero todos los navegadores e impresoras probados ponen los elementos en exactamente los lugares correctos relativo el uno al otro. Agradezco los consejos en PDF, pero ¿alguien sabe de "trucos" adicionales? sobre el uso de posicionamiento absoluto de esta manera?

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

¿Fue útil?

Solución

Olvídate de HTML y crea un PDF. La impresión HTML es extremadamente variable, no solo entre navegadores, sino también entre 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 creas que tomará hacer un PDF (y no es realmente tan difícil, ya que hay algunas bibliotecas gratuitas), HTML finalmente te tomará mucho más tiempo. Los lectores de PDF se implementan ampliamente e imprimen de manera más consistente que incluso los archivos de Word.

Otros consejos

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

No conozco NINGÚN método para obtener una impresión precisa en todos los tipos de navegadores, sistemas operativos e impresoras cuando utilizo contenido web.

" precisamente " e "impresión" no son dos palabras que realmente funcionan bien juntas. 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. Por eso, mi instinto es decirle que es posible que no tenga el 100% de éxito.

Si los problemas de CSS y diseño no funcionan tan bien para usted, es posible que deba recurrir a la creación de etiquetas como imágenes usando GDI +, al menos de esa manera puede usar GetFontMetrics () y tal.

¡Buena suerte!

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

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 de Avery.

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

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

Agregué la capacidad de especificar el contenido de cada etiqueta individual si lo desea (o de continuar creando una hoja de etiquetas idénticas también). Al extender la clase LabelDefinition puede especificar el diseño de sus etiquetas con bastante facilidad.

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

Creé una biblioteca de C # para producir etiquetas de Avery desde ASP.NET que espero que les sea útil:

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

Puede agregar imágenes y texto a las etiquetas, y es fácil definir más tipos de etiquetas.

(Lo uso para etiquetas de código de barras, el código de barras se genera como una imagen y luego se agrega a la etiqueta usando esta biblioteca).

Saludos

Agregue algunas opciones a su aplicación que permitan a los usuarios ajustar el espaciado para su configuración particular. Si lo desea, puede incluir esto directamente en la etiqueta y personalizarlo mediante los selectores de medios, pero probablemente también desee conservarlos en algún lugar.

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

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

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

Acabo de pasar por lo mismo. Terminé cambiando y haciendo una pequeña aplicación JSF corta (que se ejecuta en Glassfish) que usa JasperReports para imprimir directamente en la impresora lable. Pulsador, etiqueta instantánea en la impresora, ni siquiera tiene que verlo en pantalla si no lo desea, ya que Jasper puede enviar directamente a la impresora (así como PDF en el navegador).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top