Utilisation de C # pour imprimer de grandes images sur plusieurs pages

J’essaie d’écrire du code qui imprimera une grande image (1200 x 475 de hauteur) sur plusieurs pages.

J’ai essayé de partitionner l’image sur trois rectangles (en divisant la largeur par trois) et d’appeler e.Graphics.DrawImage à trois resockets, sans succès.

Si je spécifie la grande image dans une page, cela fonctionne, mais comment procéder pour diviser l’image en plusieurs pages?

L’astuce consiste à obtenir chaque partie de l’image dans sa propre page, ce qui est fait dans l’événement PrintPage de PrintDocument .

Je pense que la solution la plus simple consiste à scinder l’image en images distinctes, une pour chaque page. Je vais supposer que vous pouvez déjà gérer cela (si vous essayez de partitionner l’image; même chose, placez-les simplement sur des images séparées). Ensuite, nous créons l’instance PrintDocument, connectons l’événement PrintPage et allons:

 private List _pages = new List(); 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); } 

Notez que vous devrez réinitialiser pageIndex à 0 avant d'imprimer à nouveau le document (par exemple, si vous souhaitez imprimer le document après avoir affiché l'aperçu).