2009-03-18 12 views
13

Sto tentando di aggiungere un PDF esistente (creato diversamente) a un PDF creato con FPDF utilizzando FPDI. Sembra funzionare trovare per la maggior parte i PDF, ma ottengo il seguente errore:C'è un modo per rendere FPDF/FPDI o Zend_Pdf supportare l'analisi di PDF superiori a 1,4?

FPDF error: Unable to find xref table. 

Dopo qualche test, ho capito che se uso una versione PDF di 1.4 o inferiore (Acrobat v5 o inferiore) sembra lavoro. Guardando il file sembra essere a causa di un diverso formato PDF.

C'è una soluzione o una soluzione? Probabilmente ho caricato più di 10.000 PDF da parte degli utenti, alcuni dei nuovi funzionano, altri no. E 'anche fastidioso che FPDI muoia, invece di causare qualche tipo di errore o addirittura restituire false

L'unica soluzione che posso pensare adesso è analizzare la prima riga del file PDF per determinare la versione e aggiungere solo quelli su quelle versioni che funzioneranno.

Edit:

Ho anche provato questo in Zend_Pdf e aveva il seguente risultato, utilizzando il file demo che viene fornito con Zend Framework:

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 

È impossibile analizzare i file PDF maggiore di 1,4?

risposta

4

Ho trovato che utilizzando la versione commerciale di FPDI PDF-Parser ho risolto il mio problema. L'ho usato per un anno e non ho avuto alcun PDF che non è stato in grado di analizzare (a meno che il PDF non fosse corrotto o avesse qualcosa di strano in corso).

+0

Puoi condividere con noi come hai lavorato con questo componente aggiuntivo? Perché non ho idea di come usarlo. Ive ha installato il file, non è sicuro di come usarlo. Sto usando il seguente PDFmerger https://github.com/myokyawhtun/PDFMerger/blob/master/PDFMerger.php#L78 –

18

È possibile utilizzare FPDI con TCPDF, genererà e leggerà (con FPDI) versione 1.7 PDF.

Vedere TCPDF - PHP class for PDF.


EDIT

Sono stato di recente messo in discussione la questione di utilizzo di varie versioni e formati di file PDF con FPDI e TCPDF, e posso confermare che le versioni PDF sopra 1.4 sono incostante, il la cosa interessante è che ho un sacco di lavoro 1.7 PDF e lavora su 50/50 su 1.5 e 1.6.

Ho risolto il problema convertendo tutti i file PDF non lavorabili in v1.4 utilizzando GhostScript, che è possibile utilizzare exec dalla riga di comando. Utilizzare ps2pdf14 dalla cartella GhostScript lib.

+0

non mi sarei aspettato il comando 'ps2pdf14' a lavorare con i PDF come input ma ha funzionato come un fascino. – jeteon

4

Setasign offre un parser PDF come commercial addon a FPDI. Non abbiamo avuto problemi ad analizzare i file PDF fino alla versione 1.7 finora utilizzando il nuovo parser.

+0

Puoi condividere con noi come hai lavorato con questo componente aggiuntivo? Perché non ho idea di come usarlo. Ive ha installato il file, non è sicuro di come usarlo. Sto usando il seguente PDFmerger github.com/myokyawhtun/PDFMerger/blob/master/PDFMerger.php#L 78 –

-1

la mia squadra aveva rimosso parte del codice. abbiamo interrotto il codice aggiungendo filigrana al pdf. questo ha risolto il problema per noi. PDF> = 1,5

6

Ho appena rilasciato un paio di progetti (TCPDI/tcpdi_parser, sulla base di FPDI e tcpdf_parser, rispettivamente) che lavorano con TCPDF 6 (e FPDF_TPL) per importare file PDF sopra v1.4 (testato fino a 1.6 finora, ma mi assicurerò che funzioni con 1.7 una volta che trovo un 1.7 PFD per testarlo!) Senza richiedere alcun add-on commerciale.Le istruzioni di installazione e utilizzo di base sono disponibili nel TCPDI README; non esitate a provarlo e segnalare eventuali problemi tramite il tracker Github.

+0

Ho appena provato, cercando di aggiungere testo a un PDF v.1.5 e non funziona. – greg

+0

@greg, se il PDF non è protetto da password, si prega di presentare un problema sul progetto pertinente (TCPDI o tcpdi_parser) con tutti i dettagli di ciò che si sta tentando di fare e che cosa è successo (cioè quali errori si ottiene) . Proverò a indagare, ma non posso fare promesse in termini di tempo. – NullColaShip

+0

Ok, fatto, grazie. – greg

1

Se si dispone di Acrobat PDF writer, è possibile modificare le impostazioni del lavoro per rendere il PDF che si sta stampando/salvando come compatibile con PDF 1.4. Per il piccolo motivo che ho bisogno di questo prodotto, non mi sembra valga la pena di 100 euro per ottenere la versione commerciale compatibile con versioni superiori a 1.4.

3

per symfony, ho usato questo lib per convertire> 1.4 https://packagist.org/packages/xthiago/pdf-version-converter

+1

Sai ... penso di aver implementato qualcosa del genere a un certo punto per affrontare un altro problema. Ho appena chiamato ghostscript direttamente nel mio caso, ma questo potrebbe rendere la vita un po 'più semplice. –

+1

Sono l'autore di 'xthiago/pdf-version-converter'. La libreria può essere utilizzata in qualsiasi progetto PHP - non richiede l'uso di Symfony Framework (Full Stack). La libreria utilizza internamente due componenti di Symfony (processo e filesystem), ma il compositore si prende cura di esso. Ti raccomando l'uso della libreria perché ha unità test (PHPUnit) ed è open-source - puoi beneficiare di correzioni di bug e miglioramenti apportati dalla community. –

Problemi correlati