PHP FPDI + FPDF でPDFファイルを分割する
タイトルの通りです。お仕事で使ったので、備忘録。
青空文庫から人間失格ー太宰治のPDFを取得し、テストデータとした。
PDFから、最初の3ページ分を抜粋し、新しいPDFとして保存する。
今回使うのは、PHPのPDFの編集用ライブラリとして太古の昔から存在する、FPDIとFPDFである。
PHPで使えるPDFのライブラリはたくさんこと存在する。PDFlib、TCPDF、haru...
今回の選定ポイントは、古いPHP動くこと、その一点に尽きる。
PHP動くようにする(XAMPP、VSCode)
今回の記事も長くなりそうである。なぜなら、環境から作る必要があるから。
でも環境構築なら優れた記事はもうたくさんあるので丸投げして任せよう。
ここがいいんじゃないかな
Qiitaーisual Studio Code でPHPを開始するまでの手順
うむうむ。
ん~、開発用途に一つサーバー借りようかな。VSCodeをリモートで動かしたい。
さて次
FPDI と FPDF のダウンロード
Composerを使ったりとかするんだろうけど、今回はそんな大層なことはしないので愚直にクラスファイルをダウンロードして、htdocsに突っ込むことにする。
ダウンロード
フォルダ構成は以下
ソースコード
最小構成ならば、実に簡単にPDFのあれこれができてしまう。
<?php use setasign\Fpdi\Fpdi; require_once('fpdf/fpdf.php'); // はじめにFPDF require_once('fpdi/src/autoload.php'); // 次にFPDIの順で読み込むよ。 // PDFファイルを読み込む $pdf = new Fpdi(); $pageCount = $pdf->setSourceFile('NingenShikkaku.pdf'); for ($i = 1; $i <= $pageCount; $i++) { // カウントは1から!(ページ数に相当) if ($i <= 3) { $templateId = $pdf->importPage($i); // 該当ページをテンプレートとしてインポート $pdf->AddPage(); // 出力用のページを一つ追加 $pdf->useTemplate($templateId); // 出力用のページに、テンプレートを適用する } } $pdf->Output('result_3pages.pdf', 'F'); // ファイルとしてフォルダ内に書き出し echo("<h1>Finished.</h1>"); // おわり
動かす
用意したのは青空文庫の人間失格をPDF化したもの。47ページ。
ブラウザ。まあ見るまでもないわなw
生成ファイルは、"result_3pages.pdf"
生成されたファイルは3ページになっているが。。。おっと。
もとが横長のページだったが、それが反映されず、縦向きの文書として出力された結果である。
$pdf->useTemplate($templateId);
↓
$pdf->useTemplate($templateId, ['adjustPageSize' => true]);
とすればよい。
はいどうぞ
感想
師が「PHPはなんか、よくわからんが、何でもできるんだ。気軽にな。」と言っていた。
ようやく気持ちが分かってきた気がする。なんだかわからんが確かにできるんだなぁ。気軽になぁ。