質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
canvas

HTML5の<canvas>要素用のタグです。CanvasはHTML5から導入された、二次元の図形描写が可能な要素です。

iframe

HTMLのタグ<iframe>です。<iframe>は、ドキュメント内に""inline frame""を作るHTML要素で、同じページでセパレートしているドキュメントが表示されるようにします。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

1回答

3129閲覧

html2canvasで、google map が表示できない

yamatatu

総合スコア0

canvas

HTML5の<canvas>要素用のタグです。CanvasはHTML5から導入された、二次元の図形描写が可能な要素です。

iframe

HTMLのタグ<iframe>です。<iframe>は、ドキュメント内に""inline frame""を作るHTML要素で、同じページでセパレートしているドキュメントが表示されるようにします。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2021/07/30 04:55

編集2021/07/30 09:42

ワードプレスの投稿詳細ページにhtml2canvasとjsPDFを使って、一部のHTMLをPDF化しようとしています。
このhtmlの中にGoogle mapが埋め込んでいますが、canvas作成しても、Google mapは表示できず、空白のままです。

試したこと その1

調べたところ、クロスドメインの問題で、表示できないとの記事があり、
html2canvasのオプションであるuseCORS:trueを付与すれば解決できるとのことでした。
以下、コードを試しましたが、一瞬コンソールに何かエラーが出るのですが、すぐ消えてしまうので、確認できない状態です。そして、google mapは空白のまま、canvasに出力され、解決できませんでした。

js

1 $(function(){ 2 $('#js-pdf').on('click', function() { 3 html2canvas(document.getElementById("printarea"),{ 4 scale:2, 5 useCORS: true, 6 allowTaint: false, 7 }).then(function(canvas) { 8 const imgData = canvas.toDataURL('image/png'); 9 const doc = new jsPDF(); 10 const width = doc.internal.pageSize.width; 11 doc.addImage(imgData, 'PNG', width*0.05, width*0.05, width * 0.9, 0); 12 doc.save("sample.pdf"); 13 }); 14 }); 15 });

試したこと その2

また、クロスドメインで画像を直接ロードしようとする代わりに、ローカルプロキシを使用して画像を取得し、保存してhtml2canvasに渡すことができるhtml2canvas-proxyを使用すれば、解決策の記事がありましたので、
同階層にhtml2canvas-proxyからダウンロードしてきたhtml2canvasproxy.phを配置し、
cacheディレクトリ(html2canvas-proxyのREADMEの設定欄にdefine('H2CP_PATH', 'cache');が画像が保存されるフォルダと記入がありましたので、これでいいのかわからないですが、とりあえずこの名前にしました。)も同階層に作成して、以下のコードで試しました。
コンソールのエラーは無くなりましたが、google mapは空白のままで、なぜかその部分にワードプレスのTOP上部の画像がcanvasに出力される状態になりました。
ワードプレスのTOP上部の画像ではなく、google mapの地図画像を表示したいのですが、うまくいきません。

js

1$(function(){ 2 $('#js-pdf').on('click', function() { 3 html2canvas(document.getElementById("printarea"),{ 4 scale:2, 5 proxy: './html2canvasproxy.php', 6 useCORS: false, 7 }).then(function(canvas) { 8 const imgData = canvas.toDataURL('image/png'); 9 const doc = new jsPDF(); 10 const width = doc.internal.pageSize.width; 11 doc.addImage(imgData, 'PNG', width*0.05, width*0.05, width * 0.9, 0); 12 doc.save("sample.pdf"); 13 }); 14 }); 15 });

問題が解決できず、困っております。
こちら解決のご協力、アドバイスありましたら、大変助かります。

※情報不足がありましたら、申し訳ございません。

補足情報(ツールのバージョン)

html2canvas 1.0.0-alpha.12

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

odataiki

2021/07/30 08:53

「うまくいきませんでした。」の部分をもう少し詳しく書くと 解決方法の提案がより多く集まると思います。 例えば、エラーが出てプログラムが中断された、エラーも出ず画像も保存されなかった、などなど
yamatatu

2021/07/30 09:08

アドバイスありがとうございます! エラー内容も書き込むように致します。
guest

回答1

0

自己解決

自己解決致しました。
Google mapの埋め込みの表示は諦めて、html2canvasを実行する前に、google mapのiframeの表示を削除し、google map api staticのmapの画像を配置してからhtml2canvasを実行することで解決できました。

javascript

1 2$(function(){ 3 $('#js-pdf').on('click', function() { 4 $('#map').find('iframe').css('display','none'); 5 $('#map').append(`<img src="https://maps.googleapis.com/maps/api/staticmap?key=〇〇 6 &center=adress 7 &size=600x240 8 &zoom=14 9 />`) 10 11 html2canvas(document.getElementById("printarea"),{ 12 scale:2, 13 useCORS: true, 14 allowTaint: false, 15 16 }).then(function(canvas) { 17 const imgData = canvas.toDataURL('image/png'); 18 const doc = new jsPDF(); 19 const width = doc.internal.pageSize.width; 20 doc.addImage(imgData, 'PNG', width*0.05, width*0.05, width * 0.9, 0); 21 22 const $failname = <?php echo date_i18n("YmdHi"); ?>+'.pdf' 23 doc.save($failname); 24 }); 25 26 27 28 setTimeout(function() { 29 $('#map').find('iframe').css('display','inline'); 30 $('#map').find('img').css('display','none'); 31 }, 50); 32 33 }); 34 });

投稿2021/09/30 11:50

yamatatu

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問