2009-07-11 11 views
3

複数のページにわたって大きな画像(幅1200×高さ475)を印刷するコードを記述しようとしています。C#を使用して複数のページにわたって大きな画像を印刷する

イメージを3つの長方形に分割し(幅を3で割って)、e.Graphics.DrawImageを3回呼び出してみましたが、それは動作しません。

大きな画像を1ページ内に指定すると機能しますが、画像を複数のページに分割するにはどうすればよいですか?

答えて

3

トリックは、画像の各部分を独自のページに取得することです。これは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); 
} 

注意プレビューを表示します)。

+0

あなたの解決策も私のために働いた、私はPrintDocument_EndPrintメソッド内にあったはずだったときに、PrintDocument_PrintPageメソッド内でページインデックスを0にリセットし続けた... – coson

+0

SplitImage(source、3) –

関連する問題