3) FPDI2 사용시 오류발생 (pdf 버전 다운그레이드)
다음과 같은 오류가 발생 한다면 PDF의 버전 문제 입니다.
[root@pabburi /phptest] ./php_write_test.php
Fatal error: Uncaught setasign\Fpdi\PdfParser\CrossReference\CrossReferenceException: This PDF document 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) in /phptest/FPDI-2.3.6/src/PdfParser/CrossReference/CrossReference.php:257
Stack trace:
#0 /phptest/FPDI-2.3.6/src/PdfParser/CrossReference/CrossReference.php(209): setasign\Fpdi\PdfParser\CrossReference\CrossReference->initReaderInstance(Object(setasign\Fpdi\PdfParser\Type\PdfIndirectObject))
#1 /phptest/FPDI-2.3.6/src/PdfParser/CrossReference/CrossReference.php(67): setasign\Fpdi\PdfParser\CrossReference\CrossReference->readXref(16700)
#2 /phptest/FPDI-2.3.6/src/PdfParser/PdfParser.php(157): setasign\Fpdi\PdfParser\CrossReference\CrossReference->__construct(Object(setasign\Fpdi\PdfParser\PdfParser), 0)
#3 /phptest/FPDI-2.3.6/src/PdfParser/PdfParser.php(205): setasign\Fpdi\PdfParser\PdfParser->getCrossReference()
#4 /phptest/FPDI-2.3.6/src/PdfParser/PdfParser in /phptest/FPDI-2.3.6/src/PdfParser/CrossReference/CrossReference.php on line 257
다음 명령으로 버전을 1.4로 다운그레이드 시켜 주면 사용이 가능합니다.
ghostscript -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dNOPAUSE -dQUIET -dBATCH -sOutputFile=test-14.pdf test_16.pdf
이렇게 다운그레이드 시키는것이 일부 파일에선 20초 정도 걸릴 정도로 느린 경우가 있고 또한 제대로 변환이 안되는 경우가 있습니다.
그래서 실무에서 사용하기 곤란 합니다.
nodejs를 이용하면 아래를 사용가능한데 테스트 사이트에 있는 테스트 문서가 pdf 1.7 인데 문제 없이 잘 됩니다.
https://pdf-lib.js.org/#examples
** 참고사항 **
특정한 용도로 만들어져 문제가 없는 문서들만 있을 수도 있겠지만 다운그레이드 간혹 잘 안되는 문서들이 있습니다.
그렇기 때문에 pdf 버전이 1.4 초과되어 php에 처리하기 곤란한 문제가 있다면 nodejs 라이브러리를 활용해 보는것도 괜찮아 보입니다.
높은 버전의 pdf도 잘 처리 합니다. 단 제가 많이 사용해 보지 않아서 정확하게 괜찮다고 말 할 수 있는 현항은 아니지만 큰 문제는 없어 보입니다
PDF-LIB · Create and modify PDF documents in any JavaScript environment.
