我有一个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属性。也许用户使用较旧的,已弃用的标签,例如
<body width="500">
vs
<style>
body{ width: 400px; }
<body>
等
答案 0 :(得分:2)
即使您可以通过检查CSS和/或HTML标记规范来捕获声明的宽度,您也不可能获得呈现的宽度。由于文字包装,高度会更糟。
我想你可能想要考虑一种不同的方法。你真的需要这个吗?你想要满足什么要求?可以用不同的方式完成吗?
答案 1 :(得分:1)
您将无法使用正则表达式找到维度 - 请记住,可能没有任何维度,在这种情况下,您必须手动测量文档中的元素,需要完整的HTML渲染器。
使用Interhet Explorer进行操作会引发安全问题;确保IE始终在您的服务器上保持最新,并且ASP .Net帐户中的安全设置尽可能紧密。 (我不知道该怎么做)
尝试_browser.Document.Body.OffsetRectangle.Size
。
编辑:注意,其他人已经指出,高度也将取决于宽度,因为文本换行等,所以你应该将IE控件的宽度设置为适当的价值。
答案 2 :(得分:1)
正如您所发现的,您将无法使用WebBrowser控件,因为报告的高度和宽度是控件本身的高度和宽度,而不是控件内的文档。
你真正需要做的是编写自己的HTML解析引擎来自行计算。您需要计算出所有线条,找出线条高度等。
这真的值得付出努力吗?您需要做出如此多的假设,以至于这样的计算几乎毫无价值......不同浏览器的渲染差异,客户的文本大小设置为默认值以外的其他东西,可能还有其他几十种。即使屏幕分辨率也很重要,因为正如您在本段中所看到的,文本往往会包装。您需要计算文本将换行的位置,以便计算将显示多少行文本。你需要考虑字体大小......
所有这些都说,理论上这应该是可行的,计算这一切的机制与打印到打印机时使用的概念相同。计算页面高度,并确定您在页面上的位置是手动打印时的所有标准操作步骤。
这是一篇解释基础知识的文章。这取决于你是否值得努力。