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;
- }
参考文献:
https://msdn.microsoft.com/zh-cn/library/system.windows.forms.webbrowser(v=vs.110).aspx