2012-12-11 2 views
0

html 보고서를 인쇄하는 동안이 고유 한 문제가 있습니다. 파일 자체는 정상적인 로컬 html 파일로서 하드 드라이브에 있습니다. C# WebBrowser.ShowPrintDialog()가 표시되지 않습니다

이렇게하려면

, 나는 다음과 같은 시도 :

public static void PrintReport(string path) 
    { 
     WebBrowser wb = new WebBrowser(); 
     wb.Navigate(path); 
     wb.ShowPrintDialog() 
    } 

그리고 클릭 이벤트와 버튼이 양식이 있습니다

private void button1_Click(object sender, EventArgs e) 
    { 
     string path = @"D:\MyReport.html"; 
     PrintReport(path); 
    } 

이 절대적으로 아무것도하지 않습니다를. 어느 종류의 이상하다 ...하지만 상황이 낯선 ...

다음을 수행하기 위해 인쇄 기능을 편집 할 수 :

public static void PrintReport(string path) 
    { 
     WebBrowser wb = new WebBrowser(); 
     wb.Navigate(path); 
     MessageBox.Show("TEST"); 
     wb.ShowPrintDialog() 
    } 

의미가 있습니다. 예, MessageBox 만 추가하십시오. MessageBox가 표시되고 나면 인쇄 대화 상자가 나타납니다. 또한 Thread.Sleep (1000) 대신 시도했는데 작동하지 않습니다. 아무도 내게 여기서 무슨 일이 일어날 지 설명 할 수 있니? 왜 메시지 박스가 어떤 차이를 만들었습니까?

사용 권한 문제 일 수 있습니까? 필자는 Windows 7과 8에서 동일한 것을 재현했습니다. 문제를 분리하기 위해 위 코드 만 사용하여이 작은 응용 프로그램을 만들었습니다. Windows XP에서 작동한다고 확신합니다. 이전 버전의 응용 프로그램이 실행되고 있습니다. 대신 mshtml-dll을 사용하여이 작업을 직접 수행하려고 할 때 문제가 발생합니다.

모든 입력 또는 설명이 크게 감사드립니다!

+0

프로그래밍 방식으로 인쇄하기 전에 용지 크기 (C5)와 방향 (가로)을 어떻게 바꿀 수 있습니까? –

답변

1

문제는 브라우저가 아직 인쇄 할 준비가되지 않았기 때문입니다. WebBrowser 개체에 이벤트 처리기 인 WebBrowserDocumentCompletedEventHandler를 추가하려고합니다. 아래 샘플 코드.

public static void PrintReport(string path) 
{ 
    WebBrowser wb = new WebBrowser(); 
    wb.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser_DocumentCompleted); 
    wb.Navigate(path); 
} 

public static void webBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
{ 
    WebBrowser wb = (WebBrowser)sender; 
    if (wb.ReadyState.Equals(WebBrowserReadyState.Complete)) 
     wb.ShowPrintDialog(); 
} 
+0

감사합니다. 너 또는 누군가가 나에게 조금 더 설명 할 수 있었을뿐만 아니라 나는 조금 더 배웠는가? 나에게 이것은 심지어 "Document completed"문서가 인쇄 될 때 항상 인쇄되는 것처럼 보입니다. 이것은 일반적으로 조금 이상하게 보입니다.하지만 이해가 부족한 것 같습니다. 인쇄 대화 상자를 트리거 할 실제 이벤트는 버튼 클릭 또는 이와 유사한 것입니다. webbrowser 객체를 사용하여 인쇄하고 싶지 않은 다른 문서를 탐색하려면 어떻게해야합니까? 문제를 지적 해 주셔서 다시 한번 감사 드리며, 제 정신이 아니 었습니다. –

+0

@jeah_wicer 기꺼이 도와 줘서 고맙다고 대답하는 것을 잊지 마세요! 귀하의 질문에 관해서는; 이벤트 처리기를 할당하면 올 바르고 완료된 모든 문서가 인쇄됩니다. 한 가지 제안은 문서를 인쇄해야하는 경우 bool을 사용하여이 문제를 해결할 수 있다는 것입니다. 로드가 완료되면 모든 문서를 인쇄하지 않는 것을 극복하는 몇 가지 방법이 있습니다. 그것은 당신이 당신의 프로젝트에서 무엇을하고 있는지에 달려 있습니다. – Sorceri

+0

다시 한번 감사드립니다! 이 문제를 해결 한 것으로 표시 하겠지만 실제로이 기능이 나를 위해 유용하게 사용하려면 먼저 객체의 표준 기능을 변경하지 않고 일반 print-html 함수를 만드는 방법이 필요합니다. 이 이벤트가 추가되면 객체가 다르게 동작하기 시작하며 html 문서를 더 쉽고 멋지게 직접 인쇄 할 수있는 방법이 있다고 생각하고 싶습니다. 로드가 완료 될 때까지 대기 한 다음 인쇄 대화 상자를 여는 인쇄 기능을 구현할 수 있습니까? 실제 이벤트에 인쇄하는 것이 아닙니다. –

관련 문제