【问题标题】:Raw HTML - how to measure width/height on the server?原始 HTML - 如何在服务器上测量宽度/高度?
【发布时间】:2009-10-06 21:55:21
【问题描述】:

我有一个 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">

对比

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

等等

【问题讨论】:

  • 为什么?你想用这个尺寸做什么?
  • 短篇小说 - Sproutcore 对所有内容都使用绝对位置

标签: html .net webbrowser-control


【解决方案1】:

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

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

【讨论】:

  • 好点,有些网页甚至会根据画布的宽度动态调整布局。你会怎么处理呢?
【解决方案2】:

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

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

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

综上所述,理论上这应该是可行的,并且计算这一切的机制将与您用于打印到打印机的概念相同。计算页面高度并确定您在页面上的位置是手动打印时的所有标准操作过程。

这是一篇解释基本知识的文章。由您决定是否值得付出努力。

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

【讨论】:

    【解决方案3】:

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

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

    试试_browser.Document.Body.OffsetRectangle.Size。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-07
      • 2012-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-12
      • 2022-01-15
      相关资源
      最近更新 更多