DBに格納したPDFをレコードアイテムブロックで描画するサンプルを紹介します。
レコードアイテムブロックにデフォルトで出力されるファイルフィールドのリンクはダウンロード専用になっており、
画面上に描画する事が出来ません。
そのため、PDFを画面上に描画するために本記事記載のJavaScirptのサンプルプログラムを動かす必要があります。
実装の概要
今回のサンプルプログラムは、以下の特徴を持っています。
2. Blob URLを生成してiframeや
設置するソースコード
以下のソースコードを設置してください
JavaScript: レコードアイテムブロックのJavaScript(JSタブに設置してください)
HTMLの実装
レコードアイテムブロックのbodyタブを編集してください。
iframe要素に関しては、デザイン上表示をしたい箇所に設置してください。
input type hiddenのvalue値はお使いの環境に合わせて修正してください。
<!-- PDFのURLを埋め込む(Thymeleaf) --> <input type="hidden" id="pdf-url" th:value="${file.fileUrl}" /> <!-- PDF表示用iframe --> <iframe id="pdfViewer" width="500px" height="500px"></iframe>
JavaScriptの実装
レコードアイテムブロックのJSタブを編集してください。
document.addEventListener("DOMContentLoaded", function () { var input = document.getElementById('pdf-url'); if (!input) return; var url = input.value; fetch(url) .then(function (res) { return res.blob(); }) .then(function (blob) { // MIMEタイプを明示的にapplication/pdfにする var pdfBlob = new Blob([blob], { type: "application/pdf" }); var blobUrl = URL.createObjectURL(pdfBlob); document.getElementById('pdfViewer').src = blobUrl; }) .catch(function (e) { console.log("PDF表示エラー:", e); }); });
実装のポイント
2. JSの設置: thymeleafから取得したPDFのURLからBlob化してiframeへ返す
まとめ
ダウンロード専用になっているファイルフィールドのURLをBlob化して明示的に用途を示すことで、
ダウンロード以外の描画等の事が可能になります。
今回のサンプルプログラムを参考に、自身のシステムに組み込んでみてください。