【PHP】FPDIのPDF出力エラーに対応する方法
FPDI でPDF出力エラー
環境 : FPDI version 1.6.2(フリー版), qpdf version 10.6.3
PDFファイルに印字、帳票出力を行うためのPHPライブラリ FPDIで、出力実行時に以下のエラーが発生することがあります。
Fatal error: This document (pdf filepath) probably uses a compression technique which is not supported by the free parser shipped with FPDI. (See https://www.setasign.com/fpdi-pdf-parser for more details) filename: (execute filepath)
このエラーは対象のpdfファイルが圧縮形式になっていることが原因ですので、解消するためにはpdfファイルを非圧縮に戻す必要があります。
QPDF で圧縮を解除する
QPDFというLinuxのコマンドラインツールを使ってファイルを非圧縮形式にする方法を紹介します。
https://qpdf.sourceforge.io/
Dockerを使って、QPDFを利用できるようにします。
Dockerfile
FROM ubuntu
RUN apt-get update && apt-get install -y qpdf
ENV DEBCONF_NOWARNINGS=yes
イメージをビルドする
docker build -t qpdf-image .
(pdfファイルの存在するパスへ移動)
docker runでqpdfコマンドと圧縮解除のstream-data=uncompressオプションを実行する
(force-versionオプションでPDFのバージョンを指定できる)
docker run -v $PWD:/pdf qpdf-image qpdf --stream-data=uncompress --force-version=1.4 /pdf/before.pdf(元のpdfファイル) /pdf/after.pdf(作成する非圧縮pdfファイル)
コマンド実行後、非圧縮のpdfファイルが実行パス内に作成されていることを確認します。