2009-03-18 1 views
13

FPDI를 사용하여 FPDF로 만든 PDF에 기존 PDF (다른 방법으로 생성)를 추가하려고합니다. 대부분의 PDF 파일에 대해 찾을 작동하는 것 같다,하지만 난 다음 오류 얻을 : 몇 가지 테스트 후FPDF/FPDI 또는 Zend_Pdf가 1.4보다 큰 PDF 구문 분석을 지원하도록 만드는 방법이 있습니까?

FPDF error: Unable to find xref table. 

을, 나는 1.4 이하 (아크로뱃 V5 이하)의 PDF 버전을 사용하는 경우가 보인다 파악 작업. 파일을 보면 다른 PDF 형식으로 보이는 것 같습니다.

해결 방법이 있습니까? 나는 아마도 10 000 + 사용자가 업로드 한 PDF, 새로운 작업 중 일부는 아니지만 그들 중 일부는 업로드했습니다. 심지어 FPDI가 어떤 종류의 오류를 일으키지 않거나 거짓을 반환하는 대신에 그냥 죽는다고 짜증나기도합니다.

제가 생각할 수있는 유일한 해결책은 PDF 파일의 첫 번째 행을 구문 분석하여 버전을 판별하고 그 중 하나만 추가하는 것입니다 그 이상 버전이 작동합니다.

편집 : 나는 또한 Zend_Pdf이 시도하고 젠드 프레임 워크와 함께 제공되는 데모 파일을 사용하여 다음과 같은 결과가 있었다

:

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 

는 PDF 파일이 큰 구문 분석하는 것은 불가능을 1.4보다?

답변

4

FPDI PDF-Parser의 상용 버전을 사용하면 문제가 해결 된 것으로 나타났습니다. 나는 1 년 동안 그것을 사용해 왔으며 PDF가 파싱되지 않았다면 (PDF가 손상되거나 다른 이상한 일이 발생하지 않는 한) PDF를 파싱 할 수 없었습니다.

+0

를 사용하고 계십니까? 나는 그것을 사용하는 방법에 대한 단서가 없기 때문에. 파일을 설치했는데 사용 방법을 모르겠습니다. 임 사용하여 난 그냥 PDF v.1.5에 텍스트를 추가하는 노력을 시도하고 작동하지 않는 PDFmerger https://github.com/myokyawhtun/PDFMerger/blob/master/PDFMerger.php#L78 –

18

TCPDF와 함께 FPDI를 사용할 수 있으며 FPDI 버전 1.7 PDF를 생성하고 읽습니다.

TCPDF - PHP class for PDF을 참조하십시오.


편집

1.4 명중 위에 나는 최근 다양한 버전과 FPDI와 TCPDF와 PDF의 형식을 사용하여 문제와 도전을 받고 있고, 내가 그 PDF 버전을 확인할 수와 미스는 흥미로운 점은 필자는 1.7 개의 PDF 작업을 많이하고 1.5 및 1.6에서 50/50 정도 작업한다는 것입니다.

나는 실행할 수없는 모든 PDF 파일을 GhostScript를 사용하여 v1.4로 변환하여 작업했다. GhostScript는 명령 줄에서 exec이 될 수있다. GhostScript lib 폴더의 ps2pdf14을 사용하십시오.

+0

변환하려면이 lib 디렉토리를 사용하지만, 그것이 마치 마법처럼 일했다. – jeteon

4

Setasign은 PDF 파서를 FPDI에 commercial addon으로 제공합니다. 지금까지 새로운 파서를 사용하여 PDF 파일을 1.7 버전까지 파싱하는 데 문제가 없었습니다.

+0

이 부가 기능을 사용하는 방법을 알려 주실 수 있습니까? 나는 그것을 사용하는 방법에 대한 단서가 없기 때문에. 파일을 설치했는데 사용 방법을 모르겠습니다. 임이 부가 기능으로 어떻게 작동하는지 당신이 우리와 함께 공유하시기 바랍니다 수있는 다음과 같은 PDFmerger github.com/myokyawhtun/PDFMerger/blob/master/PDFMerger.php#L 78 –

-1

저희 팀이 일부 코드를 삭제했습니다. 우리는 pdf에 워터 마크를 추가하는 코드를 중단했습니다. 이것은 우리를 위해 문제를 해결했습니다. PDF> = 1.5

6

방금 ​​TCPDF 6 (및 FPDF_TPL)과 함께 v1.4 이상의 PDF를 가져 오는 한 쌍의 프로젝트 (각각 TCPDI/tcpdi_parser, FPDI 및 tcpdf_parser 기준)를 발표했습니다. 지금까지는 1.6이지만 1.7으로 PFD를 테스트 한 후에 1.7으로 작동하는지 확인하겠다!).기본 설치 및 사용 지침은 TCPDI README에서 찾을 수 있습니다. 언제든지 Github 추적기를 통해 문제를보고 해보고 사용해보십시오.

+0

다음과 같습니다. 당신의 PDF가 비밀번호로 보호되지 않는 경우 – greg

+0

@greg는 전체 당신이 뭘 하려는지의 세부 사항과 무슨 일이 (즉, 어떤 오류 (들) 당신이 얻을)와 관련 프로젝트 (TCPDI 또는 tcpdi_parser)에 문제를 제기하시기 바랍니다 . 나는 조사하려고 노력할 것이지만 시간 약속을 지킬 수는 없다. – NullColaShip

+0

좋아요, 끝났습니다, 고마워요. – greg

1

는 아크로뱃 PDF 작가가 있다면, 당신은 당신이 PDF 1.4에 호환되도록/savingAs를 인쇄 할 PDF를 만들기 위해 작업 설정을 조작 할 수 있습니다. 나는이 제품을 필요로하는 작은 이유로, 1.4 이상 버전에 호환되는 상용 버전을 얻기 위해 100 유로 가치가 보이지 않는다.

3

심포니, 나는 내가 입력으로 PDF와 함께 작동하도록 명령`ps2pdf14`을 예상하지 않았을> 1.4 https://packagist.org/packages/xthiago/pdf-version-converter

+1

알다시피 ... 나는 다른 문제를 다루기 위해 실제로 이런 점을 한 순간에 구현했다고 생각합니다. 필자의 경우에는 고스트 스크립트 (ghostscript)를 직접 호출하기 만합니다. 그러나 이것은 삶을 좀 더 쉽게 만들어 줄 수 있습니다. –

+1

저는'xthiago/pdf-version-converter'의 저자입니다. 라이브러리는 모든 PHP 프로젝트에서 사용할 수 있습니다 - Symfony Framework (Full Stack)을 사용할 필요가 없습니다. 라이브러리는 Symfony (프로세스와 파일 시스템)의 두 가지 구성 요소를 내부적으로 사용하지만, 작곡가는 그것에주의를 기울입니다. 이 단위 테스트 (phpunit을)가 오픈 소스이기 때문에 나는 당신에게 라이브러리의 사용을 권장합니다 - 당신은 사회에 의해 만들어진 버그 수정 및 기능 향상의 혜택을 누릴 수 있습니다. –

관련 문제