原始HTML - 如何测量服务器上的宽度/高度?

时间:2009-10-06 21:55:22

标签: html .net webbrowser-control

我有一个Web应用程序,可以让用户将整个.html文件上传到我的服务器。我希望'检测'上传的html的宽度/高度并将其存储在我的数据库中。

到目前为止,我没有成功尝试使用System.Windows.Forms.WebBrowser控件 - 通过将文件读入字符串,将其加载到browser.document:

 _browser = new WebBrowser();
 _browser.Navigate("about:Blank");
 _browser.Document.OpenNew(true);
 _browser.Document.Write(html);

检查_browser对象(文档,窗口等)的各种属性似乎总是​​将大小默认为250x250。

我已尝试在.html文件中添加各种css大小声明,但仍然是相同的。

  • 是检查html字符串和正则表达式匹配CSS的唯一选项 属性?
  • 您如何可靠地确定相关文档的渲染宽度/高度?

记住,.html文件可能包含也可能不包含css属性。也许用户使用较旧的,已弃用的标签,例如

<body width="500">

vs

<style>
 body{ width: 400px; }
<body>

3 个答案:

答案 0 :(得分:2)

即使您可以通过检查CSS和/或HTML标记规范来捕获声明的宽度,您也不可能获得呈现的宽度。由于文字包装,高度会更糟。

我想你可能想要考虑一种不同的方法。你真的需要这个吗?你想要满足什么要求?可以用不同的方式完成吗?

答案 1 :(得分:1)

您将无法使用正则表达式找到维度 - 请记住,可能没有任何维度,在这种情况下,您必须手动测量文档中的元素,需要完整的HTML渲染器。

使用Interhet Explorer进行操作会引发安全问题;确保IE始终在您的服务器上保持最新,并且ASP .Net帐户中的安全设置尽可能紧密。 (我不知道该怎么做)

尝试_browser.Document.Body.OffsetRectangle.Size

编辑:注意,其他人已经指出,高度也将取决于宽度,因为文本换行等,所以你应该将IE控件的宽度设置为适当的价值。

答案 2 :(得分:1)

正如您所发现的,您将无法使用WebBrowser控件,因为报告的高度和宽度是控件本身的高度和宽度,而不是控件内的文档。

你真正需要做的是编写自己的HTML解析引擎来自行计算。您需要计算出所有线条,找出线条高度等。

这真的值得付出努力吗?您需要做出如此多的假设,以至于这样的计算几乎毫无价值......不同浏览器的渲染差异,客户的文本大小设置为默认值以外的其他东西,可能还有其他几十种。即使屏幕分辨率也很重要,因为正如您在本段中所看到的,文本往往会包装。您需要计算文本将换行的位置,以便计算将显示多少行文本。你需要考虑字体大小......

所有这些都说,理论上这应该是可行的,计算这一切的机制与打印到打印机时使用的概念相同。计算页面高度,并确定您在页面上的位置是手动打印时的所有标准操作步骤。

这是一篇解释基础知识的文章。这取决于你是否值得努力。

http://msdn.microsoft.com/en-us/magazine/cc188767.aspx