VisualforceのPDFにGoogleマップへのリンクを表示
取引先の位置情報(緯度経度)から組み立てたGoogleマップのURLを、VisualforceのPDFへクリックできるリンクとして埋め込む方法です。PDF化に必要な属性の指定もあわせて示します。
なぜPDFからGoogleマップへ直接リンクするのか
PDFの中の住所をタップすると地図アプリが開く、というのは受け取った人にとって親切です。仕組みは単純で、緯度経度などの位置情報から組み立てたGoogleマップのURLを、通常のハイパーリンクとして出力するだけです。QRコードのように画像を外部から取得する必要がないので、リモートサイト設定などの追加の手間もありません。
位置情報からGoogleマップのURLを組み立てる
取引先に、緯度経度を保持する項目と、そこからGoogleマップのURLを組み立てる数式項目を用意します。
緯度経度を保持する項目を用意する
取引先オブジェクトに、緯度・経度の値をテキストまたは地理位置情報型で保持する項目を作成します。
GoogleマップのURLを組み立てる数式項目を作成する
作成した項目の値を使って、Googleマップで開けるURLの文字列を返す数式項目を作成します。数式の例を次に示します。
"https://www.google.com/maps?q=" & TEXT(LocationNum__Latitude__s) & "," & TEXT(LocationNum__Longitude__s)
数式項目の例です。緯度経度を保持するLocationNumから、GoogleマップのURLを組み立てます。
地理位置情報型の項目は、数式ではLocationNum__Latitude__s・LocationNum__Longitude__sのように緯度と経度を別々に参照します。TEXT()は数値や日付を文字列に変換する関数で、&は文字列をつなげる演算子です。実際に使う地図サービスのURLの仕様(緯度と経度をどの順番で、どんな区切り文字でつなぐか)は、利用するサービス側の仕様に沿って組み立ててください。
Visualforceページでリンクを表示する
<apex:page renderAs="pdf" applyHtmlTag="false" showHeader="false" standardController="Account"> <head> <style type="text/css"> body { font-family: "Arial Unicode MS"; font-size: 12px; } table { border-collapse: collapse; width: 100%; } th { border: 1px solid #000; color: #FFF; background-color: #0B5394; height: 50px; padding: 5px; } td { border: 1px solid #000; text-align: center; height: 30px; } </style> </head> <body> <table> <thead> <tr><th colspan="2">Google Map ハイパーリンク</th></tr> </thead> <tbody> <tr> <td>住所</td> <td><a href="{!Account.AddressGoogleMap__c}">地図を開く</a></td> </tr> </tbody> </table> </body> </apex:page>
apex:pageのrenderAs="pdf"でPDF化します。数式項目のURLをそのままa要素のhrefに渡しています。
PDFにするには、apex:pageにrenderAs="pdf"を指定します。これが無いと、PDFではなくVisualforceの通常のHTMLページとして表示されるだけになります。表の見出し行の文字列は、<th>で囲みます。生成後のPDFをPDFビューアで開いて、リンクが動作するかを確かめてください。
取引先の詳細画面でも同じリンクを開ける
数式項目はページレイアウトに配置するだけで、取引先の詳細画面からもクリックできます。VisualforceのPDFの中のリンクと、詳細画面の項目のリンクは、どちらも同じ数式項目のURLを使っているだけで、仕組みは別ではありません。
動作確認
取引先の詳細画面でリンクを確認する
住所GoogleMap項目のリンクを押して、Googleマップが開くことを確認します。
作成したアクションを押す
Visualforceページを呼び出すアクションを押して、PDFが開くことを確認します。
PDFの中のリンクを確認する
PDFビューアの中でリンクを押し、Googleマップが開くことを確認します。
ここで間違えやすい
| 間違い | 何が起きるか |
|---|---|
renderAs="pdf"を付け忘れる | ブラウザにそのままHTMLとして表示され、PDFにならない |
| 見出し行の直下に文字列を直接置く | 表の見出し行が崩れる。<th>や<td>で囲む |
| PDFの中のリンク動作を確認しないまま公開する | クリックしても地図が開かない状態に気づかない |
| 地図サービス側のURL仕様の変更に気づかない | 数式項目が古い形式のURLを返し続け、リンクが開かなくなる |
確認した環境
- 2026年9月 / Salesforce Summer '26(APIバージョン67.0)時点の公式ドキュメントで、apex:pageの属性とPDFレンダリングの制約一覧を確認しています
まとめ
- 緯度経度から組み立てたGoogleマップのURLは、通常のハイパーリンクとしてVisualforceのページに置くだけでPDFに反映できます
- QRコードと違って外部の画像を取得しないので、リモートサイト設定は不要です
- PDFにするには、
apex:pageのrenderAs="pdf"が必須です - 表の見出し行に文字列を直接置かず、
<th>や<td>で囲んでください - リンクが生成後のPDFで実際にクリックできるかは、生成したPDFを開いて確かめてください
参考:当時の画面
記事を最初に書いた当時の画面です。いまの手順と違うところは、各画像の説明に書いています。
Salesforceの導入・運用についてご相談ください
導入前の検討から、お使いの環境の改修・運用、AIとの連携まで承ります。状況を伺ったうえで、進め方をご提案します。