public void Extract(IHTMLDocument2 rootDoc) { Logger.Log("starting img src extractor..."); items = new List <ImageRakerThumbnailListViewItem>(); imageDic = new Dictionary <string, IHTMLElement>(); IHTMLDocument2[] docs = GetHtmlDocumentsByOle(rootDoc); int index = 0; foreach (IHTMLDocument2 d in docs) { IHTMLElementCollection images = d.images; for (int i = 0; i < images.length; i++) { try { ExceptionTester.Instance.Throw("makethumbnail"); IHTMLElement elem = images.item(i, i) as IHTMLElement; string src = elem.getAttribute("src", 0).ToString(); // 한번 추가된 이미지는 다시 추가하지 않는다. if (!imageDic.ContainsKey(src)) { IHTMLElementRender render = elem as IHTMLElementRender; string filename = src.Substring(src.LastIndexOf('/') + 1); int orgW = elem.offsetWidth; int orgH = elem.offsetHeight; if (orgW == 0 || orgH == 0) { // Logger.DLog(" skip image filename {0}. width or height is zero. {1}*{2}", filename, orgW, orgH); continue; } // thumbnail은 null... ImageRakerThumbnailListViewItem item = new ImageRakerThumbnailListViewItem( filename, render, null, orgW, orgH, src, d.url, index++); Logger.DLog("img src extractor - img found - filename: {0}, size: {1}*{2}, url: {3}", filename, orgW, orgH, src); items.Add(item); imageDic.Add(src, elem); } } catch (Exception ex) { Logger.Warn("unknown error in MakeThumbnailListViewImages!"); } } } Logger.Info("img src extractor found {0} images", items.Count); }
/// <summary> /// 打印文件事件处理 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void printDocument_PrintPage(object sender, PrintPageEventArgs e) { if (BeforeRendering != null) { BeforeRendering(this, new PrintArgs("开始渲染")); } //获取打印句柄 IntPtr ptr = e.Graphics.GetHdc(); //重置浏览器窗口大小 if (_isResizeBrowser) { ResizeWebBrowser(); } IHTMLDocument2 document = (IHTMLDocument2)this._webBrowser.Document.DomDocument; if (document != null) { IHTMLElement element = (IHTMLElement)document.body; if (element != null) { IHTMLElementRender RenderObject = (IHTMLElementRender)element; if (RenderObject != null) { RenderObject.SetDocumentPrinter(_printDocument.DefaultPageSettings.PrinterSettings.PrinterName, ptr); RenderObject.DrawToDC(ptr); if (AfterRendering != null) { AfterRendering(this, new PrintArgs("结束渲染")); } } else { if (RenderMissing != null) { RenderMissing(this, new PrintArgs("因RenderObject==null未被渲染")); } } } else { if (RenderMissing != null) { RenderMissing(this, new PrintArgs("因element==null未被渲染")); } } } else { if (RenderMissing != null) { RenderMissing(this, new PrintArgs("因document==null未被渲染")); } } e.HasMorePages = false; }
/// <summary> /// 打印文档页面处理 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void PrintPage(object sender, PrintPageEventArgs e) { //触发打印页面开始事件 if (BeforeRendering != null) { BeforeRendering(this, new PrintArgs("开始渲染")); } //获取打印句柄 IntPtr ptr = e.Graphics.GetHdc(); //重置浏览器窗口大小与打印内容一致 ResizeWebBrowser(); //获取Dom对象 IHTMLDocument2 document = (IHTMLDocument2)this.WebBrowser.Document.DomDocument; if (document != null) { //获取Dom中的Body元素 IHTMLElement bodyElement = document.body; if (bodyElement != null) { IHTMLElementRender renderObject = (IHTMLElementRender)bodyElement; //设置打印机并打印 renderObject.SetDocumentPrinter(PrintDocument.DefaultPageSettings.PrinterSettings.PrinterName, ptr); renderObject.DrawToDC(ptr); //触发本页打印结束事件 if (AfterRendering != null) { AfterRendering(this, new PrintArgs("结束渲染")); } } else if (RenderMissing != null) { RenderMissing(this, new PrintArgs("因bodyElement==null未被渲染")); } } else if (RenderMissing != null) { RenderMissing(this, new PrintArgs("因document==null未被渲染")); } //没有后继页面 e.HasMorePages = false; }
public ImageRakerThumbnailListViewItem(string name, IHTMLElementRender render, Bitmap bm, int w, int h, string imgsrc, string refererUrl, int order) : base(name, bm) { int dotPos = name.LastIndexOf('.'); if (dotPos != -1) { ext = name.Substring(dotPos + 1).ToLower(); } else { ext = ""; } this.render = render; this.width = w; this.height = h; this.imgsrc = imgsrc; this.refererUrl = refererUrl; this.order = order; }
void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { if (!e.Url.Equals(webBrowser1.Url)) { return; } // Get the renderer for the document body mshtml.IHTMLDocument2 doc = (mshtml.IHTMLDocument2)webBrowser1.Document.DomDocument; mshtml.IHTMLElement body = (mshtml.IHTMLElement)doc.body; IHTMLElementRender render = (IHTMLElementRender)body; // Render to bitmap using (Bitmap bmp = new Bitmap(webBrowser1.ClientSize.Width, webBrowser1.ClientSize.Height)) { using (Graphics gr = Graphics.FromImage(bmp)) { IntPtr hdc = gr.GetHdc(); render.DrawToDC(hdc); gr.ReleaseHdc(); } bmp.Save("test.png"); System.Diagnostics.Process.Start("test.png"); } }
public BitmapImage ConvertToBitmapImage(string htmlText) { BitmapImage bitmapImage = null; WB.Width = (int)Ctrl.ActualWidth; WB.Height = (int)Ctrl.ActualHeight; WB.DocumentText = htmlText; Application.DoEvents(); while (WB.ReadyState != WebBrowserReadyState.Complete) { Thread.Sleep(100); } // Get the renderer for the document body mshtml.IHTMLDocument2 doc = (mshtml.IHTMLDocument2)WB.Document.DomDocument; mshtml.IHTMLElement body = (mshtml.IHTMLElement)doc.body; IHTMLElementRender render = (IHTMLElementRender)body; // Render to bitmap using (Bitmap bmp = new Bitmap(WB.Width, WB.Height)) { using (Graphics gr = Graphics.FromImage(bmp)) { IntPtr hdc = gr.GetHdc(); render.DrawToDC(hdc); gr.ReleaseHdc(); } MemoryStream memory = new MemoryStream(); bmp.Save(memory, ImageFormat.Png); memory.Position = 0; bitmapImage = new BitmapImage(); bitmapImage.BeginInit(); bitmapImage.CacheOption = BitmapCacheOption.OnLoad; bitmapImage.StreamSource = memory; bitmapImage.EndInit(); memory.Dispose(); memory = null; } return(bitmapImage); }