Memo

メモ > 技術 > 開発: Web > PDF

PDF
■PDFとは 僕「PDFとは何か知りたい」 - Qiita https://qiita.com/zawawahoge/items/4312649f8d56f8983ffb プログラマーから見たPDFファイル - アンテナハウス PDF資料室 https://www.antenna.co.jp/pdf/reference/pdftext.html PDFってこうなってる? 実践でPDFの内部構造を学ぼう Part 1:PDFを理解するための第一歩 - 株式会社インターワーク https://www.intwk.co.jp/2024/03/26/%E5%AE%9F%E8%B7%B5%E3%81%A7pdf%E3%81%AE%E5%86%85%E9%83%A8%E6%A7%8... PDF に謎の漢字が含まれるとき https://gist.github.com/xl1/940d653451fd96a06618a6df08d5df84 ■PDFの作成(ソフトウェア) Adobe Acrobat 9 Pro をダウンロード https://helpx.adobe.com/jp/acrobat/kb/acrobat-8-9-product-downloads.html CS5のライセンスで認証。 未検証だが、以下のソフトもある。 無料 PDF 結合・分割ソフト CubePDF Page - CubeSoft https://www.cube-soft.jp/cubepdfpage/ 無料のPDF編集ソフト「CubePDF Utility」、v3.0.0に - 窓の杜 https://forest.watch.impress.co.jp/docs/news/1581841.html ■PDFの作成(PDFの結合方法) ツールバーの「結合 → ファイルを単一のPDFに結合」をクリックする。 ドラッグ&ドロップでPDFを追加する。 必要に応じて順番を入れ替える。 「ファイルを結合」をクリックする。 ■PDFの作成(しおり付きPDFの作成方法) 結合済みファイルを開く。 しおりを設定する。 デフォルトでしおりを表示させる http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12105211992 ■PDFの表示 PDF.js - Home https://mozilla.github.io/pdf.js/ PDF.jsを使用してWebブラウザでPDFファイルを表示する | MESCIUS.devlog - メシウス株式会社 https://devlog.mescius.jp/javascript-pdf-viewer-pdfjs/ 「PDF.js」に任意コード実行の脆弱性 〜多くのWebサイト・アプリに影響 - 窓の杜 https://forest.watch.impress.co.jp/docs/news/1593338.html PDF.jsのページめくりアニメーション - 電脳情報局 https://www.omakase.net/blog/2021/09/pdfjs-page.html pdf.jsを使って日本語ファイルを表示する #JavaScript - Qiita https://qiita.com/ReiTsukikazu/items/2d6627b3987535526814 WebページにPDFを1ページだけ表示する場合、以下のようなコードで対応できる。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>PDF.js</title> <script src="https://cdnjs.cloudflare.com/ajax/libs/pdf.js/3.7.107/pdf.min.js"></script> <style> #pdf-container { width: 100%; height: 600px; border: 1px solid #000; overflow: auto; } canvas { display: block; margin: 0 auto; } </style> </head> <body> <h1>PDF.js</h1> <div id="pdf-container"> <canvas id="pdf-canvas"></canvas> </div> <script> const url = 'sample.pdf'; // 表示したいPDFファイルのURLを指定 const pdfjsLib = window['pdfjs-dist/build/pdf']; // PDFの設定 pdfjsLib.GlobalWorkerOptions.workerSrc = 'https://cdnjs.cloudflare.com/ajax/libs/pdf.js/3.7.107/pdf.worker.min.js'; // PDFを読み込んで表示 const loadingTask = pdfjsLib.getDocument(url); loadingTask.promise.then(function(pdf) { console.log('PDF loaded'); // 1ページ目を表示 pdf.getPage(1).then(function(page) { console.log('Page loaded'); const scale = 1.5; const viewport = page.getViewport({ scale: scale }); const canvas = document.getElementById('pdf-canvas'); const context = canvas.getContext('2d'); canvas.height = viewport.height; canvas.width = viewport.width; const renderContext = { canvasContext: context, viewport: viewport }; const renderTask = page.render(renderContext); renderTask.promise.then(function () { console.log('Page rendered'); }); }); }, function (reason) { console.error('Error loading PDF:', reason); }); </script> </body> </html>
ページの前後移動もできるようにする場合、以下のようなコードで対応できる。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>PDF.js</title> <script src="https://cdnjs.cloudflare.com/ajax/libs/pdf.js/3.7.107/pdf.min.js"></script> <style> #pdf-container { width: 100%; height: 600px; border: 1px solid #000; overflow: auto; } canvas { display: block; margin: 0 auto; } #navigation { margin-bottom: 10px; } </style> </head> <body> <h1>PDF.js</h1> <div id="navigation"> <button id="prev-page">前のページ</button> <button id="next-page">次のページ</button> <span>ページ: <span id="page-num"></span> / <span id="page-count"></span></span> </div> <div id="pdf-container"> <canvas id="pdf-canvas"></canvas> </div> <script> const url = 'sample.pdf'; // 表示したいPDFファイルのURLを指定 const pdfjsLib = window['pdfjs-dist/build/pdf']; // PDFの設定 let pdfDoc = null, pageNum = 1, pageRendering = false, pageNumPending = null, scale = 1.5, canvas = document.getElementById('pdf-canvas'), context = canvas.getContext('2d'); pdfjsLib.GlobalWorkerOptions.workerSrc = 'https://cdnjs.cloudflare.com/ajax/libs/pdf.js/3.7.107/pdf.worker.min.js'; // PDFを読み込み const loadingTask = pdfjsLib.getDocument(url); loadingTask.promise.then(function(pdf) { pdfDoc = pdf; document.getElementById('page-count').textContent = pdf.numPages; // 初期表示で1ページ目を描画 renderPage(pageNum); }); // ページをレンダリングする関数 function renderPage(num) { pageRendering = true; // ページを取得して描画 pdfDoc.getPage(num).then(function(page) { const viewport = page.getViewport({ scale: scale }); canvas.height = viewport.height; canvas.width = viewport.width; const renderContext = { canvasContext: context, viewport: viewport }; const renderTask = page.render(renderContext); // 描画完了後にページレンダリングを解除 renderTask.promise.then(function () { pageRendering = false; if (pageNumPending !== null) { renderPage(pageNumPending); pageNumPending = null; } }); }); // 現在のページ番号を表示 document.getElementById('page-num').textContent = num; } // 前後のページをキューに追加する関数 function queueRenderPage(num) { if (pageRendering) { pageNumPending = num; } else { renderPage(num); } } // 前のページを表示 document.getElementById('prev-page').addEventListener('click', function() { if (pageNum <= 1) { return; } pageNum--; queueRenderPage(pageNum); }); // 次のページを表示 document.getElementById('next-page').addEventListener('click', function() { if (pageNum >= pdfDoc.numPages) { return; } pageNum++; queueRenderPage(pageNum); }); </script> </body> </html>
■PDFとPostScript PostScript - Wikipedia https://ja.wikipedia.org/wiki/PostScript PostScriptはAdobeが開発した文章記述言語。 ベクトルベースで高繊細な描画が可能。 以下のとおりプログラミング言語としての特性を持ち、チューリング完全となっている。 ・条件分岐。(if, ifelse) ・ループ。(for, repeat, loop) ・再帰的な関数定義が可能。 ・スタック操作を通じたデータ操作。 Portable Document Format - Wikipedia https://ja.wikipedia.org/wiki/Portable_Document_Format PDFはPostScriptをもとにAdobeが開発した文章フォーマット。 PostScriptの持つグラフィック能力やフォント処理能力を引き継いだうえで、表示面や操作面で改良が行なわれている。 またPDFは上に記載したプログラミング言語としての特性は削除されているので、安全性が向上している。 Ghostscript - Wikipedia https://ja.wikipedia.org/wiki/Ghostscript PostScriptを書くための環境 | Studio Fruit Jam Blog https://blog.studiofruitjam.com/2017/01/02/programing-env/ PostScript言語を触ってみる https://zenn.dev/kaityo256/articles/ghostscript_sample PDFを無料で圧縮できるオフライン方法!GhostscriptとPDFelementを解説 https://pdf.wondershare.jp/pdf-tips/pdf-compress-ghostscript.html ImageMagickとPHPを用いてPDFを画像変換する (GhostScript) | iret.media https://iret.media/10187 Ghostscriptをインストールすれば、コマンドでPostScriptやPDFを扱うことができる。

Advertisement