У меня есть проект, который требует от меня загрузки HTML-документа в виде строки и его анализа. Я пытаюсь определить, какой HTML-узел будет превышать высоту страницы (8,5x11), поэтому я могу вставить перед ним «разрыв страницы». Это будет сделано с помощью DLL .NET, которую я создаю.
Я попытался использовать mshtml dom. Загрузить сюда строковое значение непросто, и когда мне это удалось, свойства offsetHeight (и т. д.) всегда возвращают ноль. Единственный найденный мной способ сделать это — сохранить HTML на диск, загрузить его через SHDocVw.InternetExplorer, а затем передать его в mshtml dom.
Я предполагаю, что, если HTML не «рендерится» с помощью SHDocVw, у меня нет информации offsetHeight для mshtml, чтобы сообщить, так как это основано на пикселях экрана. Я могу ошибаться.
Мой текущий код выглядит следующим образом:
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, который будет делать то же самое. Мне не нравится полагаться на COM-компоненты в .NET, если только у меня нет выбора.