WebBrowser可以将Web浏览器的常用功能:如编辑、获取文本、HTML等移动PC端的应用程序。使用户能够在您的窗体中导航网页。
WebBrowser本身的属性、方法并不能完美的获取含图片的html的文本。
图片在html中有两种表现形式:
一种是将图片完全转换为byte[],另一种是直接引入绝对路径。明显使用第一种方法将IMAGE以byte[]存储到DB中,在应用程序移动到别的电脑上使用时有很大优势;而使用绝对路径由于并没有把图片拷由过去则会找不到文件。
完成方法一,需要在WebBrowser寄存的父窗体中添加几个属性及转换方法:
-
/// Get/Set the documents body as text.
-
///
-
[Browsable(false)]
-
public string BodyText
-
{
-
get
-
{
-
if (webBrowser1.Document != null &&
-
webBrowser1.Document.Body != null)
-
{
-
return webBrowser1.Document.Body.InnerText;
-
}
-
else
-
return string.Empty;
-
}
-
set
-
{
-
Document.OpenNew(false);
-
if (webBrowser1.Document.Body != null)
-
webBrowser1.Document.Body.InnerText = HttpUtility.HtmlEncode(value);
-
}
-
}
-
-
[Browsable(false)]
-
public string Html
-
{
-
get
-
{
-
if (webBrowser1.Document != null &&
-
webBrowser1.Document.Body != null)
-
{
-
return webBrowser1.Document.Body.InnerHtml;
-
}
-
else
-
return string.Empty;
-
}
-
set
-
{
-
Document.OpenNew(true);
-
IHTMLDocument2 dom = Document.DomDocument as IHTMLDocument2;
-
try
-
{
-
if (value == null)
-
dom.clear();
-
else
-
dom.write(value);
-
}
-
finally
-
{
-
dom.close();
-
}
-
}
-
}
-
-
///
-
/// Get/Set the contents of the document Body, in html.
-
///
-
[Browsable(false)]
-
public string BodyHtml
-
{
-
get
-
{
-
if (webBrowser1.Document != null &&
-
webBrowser1.Document.Body != null)
-
{
-
string html = webBrowser1.Document.Body.InnerHtml;
-
if (html != null)
-
{
-
html = ReplaceFileSystemImages(html);
-
}
-
return html;
-
}
-
else
-
return string.Empty;
-
}
-
set
-
{
-
if (webBrowser1.Document.Body != null)
-
webBrowser1.Document.Body.InnerHtml = value;
-
}
-
}
将HTML中的图片路径转换为byte[]存储到html中的方法:
-
private string ReplaceFileSystemImages(string html)
-
{
-
var matches = Regex.Matches(html, @"]*?src\s*=\s*([""']?[^'"">]+?['""])[^>]*?>", RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace | RegexOptions.Multiline);
-
foreach (Match match in matches)
-
{
-
string src = match.Groups[1].Value;
-
src = src.Trim('\"');
-
if (File.Exists(src))
-
{
-
var ext = Path.GetExtension(src);
-
if (ext.Length > 0)
-
{
-
ext = ext.Substring(1);
-
src = string.Format("'data:image/{0};base64,{1}'", ext, Convert.ToBase64String(File.ReadAllBytes(src)));
-
html = html.Replace(match.Groups[1].Value, src);
-
}
-
}
-
}
-
return html;
-
}
参考文献:
阅读(3393) | 评论(0) | 转发(0) |