una - Uso de C#para imprimir imágenes grandes en varias páginas
imprimir imagen en varias hojas photoshop (1)
Intento escribir un código que imprima una imagen grande (1200 ancho x 475 alto) en varias páginas.
Intenté dividir la imagen en tres rectángulos (dividiendo el ancho entre tres) y llamar a e.Graphics.DrawImage tres veces y eso no funciona.
Si especifico la imagen grande dentro de una página, funciona, pero ¿cómo podría dividir la imagen en varias páginas?
El truco consiste en colocar cada parte de la imagen en su propia página, y eso se hace en el evento PrintPage
del PrintDocument
.
Creo que el enfoque más fácil es dividir la imagen en imágenes separadas, una para cada página. Asumiré que ya puedes manejar eso (dado que tratas de particionar la imagen, lo mismo, solo ponlos en imágenes separadas). Luego creamos la instancia de PrintDocument, conectamos el evento PrintPage y vamos:
private List<Image> _pages = new List<Image>();
private int pageIndex = 0;
private void PrintImage()
{
Image source = new Bitmap(@"C:/path/file.jpg");
// split the image into 3 separate images
_pages.AddRange(SplitImage(source, 3));
PrintDocument printDocument = new PrintDocument();
printDocument.PrintPage += PrintDocument_PrintPage;
PrintPreviewDialog previewDialog = new PrintPreviewDialog();
previewDialog.Document = printDocument;
pageIndex = 0;
previewDialog.ShowDialog();
// don''t forget to detach the event handler when you are done
printDocument.PrintPage -= PrintDocument_PrintPage;
}
private void PrintDocument_PrintPage(object sender, PrintPageEventArgs e)
{
// Draw the image for the current page index
e.Graphics.DrawImageUnscaled(_pages[pageIndex],
e.PageBounds.X,
e.PageBounds.Y);
// increment page index
pageIndex++;
// indicate whether there are more pages or not
e.HasMorePages = (pageIndex < _pages.Count);
}
Tenga en cuenta que deberá restablecer el índice de página a 0 antes de imprimir el documento nuevamente (por ejemplo, si desea imprimir el documento después de mostrar la vista previa).