c# - print - ¿Manera eficiente de contar la cantidad de páginas para imprimir?
print preview c# (1)
TLDR ¿Cómo se puede determinar de manera eficiente la cantidad de páginas que se deben imprimir?
** Solo una nota: marqué la respuesta de klugerama como la respuesta a mi pregunta. ¡Aún estoy abierto para otras sugerencias!
Actualmente, tengo una aplicación en producción que imprime facturas. La impresión en sí no es un problema: la información del cliente, los detalles de la factura, etc. se imprimen como deberían. Sin embargo, los usuarios se quejan del tiempo que le lleva a mi software enviar el trabajo de impresión a la impresora.
Por el momento, he implementado una forma bastante ineficiente de imprimir. Para saber cuántas páginas tengo que imprimir, hago un ''run run'' del trabajo de impresión y lo cancelo antes de enviarlo a la impresora. Luego cuento el número de páginas que contiene el trabajo de impresión y agrego esa información al trabajo de impresión que realmente se envía a la impresora. Para hacer esto, ''abuso'' el método PrintDocument.PrintPage . Después de hacerlo, puedo imprimir "Página 1/2 - Página 2/2", etc.
Actualmente estoy pensando en manejar esto de una manera diferente. Sé cuáles son los márgenes que tengo en una página, como el encabezado y el pie de página. Ergo, el espacio entre el encabezado y el pie de página es el espacio disponible para imprimir información del artículo (nombre, precio, etc.). Si calculo la altura de la cadena (usando Graphics.MeasureString ), puedo decir cuándo los artículos ocupan más espacio en una página que está disponible para imprimir.
Anteriormente, la impresión podía demorar hasta un minuto antes de enviarse a la impresora (teniendo en cuenta que los clientes que ejecutan el software no son los más rápidos). Implementé este método, y ahora la impresión demora entre 5 y 10 segundos. Sin embargo, me pregunto si este es el camino a seguir. No me puedo imaginar que soy el único que se ocupa de este problema; ¿Como tratas con esto?
También estoy abierto a enfoques completamente diferentes.
Lo que estás haciendo suena como el camino a seguir. Pero...
En cambio, podría exportar a XML y usar XSLT para aplicar un estilo al resultado, que manejaría la paginación por usted. Tenga en cuenta que esto probablemente requerirá un esfuerzo considerable de refactorización, por lo que dependiendo de su situación, probablemente no sea factible, pero es una opción.
También proporcionaría cierta flexibilidad potencial en el futuro, ya que proporciona un enfoque más modular. Esto le permitiría proporcionar más fácilmente otras opciones de salida, como HTML y PDF. También puede hacer que la "vista previa de impresión" sea más fácil.