Pregunta

Estoy tratando de imprimir un lienzo WPF a través de múltiples páginas.

Estoy muy feliz con la escala para que se ajuste en el ancho de la página, a continuación, la saturación y la traducción de la lona para cada página; matemáticas todos bastante simples.

Lo que no entiendo es cómo consigo las dimensiones del área de impresión, y la forma de indicar a la impresora en imprimir. Lo que trato parece que los valores que estoy usando son el tamaño del papel, y por lo tanto me sale de cultivo que ocurre ya que la impresora no puede imprimir hasta el borde del papel.

var capabilities = printDialog.GetPrintCapabilities(dialog.PrintTicket);

capacidades tiene las siguientes propiedades:

capabilities.PageImageableArea.ExtentWidth
// "Gets the width of the imageable area"

¿Cuál es el área "de imagen"? es que la zona en el documento en el que puedo poner el contenido? Creo que sí, ya que:

capabilities.PageImageableArea.OriginWidth
// Gets the distance from the left edge of the page to the imageable area.

Sin embargo ¿qué pasa con la parte inferior y los márgenes derecho? ¿Dónde puedo encontrar esta información?

Lo que debe propiedad PageSize del DocumentPaginator ajustarse a? Debería establecer esto desde capabilities.PageImageableArea? O que hace la función dialog.Print() establecido esto, y sólo hay que leer de él en GetPage()?

Por último, cuando regrese un DocumentPage, lo puedo pasar a los tres argumentos de geometría pageSize, bleedBox y contentBox?

Gracias:)

¿Fue útil?

Solución

Ok, parece que la impresión se produce siempre desde (0, 0) (arriba a la izquierda) del papel.

Obtener el tamaño del papel con:

printDialog.PrintableAreaWidth, printDialog.PrintableAreaHeight

y los márgenes superior e izquierda con:

var printCapabilities = printDialog.PrintQueue.GetPrintCapabilities(printDialog.PrintTicket);
printCapabilities.PageImageableArea.OriginWidth, printCapabilities.PageImageableArea.OriginHeight

I supone que la parte inferior y márgenes derecho fueron los mismos que la parte superior e izquierda, aunque esto puede no ser segura.

Hay que escalar y recortar el lienzo como lo haría normalmente, luego aplicar una TranslateTransform el tamaño de los márgenes para mover el contenido en el área de impresión.

Otros consejos

¿Has mirado en el uso de un FlowDocument en lugar de simplemente imprimir el lienzo? hay un buen ejemplo de crear e imprimir Aquí .

Con suerte que niega la necesidad de una gran cantidad de la matemáticas.

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