none
Windows 7 환경에서 .net Framework 3.5 기반으로 제작된 WPF 프로그램의 PrintVisual 함수 실행 시 인쇄 Spooling 용량이 너무커서 인쇄가 매우 느림. RRS feed

  • 질문

  • 하기 코드는 .Net Framework 3.5 기반 WPF 응용프로그램 에서 제작되어 배포된 코드 입니다.

    위 코드를  .Net Framework 3.5 기반 Windows XP  Client 환경에서는 아무 이상이 없었으나,

    .Net Framework 4.0 기반인 Windows 7 에서 아래 프로그램 실행시, 인쇄 Spool 용량이 너무 커져서 매우 느리게 인쇄되는 현상이 발생합니다.

    이에 대한 해결 방법 문의 드립니다.

    ---------------------  코  드 ----------------------------------------------

                PrintDialog prtDlg = new PrintDialog();
                Transform transform = null;

                if (prtDlg.ShowDialog() == true)
                {
                    stackBottomButton.Visibility = Visibility.Hidden;
                    prtDlg.PrintTicket.PageOrientation = PageOrientation.Landscape;
                    System.Printing.PrintCapabilities capabilities = prtDlg.PrintQueue.GetPrintCapabilities(prtDlg.PrintTicket);

                    UIElement printPage = new UIElement();

                    printPage = frameContents;
                   
                   
                    //get scale of the print wrt to screen of WPF visual

                    double scale = Math.Min(capabilities.PageImageableArea.ExtentWidth / frameContents.ActualWidth, capabilities.PageImageableArea.ExtentHeight /

                                   frameContents.ActualHeight);


                    transform = frameContents.LayoutTransform;


                    //Transform the Visual to scale
                    frameContents.LayoutTransform = new ScaleTransform(scale, scale);


                    //get the size of the printer page

                    Size sz = new Size(capabilities.PageImageableArea.ExtentWidth, capabilities.PageImageableArea.ExtentHeight);


                    //update the layout of the visual to the printer page size.

                    printPage.Measure(sz);

                    printPage.Arrange(new Rect(new Point(capabilities.PageImageableArea.OriginWidth, capabilities.PageImageableArea.OriginHeight), sz));

                    //now print the visual to printer to fit on the one page.

                    prtDlg.PrintVisual(printPage, "First Fit to Page WPF Print");

                   
                }

                frameContents.LayoutTransform = transform;
                stackBottomButton.Visibility = Visibility.Visible;

     

    2012년 7월 30일 월요일 오후 2:25

모든 응답

  • 우선 코드상으로는 뭐를 더해볼수 있는게 없는것 같습니다.

    우선은 spool size를 늘려주고 spool 폴더에 들어있는 이전 파일들을 삭제해보시고

    다시 시도해보시면서 그 다음 문제를 찾아보시는게 좋을듯합니다.

    삭제는 명령창에서 아래와 같이 입력하시면 될것 같습니다.

    net stop spooler
    del /Q /F /S "%systemroot%\System32\Spool\Printers\*.*"
    net start spooler

    spooler를 사용하지않고 출력하는 방법도 고려해봐야할것 같습니다.
    2012년 8월 2일 목요일 오전 12:48