使用webBrowse把网页word等转换成图片
http://blog.csdn.net/zgke/article/details/3248497
使用
- Bitmap MyImage = Test.GetControlScrollImage(new Uri(@"http://www.sina.com.cn"), 1024);
- MyImage.Save(@"C:/1.BMP");
- MyImage.Dispose();
使用到的类
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Text;
- using System.Windows.Forms;
- using System.Drawing.Imaging;
- using System.Runtime.InteropServices;
- using System.Security;
- namespace Print
- {
- public class Test
- {
- public static Bitmap GetHtmlImage(Uri UrlString,int Width)
- {
- WebBrowser MyControl = new WebBrowser();
- MyControl.Size = new Size(Width, 10);
- MyControl.Url = UrlString;
- while (MyControl.ReadyState != WebBrowserReadyState.Complete)
- {
- Application.DoEvents();
- }
- MyControl.Height= MyControl.Document.Body.ScrollRectangle.Height+20;
- MyControl.Url = UrlString;
- WebControlImage.Snapshot snap = new WebControlImage.Snapshot();
- Bitmap MyImage= snap.TakeSnapshot(MyControl.ActiveXInstance, new Rectangle(0, 0, MyControl.Width, MyControl.Height));
- MyControl.Dispose();
- return MyImage;
- }
- /// <summary>
- /// WebBrowser获取图形
- /// </summary>
- private class WebControlImage
- {
- internal static class NativeMethods
- {
- [StructLayout(LayoutKind.Sequential)]
- public sealed class tagDVTARGETDEVICE
- {
- [MarshalAs(UnmanagedType.U4)]
- public int tdSize;
- [MarshalAs(UnmanagedType.U2)]
- public short tdDriverNameOffset;
- [MarshalAs(UnmanagedType.U2)]
- public short tdDeviceNameOffset;
- [MarshalAs(UnmanagedType.U2)]
- public short tdPortNameOffset;
- [MarshalAs(UnmanagedType.U2)]
- public short tdExtDevmodeOffset;
- }
- [StructLayout(LayoutKind.Sequential)]
- public class COMRECT
- {
- public int left;
- public int top;
- public int right;
- public int bottom;
- public COMRECT()
- {
- }
- public COMRECT(Rectangle r)
- {
- this.left = r.X;
- this.top = r.Y;
- this.right = r.Right;
- this.bottom = r.Bottom;
- }
- public COMRECT(int left, int top, int right, int bottom)
- {
- this.left = left;
- this.top = top;
- this.right = right;
- this.bottom = bottom;
- }
- public static NativeMethods.COMRECT FromXYWH(int x, int y, int width, int height)
- {
- return new NativeMethods.COMRECT(x, y, x + width, y + height);
- }
- public override string ToString()
- {
- return string.Concat(new object[] { "Left = ", this.left, " Top ", this.top, " Right = ", this.right, " Bottom = ", this.bottom });
- }
- }
- [StructLayout(LayoutKind.Sequential)]
- public sealed class tagLOGPALETTE
- {
- [MarshalAs(UnmanagedType.U2)]
- public short palVersion;
- [MarshalAs(UnmanagedType.U2)]
- public short palNumEntries;
- }
- }
- public class Snapshot
- {
- /// <summary>
- /// 取快照
- /// </summary>
- /// <param name="pUnknown">Com 对象</param>
- /// <param name="bmpRect">图象大小</param>
- /// <returns></returns>
- public Bitmap TakeSnapshot(object pUnknown, Rectangle bmpRect)
- {
- if (pUnknown == null)
- return null;
- //必须为com对象
- if (!Marshal.IsComObject(pUnknown))
- return null;
- //IViewObject 接口
- UnsafeNativeMethods.IViewObject ViewObject = null;
- IntPtr pViewObject = IntPtr.Zero;
- //内存图
- Bitmap pPicture = new Bitmap(bmpRect.Width, bmpRect.Height);
- Graphics hDrawDC = Graphics.FromImage(pPicture);
- //获取接口
- object hret = Marshal.QueryInterface(Marshal.GetIUnknownForObject(pUnknown),
- ref UnsafeNativeMethods.IID_IViewObject, out pViewObject);
- try
- {
- ViewObject = Marshal.GetTypedObjectForIUnknown(pViewObject, typeof(UnsafeNativeMethods.IViewObject)) as UnsafeNativeMethods.IViewObject;
- //调用Draw方法
- ViewObject.Draw((int)System.Runtime.InteropServices.ComTypes.DVASPECT.DVASPECT_CONTENT,
- -1,
- IntPtr.Zero,
- null,
- IntPtr.Zero,
- hDrawDC.GetHdc(),
- new NativeMethods.COMRECT(bmpRect),
- null,
- IntPtr.Zero,
- 0);
- }
- catch (Exception ex)
- {
- Console.WriteLine(ex.Message);
- throw ex;
- }
- //释放
- hDrawDC.Dispose();
- return pPicture;
- }
- }
- [SuppressUnmanagedCodeSecurity]
- internal static class UnsafeNativeMethods
- {
- public static Guid IID_IViewObject = new Guid("{0000010d-0000-0000-C000-000000000046}");
- [ComImport, Guid("0000010d-0000-0000-C000-000000000046"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
- public interface IViewObject
- {
- [PreserveSig]
- 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);
- [PreserveSig]
- int GetColorSet([In, MarshalAs(UnmanagedType.U4)] int dwDrawAspect, int lindex, IntPtr pvAspect, [In] NativeMethods.tagDVTARGETDEVICE ptd, IntPtr hicTargetDev, [Out] NativeMethods.tagLOGPALETTE 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)] System.Runtime.InteropServices.ComTypes.IAdviseSink pAdvSink);
- 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);
- }
- }
- }
- }
- }
使用webBrowse把网页word等转换成图片的更多相关文章
- 如何将WORD表格转换成EXCEL表格
WORD和EXCEL都可以制作表格,但WORD表格与EXCEL表格之间有着很明显的差距,所以在办公中经常会需要将WORD转换成EXCEL,今天小编就教大家一招将WORD表格转换成EXCEL表格. 操作 ...
- 批量将网页转换成图片或PDF文档技巧分享
工作中我们有时要将一些批量的网页转换成图片或者PDF文档格式,尽管多数浏览器具有滚动截屏或者打印输出PDF文档功能.可是假设有几十上百张网页须要处理,那也是要人命的.所以我一直想找一款可以批量处理该工 ...
- 用Python将word文件转换成html(转)
用Python将word文件转换成html 序 最近公司一个客户大大购买了一堆医疗健康方面的科普文章,希望能放到我们正在开发的健康档案管理软件上.客户大大说,要智能推送!要掌握节奏!要深度学习!要 ...
- 自动把网页px单位转换成rem
自动把网页px单位转换成rem 首先在你的项目开发环境中安装2个插件 然后在vue.config.js文件引入并重新启动服务器 这样就配置成功了,一起看看效果
- C#技术分享【PDF转换成图片——13种方案】(2013-07-25重新整理)
原文:C#技术分享[PDF转换成图片--13种方案](2013-07-25重新整理) 重要说明:本博已迁移到 石佳劼的博客,有疑问请到 文章新地址 留言!!! 写在最前面:为了节约大家时间,撸主把最常 ...
- C#技术分享【PDF转换成图片——11种方案】
1.[iTextSharp.dll],C# 开源PDF处理工具,可以任意操作PDF,并可以提取PDF中的文字和图片,但不能直接将PDF转换成图片. DLL和源码 下载地址:http://downloa ...
- 使用的是html5的canvas将文字转换成图片
当前功能的运用场景是:用户需要传文件给他人,在用户选择文件之后需要显示一个文件图标和所选文件的名称. 当前代码部分是摘自网上,但是已经忘记在什么地方获取的,如有侵权联系小弟后自当删除. 注意:必须在h ...
- WPF中实现图片文件转换成Visual对象,Viewport3D对象转换成图片
原文:WPF中实现图片文件转换成Visual对象,Viewport3D对象转换成图片 1.图片文件转换成Visual对象 private Visual CreateVisual(string imag ...
- Gson字符串编码,字符串转换成图片保存,二进制转换成图片保存
import java.io.BufferedInputStream; import java.io.ByteArrayInputStream; import java.io.File; import ...
随机推荐
- HDU 3911 区间合并求最大长度的问题
http://vjudge.net/problem/viewProblem.action?id=21557 题目大意: 每进行一次颜色改变都可以把一段区间内的黑石头变成白石头,白石头变成黑石头,最后问 ...
- 应对ADT(Eclipse)的No more handles解决办法
应对ADT(Eclipse)的No more handles解决方法 ADT(Eclipse)最近几天经常出现如下错误对话框:org.eclipse.swt.SWTError: No more han ...
- [Lydsy1706月赛]大根堆
4919: [Lydsy1706月赛]大根堆 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 358 Solved: 150[Submit][Stat ...
- 如何解决XML文件中的警告提示“No grammar constraints (DTD or XML Schema) referenced in the document.”
解决方法:加上 <!DOCTYPE xml> <?xml version="1.0" encoding="UTF-8"?> <!D ...
- SHELL脚本实现分区
写一个脚本(前提:请为虚拟机新增一块硬盘,架设它为/dev/sdb),为指定的硬盘创建分区 1,列出当前系统上所有的磁盘,让用户选择,如果选择quit则退出脚本:如果用户选择错误,就让用户重新选择 2 ...
- php.ini中extension默许的地址到底在哪里设置的
原文: http://www.myexception.cn/php/1436096.html ----------------------------------------------------- ...
- 跟着9张思维导图学JavaScript
思维导图小tips 思维导图又叫心智图,是表达发射性思维的有效的图形思维工具 ,它简单却又极其有效,是一种革命性的思维工具.思维导图运用图文并重的技巧,把各级主题的关系用相互隶属与相关的层级图表现出来 ...
- linux 下shell脚本执行多个命令的方法
1.每个命令之间用;隔开说明:各命令的执行给果,不会影响其它命令的执行.换句话说,各个命令都会执行,但不保证每个命令都执行成功. 2.每个命令之间用&&隔开说明:若前面的命令执行成功, ...
- [javase学习笔记]-9.2 单继承与多重继承
这一节我们来看java中的单继承和多重继承. 在java语言中,支持的是单继承,不直接支持多继承,可是对C++中的多继承进行了改良. 那么什么是单继承和多继承呢? 单继承:一个子类仅仅能有一个直接父类 ...
- Highcharts:X轴分组堆叠图
在设计一个项目中的数据展示页面时.想要设计双X轴,一个轴显示须要的项.一个轴对这些项进行分组.效果如图: Highcharts自带双X轴展示方式.可是效果不是太理想.调整起来也会麻烦些 看到Highc ...