私は先週、ユーザーが図形を描画し、ラベルを追加し、面積を計算できるようにするクライアント側の HTML ページの作成に費やしました。最終的に、システムは、この作品をワード文書に自動的に追加できるフラットな画像に変換できる必要があります。
これを行うためのさまざまなアプローチを調査しましたが、落とし穴にぶつかり続けています。1 つの方法は、サーバー側のページの html を送信し、Windows フォームの Browser オブジェクトを使用してレンダリングし、スクリーンショットを作成することでした。もう 1 つの方法 (まだ試していません) では、同様のことを行いますが、PhantomJS サーバー側を使用します。
ただし、ページから取得している HTML が期待どおりにレンダリングされないことに気付いたので、1 歩前進して 2 歩後退しました。
簡単なテストとして、ページの HTML をキャプチャするこのボタン クリック イベントをページに追加しました。
var html = document.documentElement.outerHTML;
var fso = new ActiveXObject("Scripting.FileSystemObject");
var s = fso.CreateTextFile("C:\\Test.html", true);
s.Write(html);
s.Close();
これは、ページに含まれる (スクリーンショットで必要な) コンテンツの種類の例です。
ただし、Internet Explorer で Test.html を表示すると、次のようになります。
.. Chrome で開くと、次のようになります。
これは、Googleマップがどのように機能するか(形状のレンダリングを支援するためにJavaScriptデータファイルを動的にロードおよび削除する場所)に関係していると思います。HTML を完全にキャプチャして動作させることができれば、サーバー側でスクリーンショットを撮ることができると期待していますが、望みはありません。
ページをフラットなイメージに確実に変換するためのアイデアはありますか?
PS Google の静的マップ API も調べていましたが、(私が知る限り) 円やカスタム オーバーレイなどはサポートされていません。
編集:形状が動的キャンバス オブジェクトに描画され、マップ全体にタイル表示され、これらのキャンバス要素がページ HTML を通過しないことに気付きました (たとえ通過したとしても、形状が含まれていないようです) DOM 内のデータ)。