はじめに
PDF内のQRコードをサーバーサイドで読み取りたいと思い、なんだかんだと調べて簡単な実装は出来たのですが、商用利用は難しそうだということで業務に使えなかった方法をここに載せます。
1. 環境
- Windows10 64bit
- xampp
- PHP8.1
2. 使用したライブラリ
ライブラリ名 | version | ライセンス | ざっくりした概要 |
---|---|---|---|
endroid/qrCode | 4.4.8 | MIT | QRコードの読み取りを行うことが出来る |
Imagemagick | 7.1.0 | GPL互換の独自ライセンス | 画像操作することが出来る |
Ghostscript | 9.56.1 | AGPLか商用のデュアルライセンス | PDFを読み取って画像に変換したりできる |
3.実装
index.php
<?php
require __DIR__ . "/vendor/autoload.php";
use Zxing\QrReader;
/*白紙のページ+QRのPDFの読み取り*/
//2Pを指定する
//ページ指定をしたくないときは[]を付けなければOK
$pdf = __DIR__.'/test.pdf[1]';
$text="";//初期値
$image = new imagick($pdf);
$qrcode = new QrReader($image, QrReader::SOURCE_TYPE_RESOURCE);
$text = $qrcode->text();
echo "pdfファイルのQRコード読み取り結果<br>";
print $text;
$image->clear();
4.結果
上記を実行すると、無事PDF内のQRコードの内容を読みとることが出来ました!
しかし、Imagemagickが使用しているGhostscriptはAGPLと商用のデュアルライセンスです。
5.AGPLって?
使うならソースを全公開しろ!!!というライセンスです。詳しくは調べてね!
6.結論
Ghostscript、何とかして利用できないかと調べていたのですが結局下記理由で断念しました。
- AGPL版:利用してソース全公開は要件的に難しい
- 商用ライセンス版:ネット上には参考料金がない
- 英語でコミュニケーションを取る必要があり時間的に厳しい
その他
いろいろPHP関連のPDF→画像化するライブラリを見てみましたが、中身を見るとImageMagickを使用している(=Ghostscriptが無いとiMagickにPDF渡すとエラーが発生する)というものが結構ありました。
うっかりライセンス違反をしないよう気を付けよう!