【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ファイルが実行パス内に作成されていることを確認します。

Follow me!