2009-07-11 4 views
3

여러 페이지에 걸쳐 큰 이미지 (1200 너비 x 475 높이)를 인쇄하는 코드를 작성하려고합니다.C#을 사용하여 여러 페이지에 걸쳐 큰 이미지 인쇄

이미지를 3 개의 직사각형으로 나누고 (폭을 3으로 나눔) e.Graphics.DrawImage를 세 번 호출했는데 작동하지 않습니다.

한 페이지 내에 큰 이미지를 지정하면 작동하지만 이미지를 여러 페이지로 나누려면 어떻게해야합니까?

답변

3

트릭은 이미지의 각 부분을 자체 페이지로 가져 오는 것이며 PrintPage 이벤트는 PrintDocument입니다.

가장 쉬운 방법은 이미지를 페이지별로 하나씩 다른 이미지로 분할하는 것입니다. 나는 당신이 이미 그것을 다룰 수 있다고 가정 할 것이다. (이미지를 파티셔닝 해보면 똑같은 것을 별도의 이미지 위에 놓는다.) 그리고 우리가하는 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)가 어떻게 수행 될 수 있습니까? –

관련 문제