当前位置: 首页 > 编程语言 > C#

在没有DocumentViewer的情况下显示HTML文档的打印预览

时间:2023-04-11 11:15:47 C#

ShowPrintPreviewofHTMLDocumentWithoutDocumentViewer我有一个C#/WPF应用程序,我需要在其中显示HTML文档的打印预览PrintPreview-基本上就像什么在Firefox甚至IE中查看打印预览时,您会看到。我知道DocumentViewer,但是,我尽量避免使用DocumentViewer控件,因为它看起来很慢,我需要显示的一些文档可能超过450页,我希望预览加载尽可能快。有谁知道做这样的事情的优雅方式?我开始假设我需要创建自己的控件,但我真的不知道从哪里开始。感谢您对此类内容的任何建议或提示!您可能希望使用WebBrowser控件并使用此处提供的示例扩展它:http://www.codeproject.com/KB/miscctrl/wbp.aspx[编辑:更新的答案以显示如何使用WPFWebBrowser控件(系统.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。您需要添加对SHDocVw的引用,应该引用在COM引用列表下作为“MicrosoftInternetControls”[ComImport,InterfaceType(ComInterfaceType.InterfaceIsIUnknown)][Guid("6d5140c1-7436-11ce-8034-00aa006009")]internalinterfaceIserviceProvider{[返回:MarshalAs(UnmanagedType.IUnknown)]objectQueryService(refGuidguidService,refGuidriid);}staticreadonlyGuidSID_SWebBrowserApp=newGuid("0002DF05-0000-0000-C000-000000000046");voidwebBrowser_LoadCompleted(objectsender,NavigationEventArgse){IServiceProviderserviceProvider=null;if(webBrowser.Document!=null){serviceProvider=(IServiceProvider)webBrowser.Document;}GuidserviceGuid=SID_SWebBrowserApp;Guidiid=typeof(SHDocVw.IWebBrowser2).GUID;对象NullValue=null;SHDocVw.IWebBrowser2目标=(SHDocVw.IWebBrowser2)serviceProvider.QueryService(refserviceGuid,refiid);target.ExecWB(SHDocVw.OLECMDID.OLECMDID_PRINTPREVIEW,SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DODEFAULT,refNullValue,refNullValue);XAML:任何对WinForms控件版本(System.Windows.Forms.WebBrowser)感兴趣的人都可以跳过所有IServiceProvider包袱,只使用ActiveXInstance属性(WPF控件不会暴露:不使用DocumentViewer显示HTML文档的打印预览.如果对你有用,需要了解更多C#学习教程,希望大家多多关注—SHDocVw.WebBrowsertarget=webBrowser.ActiveXInstanceasSHDocVw.WebBrowser;target.ExecWB(SHDocVw.OLECMDID.OLECMDID_PRINTPREVIEW,SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DODEFAULT,null,null);本文采集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除,如需转载请注明出处:

最新推荐
猜你喜欢