예제 #1
0
        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);
        }
예제 #2
0
        /// <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;
        }
예제 #3
0
        /// <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;
        }
예제 #5
0
        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;
        }
예제 #6
0
        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");
            }
        }
예제 #7
0
        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);
        }