2013-05-05 3 views
4

PrintDocument을 사용하여 C# WinForms 앱의 일부를 표시하려고합니다. 거의 완료되었지만 프린터에 문제가 있습니다. 나는 내 양식의 이미지를 캡처 한 다음이 이미지를 인쇄하는 코드를 다음을 사용, 마침내는 인쇄 미리보기 표시 할 PrintPreviewDialog를 사용프로그래밍 방식으로 가상 프린터 (XPS)로 인쇄

PrintDocument doc = new PrintDocument(); 
doc.PrintPage += doc_PrintPage; 
doc.Print(); 
printPreviewDialog1.Document = doc; 
printPreviewDialog1.ShowDialog(); 

을하고이 doc_PrintPage 기능입니다 :

Bitmap bmp = new Bitmap(tabControl1.Width, tabControl1.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb); 
tabControl1.DrawToBitmap(bmp, new Rectangle(0, 0, tabControl1.Width, tabControl1.Height)); 
e.Graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; 
e.Graphics.DrawImage((Image)bmp, 0, 0); 

doc.print() 함수가 호출되면 Microsoft OneNote 프로그램이 열리고 인쇄 된 양식이 표시되고 PrintPreviewDialog 컨트롤이 내 미리보기가 포함 된 새 양식을 엽니 다.

기본 프린터로 설정된 OneNote와 같은 프린터 프로그램이 없거나 실제 프린터가 열려 있지 않은 상태로 자동 인쇄가 수행됩니다. 물리적 프린터가 연결되어 있고 페이지가 실제로 인쇄됩니다! 정확히 내가 원하지 않는). 그냥 인쇄없이 인쇄 미리보기를 표시하고 XPS (가상 프린터 파일)로 인쇄 할 수있는 방법이 있습니까? 아니면 실제 인쇄가 수행되지 않는 다른 방법이 있습니까?

+1

doc.Print()를 제거하십시오. –

+0

잘 테스트했지만 doc.print를 제거하면 아무것도 인쇄되지 않으므로 미리보기를 사용할 수 없습니다. 그렇습니까? 미리보기를 표시하려면 어떻게해야합니까? –

답변

2

특정 프린터를 설정하려면 PrintDocument.PrinterSettings을 설정/변경해야합니다. Print은 특정 프린터가 필요하다는 것을 모르고 기본 프린터를 확인하거나 다른 프린터를 선택하라는 메시지를 표시합니다.

업데이트 :

PrinterSettings printerSettings = new PrinterSettings(); 
printerSettings.PrinterName = "Microsoft XPS Document Writer"; 
doc.PrinterSettings = printerSettings; 

당신은 정확하게 당신이 원하는 것을 얻기 위해 다양한 설정을 실험 할 가능성이 있습니다 : 내 머리 위로 떨어져

, 다음과 같은 트릭을 할 수 있습니다.

+1

감사합니다.하지만 어떻게 할 수 있습니까? –

2

의견을 추가 할 수 없으므로 답변을드립니다. 피터 리치 (Peter Ritchie)의 제안은 맞습니다. 확실한 경우 인쇄물이 (가상) 프린터에서 끝나지 않을 것입니다.

은 내가 PrintPreviewDialog을 확인했는데 이것은 내가 일하고있어 무엇 :

PrintDocument doc = new PrintDocument(); 
doc.PrinterSettings.PrinterName = this.m_printingParameters.SelectedPrinterName; 
doc.PrinterSettings.PrintFileName = Path.Combine(Path.GetTempPath(), "Temporary_result.xps"); 
doc.PrinterSettings.PrintToFile = true; 
doc.PrintPage += doc_PrintPage; 

PrintPreviewDialog printPreviewDialog1 = new PrintPreviewDialog(); 
printPreviewDialog1.Document = doc; 
printPreviewDialog1.ShowDialog(); 

인쇄 아이콘을 사용자가 클릭이 결과는 임시 폴더에 배치 파일로 인쇄됩니다. 나중에 파일을 삭제할 수 있는지 확인하십시오. 당신이 인쇄 버튼이없는 인쇄 미리보기 대화 상자를 만들려면

하지만, 당신이 찾고 있던 무슨이 주제 Disabling "print" button in .net print preview dialog

그것을인가 확인?

+0

XPS 프린터가 현재 선택된 경우에만 작동합니다 – DarkWanderer

관련 문제