我有一个项目需要我将 HTML 文档作为字符串加载并解析它。我正在尝试确定哪个 HTML 节点将超过页面的高度 (8.5x11),因此我可以在它之前插入一个“page-break-after”。这将通过我正在制作的 .NET dll 完成。
我尝试过使用 mshtml dom。将字符串值加载到其中并不容易,当我确实设法完成此操作时,offsetHeight (等)属性总是返回零。我发现完成这项工作的唯一方法是将 HTML 保存到磁盘,通过 SHDocVw.InternetExplorer 加载它,然后将其传递给 mshtml dom。
我假设除非 HTML 由 SHDocVw“渲染”,否则我没有要报告的 mshtml 的 offsetHeight 信息,因为这是基于屏幕像素的。我可能是错的。
我目前的代码如下:
Dim myIE As New SHDocVw.InternetExplorer
myIE.Navigate("D:\Temp\Test.HTML")
Dim myDoc As mshtml.HTMLDocument = CType(myIE.Document, mshtml.HTMLDocument)
Dim divTag As mshtml.IHTMLElement = myDoc.getElementById("someID")
For Each childNode As mshtml.IHTMLElement In TryCast(divTag.children, mshtml.IHTMLElementCollection)
If childNode.offsetTop + childNode.offsetHeight > 750 Then '72pixels = 1 inch.
childNode.insertAdjacentHTML("beforeBegin", "<DIV style='page-break-after:always'></DIV>")
End If
Next
我有两个目标。#1 是关键,#2 是理想的。
1) 从字符串加载 HTML,并且上面的代码仍然有效。
2) 理想情况下,找到一个可以做同样事情的 .NET 组件。我不喜欢依赖 .NET 中的 COM 组件,除非我别无选择。