PDF.jsの簡単な使い方、pdf全ページを縦一列に一覧表示する方法
更新日:
ルナリス
pdfを全ページ縦並びに表示するプログラムが検索しても全然出てこないわ
簡単そうなのにないんだね…
ソルト
ルナリス
というわけでPDF.jsを使って実装したわ
目的
javascriptでpdfを縦に全ページ表示したいと考え、今回プログラムを作成しました。
このプログラムを使用することで、HTML上に画像としてPDFを表示することができます。
それにより、新規ウィンドウでの表示やダウンロードの必要なく、PDFを公開できます。
WebサイトにPDFを多く掲載している、PDFを表示するサイトを作成したいといった方におすすめです。
準備
公式サイトより、downloadボタンから「pdf.js」をダウンロードします。
PDF.js公式
DL後、解凍をしてフォルダ名をpdfjs-distに変更します。(解凍したフォルダは全て使用します)
今回は例として「/common/js/」に「pdfjs-dist」を設置します。
PDFを表示するプログラム例
<div id="pdfjs_view"></div> <style> #pdfjs_view canvas{ width: 100%; display: block; } </style> <!-- pdf.jsのURL --> <script src="/common/js/pdfjs-dist/build/pdf.js"></script> <script> //ここにPDFのURL var url = "XXXXXXXXXXXXX.pdf"; var pdfjsLib = window['pdfjs-dist/build/pdf']; // pdf.worker.js のURL pdfjsLib.GlobalWorkerOptions.workerSrc = "/common/js/pdfjs-dist/build/pdf.worker.js"; var loadingTask = pdfjsLib.getDocument(url); var pdfjs_target = document.getElementById('pdfjs_view'); var page_w = 1000; var scale = 1; loadingTask.promise.then( function (pdf) { for( var i=1; i<=pdf._pdfInfo.numPages; i++ ){ pdf.getPage(i).then(function (page) { //横幅を1000pxに調整 page_w = page._pageInfo.view[2]; scale = 1000 / page_w; var viewport = page.getViewport({ scale: scale }); var canvas = document.createElement("canvas"); var context = canvas.getContext("2d"); canvas.width = viewport.width; canvas.height = viewport.height; var renderContext = { canvasContext: context, viewport: viewport, }; pdfjs_target.appendChild(canvas); page.render(renderContext); }); } } ); </script>
プログラムの解説
- 1. canvasを作成
- 2. canvasにpdfを1ページ描画
- 3. canvasをdiv#pdfjs_viewに代入
- 4. 上記の処理をページの分だけ繰り返す
プログラムによるPDFの表示例
今回紹介したプログラムを使った時のPDF表示例となります。
PDFの全ページが縦に並んで表示されると成功です。
※表示例では2ページのPDFとなります。
・表示例
まとめ
今回はPDFを全ページ縦一覧に表示するプログラムを紹介しました。1ページ1ページをcanvasで描画するといった方法で実装しましたが、手軽にPDFを表示出来るので使いやすいと思います。
PDFを多様するWebサイトにはおすすめとなります。
しかしPDFを全ページ分処理するため、PDFのページ数が多いと処理が重たくなる可能性がある点は注意して下さい。
ルナリス
結構無理やり実装したけど他に良い方法があったら教えて頂戴
コメント一覧
上のコードを使用し新規タブにPDF表示するにはどうすればよいのでしょうか?
新規タブを作成するaタグに、pdfを表示させるだけのhtmlをリンクさせるのはいかがでしょうか?
1. aタグにtarget="_blank"をつけたボタンを作成
2. pdfを表示するだけのhtmlをリンクさせる