2011-04-20 3 views
4

HTML 문서의 인쇄 미리보기를 표시해야하는 C#/WPF 응용 프로그램이 있습니다. Firefox 또는 심지어 인쇄 미리보기에서 보는 것과 똑같은 모양입니다. IE. DocumentViewer에 대해 알고 있지만, 느린 것으로 보이는 문서 뷰어 컨트롤을 사용하지 않으려 고 노력하고 있습니다. 표시해야하는 문서 중 일부는 위쪽으로 450 페이지가 넘을 수 있으므로 미리보기를 빠르게로드하고 싶습니다. 가능한 한. 아무도 이런 식으로 우아한 방법을 알고 있습니까? 나 자신 만의 컨트롤을 만들어야한다고 가정하기 시작했는데, 어디서부터 시작해야 할지를 놓치고있다.DocumentViewer없이 HTML 문서의 인쇄 미리보기 표시

이와 비슷한 방법으로 조언이나 조언을 제공해 주셔서 감사합니다.

답변

6

당신은 WebBrowser 컨트롤을 사용하여 예제는 여기에 제공된 사용하여 확장 할 수 있습니다 http://www.codeproject.com/KB/miscctrl/wbp.aspx

[편집 : WPF WebBrowser 컨트롤을 사용하여 동일한 작업을 수행하는 방법을 설명하기 위해 답을 업데이트 (System.Windows을 .Controls.WebBrowser)]

기본 컨트롤은 동일합니다. 즉, SHDocVw.dll의 ActiveX 구성 요소입니다.

좀 더 나은 참조 URL을 작성했습니다. 거기에 컨트롤에 대한 MSDN 설명서에서 비슷한 일을 꽤 좋은 단서 밖으로 밝혀졌습니다 : http://msdn.microsoft.com/en-us/library/system.windows.controls.webbrowser(v=vs.90).aspx#4 또한 : http://support.microsoft.com/kb/329014이 있습니다.

당신은 "마이크로 소프트 인터넷 컨트롤"로 COM 참조 목록 아래 SHDOCVW에 대한 참조를 추가해야합니다

[ComImport, InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] 
[Guid("6d5140c1-7436-11ce-8034-00aa006009fa")] 
internal interface IServiceProvider 
{ 
    [return: MarshalAs(UnmanagedType.IUnknown)] 
    object QueryService(ref Guid guidService, ref Guid riid); 
} 
static readonly Guid SID_SWebBrowserApp = new Guid("0002DF05-0000-0000-C000-000000000046"); 

void webBrowser_LoadCompleted(object sender, NavigationEventArgs e) 
{ 
    IServiceProvider serviceProvider = null; 
    if (webBrowser.Document != null) 
    { 
     serviceProvider = (IServiceProvider)webBrowser.Document; 
    } 

    Guid serviceGuid = SID_SWebBrowserApp; 
    Guid iid = typeof(SHDocVw.IWebBrowser2).GUID; 

    object NullValue = null; 

    SHDocVw.IWebBrowser2 target = (SHDocVw.IWebBrowser2)serviceProvider.QueryService(ref serviceGuid, ref iid); 
    target.ExecWB(SHDocVw.OLECMDID.OLECMDID_PRINTPREVIEW, SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DODEFAULT, ref NullValue, ref NullValue); 
} 

XAML 다음 윈폼 컨트롤에 관심이

<Window x:Class="StackOverflowWPF.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525" Loaded="Window_Loaded"> 
    <Grid> 
     <DockPanel LastChildFill="True"> 
      <WebBrowser Name="webBrowser" Source="http://msdn.microsoft.com/en-us/library/system.windows.controls.webbrowser.aspx" LoadCompleted="webBrowser_LoadCompleted"> 
      </WebBrowser> 
     </DockPanel> 
    </Grid> 
</Window> 

사람 버전 (System.Windows.Forms.WebBrowser)은 모든 IServiceProvider 수하물을 건너 뛸 수 있으며 WPF 컨트롤이 노출되지 않는 ActiveXInstance 속성을 사용합니다 (

).
+1

와우, 마침내 작동하도록했습니다. 나는 별도의 창에서 '팝업'으로 미리보기를 기대하지는 않았지만 여전히 올바른 방향으로 나아가는 단계입니다. 도움을 주셔서 감사합니다. – JToland

+0

아무런 문제가 없었습니다. 재미있었습니다. :) 대답을 스스로 사용할 수 있다는 것을 깨달았습니다. WebBrowser를 사용하여 HTML로 변환 한 화면 내용을 인쇄하지만 인쇄 미리보기 기능도 없습니다! – mcw0933