You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
137 lines
5.4 KiB
C#
137 lines
5.4 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Runtime.InteropServices;
|
|
using System.Drawing;
|
|
using System.Runtime.InteropServices.ComTypes;
|
|
using System.Windows.Forms;
|
|
using System.IO;
|
|
|
|
namespace NetLibrary
|
|
{
|
|
public class HtmlCapture
|
|
{
|
|
#region html转图片
|
|
public static void ConverUrl(string url, string imgSavePath, int Width, int Height)
|
|
{
|
|
string ImagePath = string.Empty;
|
|
WebBrowser web = new WebBrowser();
|
|
web.Navigate(url);
|
|
while (web.ReadyState != WebBrowserReadyState.Complete)
|
|
{
|
|
System.Windows.Forms.Application.DoEvents();
|
|
}
|
|
Rectangle screen = Screen.PrimaryScreen.Bounds;
|
|
Size? imgsize = null;
|
|
//set the webbrowser width and hight
|
|
if (Width == 0)
|
|
{
|
|
web.Width = screen.Width;
|
|
web.Height = screen.Height;
|
|
}
|
|
else
|
|
{
|
|
web.Width = Width;
|
|
web.Height = 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 > web.Width ? body.Width : web.Width,
|
|
body.Height > web.Height ? body.Height : web.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);
|
|
}
|
|
bitmap.Save(imgSavePath, System.Drawing.Imaging.ImageFormat.Jpeg);
|
|
bitmap.Dispose();
|
|
web.Dispose();
|
|
}
|
|
#endregion
|
|
#region html文档转图片
|
|
public static void ConverHTML(string html, string imgSavePath, int Width, int Height)
|
|
{
|
|
string dir = AppDomain.CurrentDomain.BaseDirectory + "ServerCookies";
|
|
if (Directory.Exists(dir) == false) Directory.CreateDirectory(dir);
|
|
string tempPath = dir + "/" + Guid.NewGuid().ToString() + ".html";
|
|
if (File.Exists(tempPath) == false) File.Create(tempPath).Close();
|
|
File.AppendAllText(tempPath, html);
|
|
ConverUrl(tempPath, imgSavePath, Width, Height);
|
|
File.Delete(tempPath);
|
|
}
|
|
#endregion
|
|
|
|
}
|
|
|
|
#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
|
|
}
|