OpenLayersの地図画像をサーバーに送信し、印刷を行う

はじめに

OpenLayersのデモに地図画像を出力する処理があったので、それを参考に印刷処理を実装してみた。Webの印刷処理は非常に難しいので、DevExpress社のASPxDocumentViewerクラスを利用した。

処理概要は以下の通り

リボンメニューに印刷ボタンを作成し、地図が画像を生成し、Base64化してサーバーに送る。送られたBase64化データを画像に変換し、地図レポートに設定し、印刷画面を表示させる。

report.js

OpenLayersのデモである、Map Exportを参考に地図画像をBase64化する。Base64化で文字列になるのでhiddenフィールドに設定し、サーバーに送信する。

※地図画像をBase64化する場合は、toDataURL()メソッドを使用しているが地図画像に他ドメインから取得した画像を使用している場合は、エラーが発生する。今回の場合、背景地図に、国土地理院のタイル画像を使用しているが、ドメインが異なるのでデフォルトではエラーが発生する。「汚染されたキャンバス」の問題
それを回避するため、ol.source.XYZを生成する際に、crossOriginオプションに’anonymous’を設定しておく。

PrintDialog.aspx.cs

受信したBase64化データは付加情報が入っており、そのままではbyte[]に変換できないので、付加情報を削除してbyte[]に変換する。変換したbyte[]を画像化し、reportに設定する。

地図表示画面

印刷画面

印刷画面に、地図画像が表示されている。残念なのがブラウザの地図画面領域が
小さい場合、印刷画面が切れてしまうことである。これは今後の課題

ブラウザの印刷画面

Print Friendly, PDF & Email

シェアする

  • このエントリーをはてなブックマークに追加

フォローする