複数のページにわたって大きな画像(幅1200×高さ475)を印刷するコードを記述しようとしています。C#を使用して複数のページにわたって大きな画像を印刷する
イメージを3つの長方形に分割し(幅を3で割って)、e.Graphics.DrawImageを3回呼び出してみましたが、それは動作しません。
大きな画像を1ページ内に指定すると機能しますが、画像を複数のページに分割するにはどうすればよいですか?
複数のページにわたって大きな画像(幅1200×高さ475)を印刷するコードを記述しようとしています。C#を使用して複数のページにわたって大きな画像を印刷する
イメージを3つの長方形に分割し(幅を3で割って)、e.Graphics.DrawImageを3回呼び出してみましたが、それは動作しません。
大きな画像を1ページ内に指定すると機能しますが、画像を複数のページに分割するにはどうすればよいですか?
トリックは、画像の各部分を独自のページに取得することです。これはPrintPage
イベントのPrintDocument
で行われます。
私は最も簡単なアプローチは、イメージをページごとに1つの別々のイメージに分割することだと思います。私はあなたがすでにそれを扱うことができると仮定します(イメージを分割することを試みると同じことです、別々のイメージに置くだけです)。その後、我々はのPrintDocumentインスタンスを作成し、PrintPageイベントをフックアップし、行く:あなたは後に文書を印刷したい場合は、(例えば、再び文書を印刷する前に0にpageIndexパラメータをリセットする必要があります
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);
}
注意プレビューを表示します)。
あなたの解決策も私のために働いた、私はPrintDocument_EndPrintメソッド内にあったはずだったときに、PrintDocument_PrintPageメソッド内でページインデックスを0にリセットし続けた... – coson
SplitImage(source、3) –