/// <summary>
/// 通过WebBrowser控件来实现从HTML到Bmp图片的生成。 /// </summary> /// <param name="htmPath">HTML路径</param> /// <returns>Bmp图片路径</returns> private static string ConverHTML(string htmPath) { string ImagePath = string.Empty; WebBrowser web = new WebBrowser(); web.Navigate(htmPath); while (web.ReadyState != WebBrowserReadyState.Complete) { System.Windows.Forms.Application.DoEvents(); } Rectangle screen = Screen.PrimaryScreen.Bounds; Size? imgsize = null; //set the webbrowser width and hight web.Width = screen.Width; web.Height = screen.Height; //suppress script errors and hide scroll bars web.ScriptErrorsSuppressed = true; web.ScrollBarsEnabled = false; Rectangle body = web.Document.Body.ScrollRectangle;//check if the document width/height is greater than screen width/height
Rectangle docRectangle = new Rectangle() { Location = new Point(0, 0), Size = new Size(body.Width > screen.Width ? body.Width : screen.Width, body.Height > screen.Height ? body.Height : screen.Height) }; //set the width and height of the WebBrowser object web.Width = docRectangle.Width; web.Height = docRectangle.Height;//if the imgsize is null, the size of the image will
//be the same as the size of webbrowser object //otherwise set the image size to imgsize Rectangle imgRectangle; if (imgsize == null) imgRectangle = docRectangle; else imgRectangle = new Rectangle() { Location = new Point(0, 0), Size = imgsize.Value }; //create a bitmap object Bitmap bitmap = new Bitmap(imgRectangle.Width - 24, imgRectangle.Height); //get the viewobject of the WebBrowser IViewObject ivo = web.Document.DomDocument as IViewObject;using (Graphics g = Graphics.FromImage(bitmap))
{ //get the handle to the device context and draw IntPtr hdc = g.GetHdc(); ivo.Draw(1, -1, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, hdc, ref imgRectangle, ref docRectangle, IntPtr.Zero, 0); g.ReleaseHdc(hdc); } SAVEWORDJPG = string.Format(@"E:\cheng_Text\FormatApplication\测试文件\{0}.bmp", Guid.NewGuid().ToString()); bitmap.Save(SAVEWORDJPG, System.Drawing.Imaging.ImageFormat.Bmp); bitmap.Dispose(); web.Dispose(); DeleteTempFile(TEMPHTMLPATH); return SAVEWORDJPG; }/// <summary>
/// 删除指定的临时文件。 /// </summary> /// <param name="filePath"></param> private static void DeleteTempFile(string filePath) { //删除临时HTML文件 。 File.Delete(filePath); //删除目录文件内容。 string[] files = filePath.Split('.'); if (files[1].ToLower().Equals("htm")) { string dirPath = files[0] + ".files"; foreach (string f in Directory.GetFileSystemEntries(dirPath)) { // 如果是文件存在 if (File.Exists(f)) { FileInfo fi = new FileInfo(f); if (fi.Attributes.ToString().IndexOf("Readonly") != 1) { fi.Attributes = FileAttributes.Normal; } // 直接删除其中的文件 File.Delete(f); } } Directory.Delete(dirPath); } }#region==========IViewObje【实现接口类】================
[ComVisible(true), ComImport()] [GuidAttribute("0000010d-0000-0000-C000-000000000046")] [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)] public interface IViewObject { [return: MarshalAs(UnmanagedType.I4)] [PreserveSig] int Draw( [MarshalAs(UnmanagedType.U4)] UInt32 dwDrawAspect, int lindex, IntPtr pvAspect, [In] IntPtr ptd, IntPtr hdcTargetDev, IntPtr hdcDraw, [MarshalAs(UnmanagedType.Struct)] ref Rectangle lprcBounds, [MarshalAs(UnmanagedType.Struct)] ref Rectangle lprcWBounds, IntPtr pfnContinue, [MarshalAs(UnmanagedType.U4)] UInt32 dwContinue); [PreserveSig] int GetColorSet([In, MarshalAs(UnmanagedType.U4)] int dwDrawAspect, int lindex, IntPtr pvAspect, [In] IntPtr ptd, IntPtr hicTargetDev, [Out] IntPtr ppColorSet); [PreserveSig] int Freeze([In, MarshalAs(UnmanagedType.U4)] int dwDrawAspect, int lindex, IntPtr pvAspect, [Out] IntPtr pdwFreeze); [PreserveSig] int Unfreeze([In, MarshalAs(UnmanagedType.U4)] int dwFreeze); void SetAdvise([In, MarshalAs(UnmanagedType.U4)] int aspects, [In, MarshalAs(UnmanagedType.U4)] int advf, [In, MarshalAs(UnmanagedType.Interface)] IAdviseSink pAdvSink); void GetAdvise([In, Out, MarshalAs(UnmanagedType.LPArray)] int[] paspects, [In, Out, MarshalAs(UnmanagedType.LPArray)] int[] advf, [In, Out, MarshalAs(UnmanagedType.LPArray)] IAdviseSink[] pAdvSink); } #endregion