FPDF/FPDI 또는 ZEND_PDF를 1.4보다 큰 PDF의 구문 분석을 지원하는 방법이 있습니까?
-
20-08-2019 - |
문제
FPDI를 사용하여 FPDF로 생성 된 PDF에 기존 PDF (그렇지 않으면 생성)를 추가하려고합니다. 대부분의 PDF에 대해서는 작동하는 것처럼 보이지만 다음과 같은 오류가 발생합니다.
FPDF error: Unable to find xref table.
약간의 테스트 후, PDF 버전의 1.4 이하 (Acrobat v5 이하)를 사용하면 작동하는 것 같습니다. 파일을 보면 PDF 형식이 다른 것 같습니다.
이에 대한 작업이나 해결책이 있습니까? 아마도 10,000 명 이상의 PDF가 사용자가 업로드했으며 일부는 새로운 작업 중 일부는 그렇지 않습니다. FPDI가 어떤 종류의 오류를 일으키지 않고 거짓을 반환하는 대신 죽는 것이 성가신 일입니다.
내가 지금 생각할 수있는 유일한 솔루션은 PDF 파일의 첫 번째 줄을 구문 분석하여 버전을 결정하고 작동하는 버전을 초과하는 버전 만 추가하는 것입니다.
편집하다:
또한 zend_pdf에서 이것을 시도했으며 Zend 프레임 워크와 함께 제공되는 데모 파일을 사용하여 다음과 같은 결과를 얻었습니다.
Fatal error: Uncaught exception 'Zend_Pdf_Exception' with message 'Cross-reference streams are not supported yet.' in /Volumes/Documents/temp/ZendFramework-1.7.7/library/Zend/Pdf/Parser.php:331
Stack trace:
#0 /Volumes/Documents/temp/ZendFramework-1.7.7/library/Zend/Pdf/Parser.php(455): Zend_Pdf_Parser->_loadXRefTable('116')
#1 /Volumes/Documents/temp/ZendFramework-1.7.7/library/Zend/Pdf.php(297): Zend_Pdf_Parser->__construct('/Volumes/Docume...', Object(Zend_Pdf_ElementFactory_Proxy), true)
#2 /Volumes/Documents/temp/ZendFramework-1.7.7/library/Zend/Pdf.php(250): Zend_Pdf->__construct('/Volumes/Docume...', NULL, true)
#3 /Volumes/Documents/temp/ZendFramework-1.7.7/demos/Zend/Pdf/demo.php(37): Zend_Pdf::load('/Volumes/Docume...')
#4 {main}
thrown in /Volumes/Documents/temp/ZendFramework-1.7.7/library/Zend/Pdf/Parser.php on line 331
1.4보다 큰 PDF를 구문 분석하는 것이 불가능합니까?
해결책 4
나는 상거래 버전을 사용하는 것을 발견했습니다 FPDI PDF-PARSER 내 문제를 해결했습니다. 나는 1 년 동안 그것을 사용해 왔으며 PDF가 없었습니다.
다른 팁
TCPDF와 함께 FPDI를 사용할 수 있으며 (FPDI 포함) 버전 1.7 PDF를 생성하고 읽습니다.
편집하다
최근에 FPDI 및 TCPDF와 함께 다양한 버전과 PDF 형식을 사용하는 문제에 도전했으며 1.4 이상의 PDF 버전이 히트 앤 미스임을 확인할 수 있습니다. 흥미로운 점은 1.7 PDF를 많이 사용하고 있으며, 1.7 PDF, 그리고 많은 일이 있다는 것입니다. 1.5 및 1.6에서 약 50/50 작동합니다.
나는 당신이 할 수있는 GhostScript를 사용하여 모든 비 작업 할 수없는 PDF 파일을 v1.4로 변환 하여이 문제를 해결했습니다. exec
명령 줄에서. 사용 ps2pdf14
고스트 스크립트에서 lib
폴더.
방금 한 쌍의 프로젝트를 발표했습니다 (TCPDI / tcpdi_parser, TCPDF 6 (및 FPDF_TPL)에서 작동하여 V1.4 이상의 PDF를 가져 오기 위해 FPDI 및 TCPDF_PARSER를 각각 기반으로합니다. 상업용 애드온이 필요하지 않고 테스트하십시오!). 기본 설치 및 사용 지침은 tcpdi readme; 자유롭게 시도하고 GitHub 트래커를 통해 모든 문제를보고하십시오.
SetAsign은 PDF 파서를 a로 제공합니다 상업 애드온 FPDI에. 우리는 새 파서를 사용하여 지금까지 버전 1.7까지 PDF 파일을 구문 분석하는 데 어려움이 없었습니다.
Symfony의 경우이 lib를 사용하여> 1.4를 변환했습니다.https://packagist.org/packages/xthiago/pdf-version-converter
Acrobat PDF Writer가있는 경우 작업 설정을 조작하여 PDF를 PDF로 만들 수 있습니다. PDF 1.4와 호환됩니다. 이 제품이 필요한 작은 이유에서는 1.4보다 큰 버전과 호환되는 상용 버전을 얻는 것이 100 유로의 가치가없는 것 같습니다.
우리 팀은 코드의 일부를 제거했습니다. 코드가 PDF에 워터 마크를 추가하는 것을 중지했습니다. 이것은 우리에게 문제를 해결했습니다. pdf> = 1.5