HTMLドキュメントを文字列としてロードして解析する必要があるプロジェクトがあります。どのHTMLノードがページの高さ(8.5x11)を超えるかを判断しようとしているので、その前に「page-break-after」を挿入できます。これは、私が作成している.NETdllを使用して実行されます。
mshtmldomを使ってみました。これに文字列値をロードするのは簡単ではありません。これを達成できたとき、offsetHeight(etc)プロパティは常にゼロを返します。これを機能させるために私が見つけた唯一の方法は、HTMLをディスクに保存し、SHDocVw.InternetExplorerを介してロードし、それをmshtmldomに渡すことです。
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
私には2つの目標があります。#1が鍵であり、#2が理想的です。
1)文字列からHTMLをロードし、上記のコードを引き続き機能させます。
2)理想的には、同じことを行う.NETコンポーネントを見つけます。選択の余地がない限り、.NETのCOMコンポーネントに依存するのは好きではありません。