PDFから任意のページを切り出して、単一ファイルとしてユーザーに保存させたいときに。
Laravelで実行する場合は、最初のrequire_once()が不要。
環境
- Windows 10
- PHP 7.3
FPDIのインストール
composer.jsonに以下を追記して、composer updateを実行。
composer.json
{
"require": {
"setasign/fpdf": "1.8.*",
"setasign/fpdi": "^2.3"
}
}
プログラム
PDFから1ページ目と2ページ目だけを切り出して、1つのファイルとしてダウンロードする。
Pdf.php
require_once('vendor/autoload.php');
use setasign\Fpdi\Fpdi;
$pdf = new Fpdi();
$pdf->setSourceFile('target.pdf');
$pdf->AddPage();
$tplId = $pdf->importPage(1);
$pdf->useTemplate($tplId);
$pdf->AddPage();
$tplId = $pdf->importPage(2);
$pdf->useTemplate($tplId, 0, 0, null, null, true);
$pdf->Output('D', 'result.pdf', true);
useTemplate()の6つ目の引数でページサイズ調整に対応。
Output()の3つ目の引数で日本語のファイル名に対応。
PDFのバージョン1.5以上のときにエラーが起きる対策
バージョン1.5以上のPDFはエラーが起きるので、QPDFを使って、対象のPDFを事前に変換しておく。
WindowsにQPDFをダウンロードして、コマンドプロンプトでbinフォルダに移動。
PDFのバージョンを1.4に変更。
qpdf --force-version=1.4 input.pdf output.pdf
もし上記コマンドで変換したPDFでエラーが出たら、バージョン1.4に変更+圧縮を解く。
qpdf --stream-data=uncompress --force-version=1.4 input.pdf output.pdf
参考