http://blog.csdn.net/zgke/article/details/3248497

使用

  1. Bitmap MyImage = Test.GetControlScrollImage(new Uri(@"http://www.sina.com.cn"), 1024);
  2. MyImage.Save(@"C:/1.BMP");
  3. MyImage.Dispose();

使用到的类

  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Text;
  7. using System.Windows.Forms;
  8. using System.Drawing.Imaging;
  9. using System.Runtime.InteropServices;
  10. using System.Security;
  11. namespace Print
  12. {
  13. public class Test
  14. {
  15. public static Bitmap GetHtmlImage(Uri UrlString,int Width)
  16. {
  17. WebBrowser MyControl = new WebBrowser();
  18. MyControl.Size = new Size(Width, 10);
  19. MyControl.Url = UrlString;
  20. while (MyControl.ReadyState != WebBrowserReadyState.Complete)
  21. {
  22. Application.DoEvents();
  23. }
  24. MyControl.Height= MyControl.Document.Body.ScrollRectangle.Height+20;
  25. MyControl.Url = UrlString;
  26. WebControlImage.Snapshot snap = new WebControlImage.Snapshot();
  27. Bitmap MyImage= snap.TakeSnapshot(MyControl.ActiveXInstance, new Rectangle(0, 0, MyControl.Width, MyControl.Height));
  28. MyControl.Dispose();
  29. return MyImage;
  30. }
  31. /// <summary>
  32. /// WebBrowser获取图形
  33. /// </summary>
  34. private class WebControlImage
  35. {
  36. internal static class NativeMethods
  37. {
  38. [StructLayout(LayoutKind.Sequential)]
  39. public sealed class tagDVTARGETDEVICE
  40. {
  41. [MarshalAs(UnmanagedType.U4)]
  42. public int tdSize;
  43. [MarshalAs(UnmanagedType.U2)]
  44. public short tdDriverNameOffset;
  45. [MarshalAs(UnmanagedType.U2)]
  46. public short tdDeviceNameOffset;
  47. [MarshalAs(UnmanagedType.U2)]
  48. public short tdPortNameOffset;
  49. [MarshalAs(UnmanagedType.U2)]
  50. public short tdExtDevmodeOffset;
  51. }
  52. [StructLayout(LayoutKind.Sequential)]
  53. public class COMRECT
  54. {
  55. public int left;
  56. public int top;
  57. public int right;
  58. public int bottom;
  59. public COMRECT()
  60. {
  61. }
  62. public COMRECT(Rectangle r)
  63. {
  64. this.left = r.X;
  65. this.top = r.Y;
  66. this.right = r.Right;
  67. this.bottom = r.Bottom;
  68. }
  69. public COMRECT(int left, int top, int right, int bottom)
  70. {
  71. this.left = left;
  72. this.top = top;
  73. this.right = right;
  74. this.bottom = bottom;
  75. }
  76. public static NativeMethods.COMRECT FromXYWH(int x, int y, int width, int height)
  77. {
  78. return new NativeMethods.COMRECT(x, y, x + width, y + height);
  79. }
  80. public override string ToString()
  81. {
  82. return string.Concat(new object[] { "Left = ", this.left, " Top ", this.top, " Right = ", this.right, " Bottom = ", this.bottom });
  83. }
  84. }
  85. [StructLayout(LayoutKind.Sequential)]
  86. public sealed class tagLOGPALETTE
  87. {
  88. [MarshalAs(UnmanagedType.U2)]
  89. public short palVersion;
  90. [MarshalAs(UnmanagedType.U2)]
  91. public short palNumEntries;
  92. }
  93. }
  94. public class Snapshot
  95. {
  96. /// <summary>
  97. /// 取快照
  98. /// </summary>
  99. /// <param name="pUnknown">Com 对象</param>
  100. /// <param name="bmpRect">图象大小</param>
  101. /// <returns></returns>
  102. public Bitmap TakeSnapshot(object pUnknown, Rectangle bmpRect)
  103. {
  104. if (pUnknown == null)
  105. return null;
  106. //必须为com对象
  107. if (!Marshal.IsComObject(pUnknown))
  108. return null;
  109. //IViewObject 接口
  110. UnsafeNativeMethods.IViewObject ViewObject = null;
  111. IntPtr pViewObject = IntPtr.Zero;
  112. //内存图
  113. Bitmap pPicture = new Bitmap(bmpRect.Width, bmpRect.Height);
  114. Graphics hDrawDC = Graphics.FromImage(pPicture);
  115. //获取接口
  116. object hret = Marshal.QueryInterface(Marshal.GetIUnknownForObject(pUnknown),
  117. ref UnsafeNativeMethods.IID_IViewObject, out pViewObject);
  118. try
  119. {
  120. ViewObject = Marshal.GetTypedObjectForIUnknown(pViewObject, typeof(UnsafeNativeMethods.IViewObject)) as UnsafeNativeMethods.IViewObject;
  121. //调用Draw方法
  122. ViewObject.Draw((int)System.Runtime.InteropServices.ComTypes.DVASPECT.DVASPECT_CONTENT,
  123. -1,
  124. IntPtr.Zero,
  125. null,
  126. IntPtr.Zero,
  127. hDrawDC.GetHdc(),
  128. new NativeMethods.COMRECT(bmpRect),
  129. null,
  130. IntPtr.Zero,
  131. 0);
  132. }
  133. catch (Exception ex)
  134. {
  135. Console.WriteLine(ex.Message);
  136. throw ex;
  137. }
  138. //释放
  139. hDrawDC.Dispose();
  140. return pPicture;
  141. }
  142. }
  143. [SuppressUnmanagedCodeSecurity]
  144. internal static class UnsafeNativeMethods
  145. {
  146. public static Guid IID_IViewObject = new Guid("{0000010d-0000-0000-C000-000000000046}");
  147. [ComImport, Guid("0000010d-0000-0000-C000-000000000046"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
  148. public interface IViewObject
  149. {
  150. [PreserveSig]
  151. int Draw([In, MarshalAs(UnmanagedType.U4)] int dwDrawAspect, int lindex, IntPtr pvAspect, [In] NativeMethods.tagDVTARGETDEVICE ptd, IntPtr hdcTargetDev, IntPtr hdcDraw, [In] NativeMethods.COMRECT lprcBounds, [In] NativeMethods.COMRECT lprcWBounds, IntPtr pfnContinue, [In] int dwContinue);
  152. [PreserveSig]
  153. int GetColorSet([In, MarshalAs(UnmanagedType.U4)] int dwDrawAspect, int lindex, IntPtr pvAspect, [In] NativeMethods.tagDVTARGETDEVICE ptd, IntPtr hicTargetDev, [Out] NativeMethods.tagLOGPALETTE ppColorSet);
  154. [PreserveSig]
  155. int Freeze([In, MarshalAs(UnmanagedType.U4)] int dwDrawAspect, int lindex, IntPtr pvAspect, [Out] IntPtr pdwFreeze);
  156. [PreserveSig]
  157. int Unfreeze([In, MarshalAs(UnmanagedType.U4)] int dwFreeze);
  158. void SetAdvise([In, MarshalAs(UnmanagedType.U4)] int aspects, [In, MarshalAs(UnmanagedType.U4)] int advf, [In, MarshalAs(UnmanagedType.Interface)] System.Runtime.InteropServices.ComTypes.IAdviseSink pAdvSink);
  159. void GetAdvise([In, Out, MarshalAs(UnmanagedType.LPArray)] int[] paspects, [In, Out, MarshalAs(UnmanagedType.LPArray)] int[] advf, [In, Out, MarshalAs(UnmanagedType.LPArray)] System.Runtime.InteropServices.ComTypes.IAdviseSink[] pAdvSink);
  160. }
  161. }
  162. }
  163. }
  164. }

使用webBrowse把网页word等转换成图片的更多相关文章

  1. 如何将WORD表格转换成EXCEL表格

    WORD和EXCEL都可以制作表格,但WORD表格与EXCEL表格之间有着很明显的差距,所以在办公中经常会需要将WORD转换成EXCEL,今天小编就教大家一招将WORD表格转换成EXCEL表格. 操作 ...

  2. 批量将网页转换成图片或PDF文档技巧分享

    工作中我们有时要将一些批量的网页转换成图片或者PDF文档格式,尽管多数浏览器具有滚动截屏或者打印输出PDF文档功能.可是假设有几十上百张网页须要处理,那也是要人命的.所以我一直想找一款可以批量处理该工 ...

  3. 用Python将word文件转换成html(转)

    用Python将word文件转换成html   序 最近公司一个客户大大购买了一堆医疗健康方面的科普文章,希望能放到我们正在开发的健康档案管理软件上.客户大大说,要智能推送!要掌握节奏!要深度学习!要 ...

  4. 自动把网页px单位转换成rem

    自动把网页px单位转换成rem 首先在你的项目开发环境中安装2个插件 然后在vue.config.js文件引入并重新启动服务器 这样就配置成功了,一起看看效果

  5. C#技术分享【PDF转换成图片——13种方案】(2013-07-25重新整理)

    原文:C#技术分享[PDF转换成图片--13种方案](2013-07-25重新整理) 重要说明:本博已迁移到 石佳劼的博客,有疑问请到 文章新地址 留言!!! 写在最前面:为了节约大家时间,撸主把最常 ...

  6. C#技术分享【PDF转换成图片——11种方案】

    1.[iTextSharp.dll],C# 开源PDF处理工具,可以任意操作PDF,并可以提取PDF中的文字和图片,但不能直接将PDF转换成图片. DLL和源码 下载地址:http://downloa ...

  7. 使用的是html5的canvas将文字转换成图片

    当前功能的运用场景是:用户需要传文件给他人,在用户选择文件之后需要显示一个文件图标和所选文件的名称. 当前代码部分是摘自网上,但是已经忘记在什么地方获取的,如有侵权联系小弟后自当删除. 注意:必须在h ...

  8. WPF中实现图片文件转换成Visual对象,Viewport3D对象转换成图片

    原文:WPF中实现图片文件转换成Visual对象,Viewport3D对象转换成图片 1.图片文件转换成Visual对象 private Visual CreateVisual(string imag ...

  9. Gson字符串编码,字符串转换成图片保存,二进制转换成图片保存

    import java.io.BufferedInputStream; import java.io.ByteArrayInputStream; import java.io.File; import ...

随机推荐

  1. SPOJ LCS2 多个串的最长公共子串

    这里串最多有10个,找所有串的最长公共子串 这里后缀自动机做,以第一个串建立后缀自动机,后面的串一个个去匹配,每次得到当前串在可到达状态上所能得到的最长后缀长度 拿所有串匹配后得到的结果进行计算 #i ...

  2. Linux(5):正则表达式 & 权限

    正则表达式: 特殊符号: '' ---> 所见即所得,里面的内容都会被原封不动的输出出来 "" ---> 与单引号类似,但其中的特殊符号会被解析运行 `` ---> ...

  3. Arduino学习笔记0---开发板的了解

    Arduino的入门文档https://wenku.baidu.com/view/4040861d58fafab069dc02d4.html?from=search,共61页的文档,看完就差不多可以入 ...

  4. .NET Core windows开发环境 + Git代码控管 + Docker 部署环境搭建

    开发环境准备 下载vs code,.NET Core sdk: https://www.microsoft.com/net/core#windowscmd 目前最新版为code 1.8.1,.NET ...

  5. [转] OracleDataReader.Read()是否有值

    TongYu2009的原文地址 当你执行一次OracleDataReader.Read()是Bool型),注意是只读取一个!如果你的Select语句执行结果是空,或者所有的结果都已经读取完了则Orac ...

  6. 关于Chrome谷歌浏览器开发者工具网络Network中返回无数据的问题

    1.如图所示,对于有些js文件,响应中无返回数据,Failed to load response data,当然本来是应该有数据,你用火狐浏览器看,就是有的,或者直接在浏览器地址栏里输入url,也可以 ...

  7. Linux中断处理驱动程序编写

    本章节我们一起来探讨一下Linux中的中断 中断与定时器:中断的概念:指CPU在执行过程中,出现某些突发事件急待处理,CPU暂停执行当前程序,转去处理突发事件,处理完后CPU又返回原程序被中断的位置继 ...

  8. 运维平台之CMDB系统建设

    CMDB是运维的基础核心系统,所有的元数据和共享数据管理源,类似于业务中的账号平台的作用.本篇文章,我将从概念篇.模型篇.到实现与实施篇具体的进行阐述. CMDB也称配置管理,配置管理一直被认为是 I ...

  9. HDU 5288(OO’s Sequence-区间互质情况统计)

    OO's Sequence Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) ...

  10. 在开发过程中,如何在手机上测试vue-cli构建的项目

    由于有时候谷歌手机调试与真是的手机环境还是有一定的差距,所以需要在手机上测试项目. 手机上测试vue-cli构建项目方法: 打开项目config/index.js文件,找到module.exports ...