2017-10-05 2 views
0

임시 PDF 문서를 표시하는 데 사용되는 System.Windows.Forms.WebBrowser이 있습니다. 이 문서는 프로그램에 의해 생성되며 일반 브라우저에서 잘 작동합니다.WebBrowser 및 browser.Document에서 인쇄 할 수 없습니다.

파일은 browser.Navigate()를 호출하고 실제 응용 프로그램 창에서 PDF 표시 미세하지만 의해로드 browser.Print()를 호출하면 오류가 트리거 할 때 : browser.Document도, 널 (null) 유지

enter image description here

가 나는 또한 눈치 챘을

browser.DocumentCompleted += documentCompletedHandler; 

... 

private void documentCompletedHandler(object sender, WebBrowserDocumentCompletedEventArgs e) { 
WebBrowser b = sender as WebBrowser; 
    Console.WriteLine("Loaded: " + b.Url.AbsoluteUri); // Correct path. 
    // b.Document == null here and everywhere else. 
} 

XAML :

완성 된 문서의 콜백 중
... 
<WindowsFormsHost> 
    <wf:WebBrowser x:Name="browser" /> 
</WindowsFormsHost> 
... 
+0

당신은 항상 PDF 파일 또는 다른 웹 페이지뿐만 아니라 읽을 것인가?를 – Isma

+0

인쇄 전에 미리보기로 사용되는 PDF 파일 만 –

+0

이 기능을 사용하려면 사용자에게 Adobe PDF 판독기가 설치되어 있어야합니다. – Isma

답변

1

WPF 응용 프로그램에 PDF 파일을 표시하려면 WPF 용 WindowsFormsHost 구성 요소를 사용하여 호스팅되는 WinForms WebBrowser 컨트롤을 사용하고 있으므로 WPF 응용 프로그램에서 Internet Explorer 용 Adobe PDF Reader DirectX 컨트롤을 사용할 수 있습니다.

너무 많은 레이어로 생각하지 않습니까? 이 오류가 발생하기 쉽기 때문에 시스템을 단순화하려고합니다.

우선 WPF에는 .NET Framework 3.5 SP1 이후의 네이티브 WebBrowser 컨트롤이 제공되므로 WindowsFormsHost를 직접 피하는 컨트롤을 사용할 수 있습니다.

<WebBrowser Source="C:\SomeFile.pdf" /> 

http://www.c-sharpcorner.com/uploadfile/dhananjaycoder/web-browser-control-in-wpf/

http://www.wpf-tutorial.com/misc-controls/the-webbrowser-control/

는 사용자해야하기 때문에이 이미 문제 그러나 최선의 해결책을하지 않을 수 있습니다 어도비 리더 액티브 X를 사용하는 임베디드 브라우저를 사용하여 해결할 수 있습니다 Adobe PDF Reader와 Adobe PDF ActiveX Reader가 설치되어 있으며 IE 버전도 있습니다.

하나 개의 솔루션은 이미처럼 WindowsFormsHost를 사용하는 것 대신하는 웹 브라우저를 사용하여 Windows 양식 용 Adobe PDF 리더 액티브 X 사용하는 :

https://wpfpdfviewer.codeplex.com/ https://www.codeproject.com/Articles/380019/Using-Adobe-Reader-in-a-WPF-app

을이 당신을 잘 작동 할 것이다 인쇄에는 문제가 없지만 다시 작동하려면 사용자가 Adobe PDF Reader를 시스템에 설치해야합니다.

최상의 솔루션은 외부 종속성이없는 컨트롤을 사용하는 것입니다. 그 이유는 고품질 상용 컴포넌트 (DevExpress 또는 Telerik PDF 뷰어 컨트롤 검색)가 많기 때문입니다.

당신이 뭔가를 내가 이걸 발견 오픈 소스를 시도 할 경우

하지만 결코 그것을 자신을 사용 :

https://github.com/reliak/moonpdf

+0

제안 된 방법을 사용하지 않았지만 게시자의 마음을 조언으로 삼았습니다. 즉, 레이어를 단순화하고 설치할 필요가있는 것에 의존하지 않으려 고합니다. 이미 PDF를 작성하기 위해 라이브러리를 사용하고 있으며 컨트롤이 제공됩니다. 이 컨트롤이 작동하고 나는 이것을 webbrowser 대신에 사용할 것이다 :) –