我有一个网络应用程序,让用户上传整个.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>
等。
发布于 2009-10-06 22:14:02
正如您已经发现的,您将无法使用WebBrowser控件,因为报告的高度和宽度是控件本身的高度和宽度,而不是控件内部的文档。
你真正需要做的是编写你自己的HTML解析引擎来自己计算出来。你需要计算出所有的线,计算出线的高度,等等。
这样的努力真的值得吗?你需要做很多假设,这样的计算几乎毫无价值……不同浏览器的渲染差异,将其文本大小设置为非默认大小的客户,以及可能数十个其他用户。即使是屏幕分辨率也很重要,因为正如您在本段中所看到的,文本往往会换行。您需要计算文本的换行位置,以便计算将显示多少行文本。你需要考虑字体大小...
所有这些都表明,理论上这应该是可行的,并且计算所有这些的机制将是您用于打印到打印机的相同概念。手动打印时,计算页面高度并确定您在页面上的位置都是标准操作程序。
这里有一篇文章解释了基础知识。这将由您来决定是否值得付出这些努力。
发布于 2009-10-06 22:10:54
即使您可以通过检查CSS和/或HTML标记规范来捕获声明的宽度,也不太可能获得呈现的宽度。高度会更糟,因为文本会自动换行。
我认为你可能想要考虑一种不同的方法。你真的需要这个吗?你想满足什么要求?可以用一种不同的方式来完成吗?
发布于 2009-10-06 22:09:24
您将无法使用正则表达式找到维度-请记住,可能没有任何维度,在这种情况下,您必须手动测量文档中的元素,这需要一个完整的HTML渲染器。
使用Interhet Explorer执行此操作会引起安全问题;请确保IE始终在您的服务器上保持最新,并确保其在ASP .Net帐户中的安全设置尽可能严格。(我不确定该怎么做)
试试_browser.Document.Body.OffsetRectangle.Size
。
EDIT:请注意,正如其他人所指出的,由于文本换行等原因,高度也将取决于宽度,因此您应该将IE控件的宽度设置为合适的值。
https://stackoverflow.com/questions/1528309
复制相似问题