C'è un modo per fare in modo che FPDF / FPDI o Zend_Pdf supportino l'analisi di PDF maggiore di 1.4?

StackOverflow https://stackoverflow.com/questions/660425

Domanda

Sto cercando di aggiungere un PDF esistente (creato diversamente) a un PDF creato con FPDF utilizzando FPDI. Sembra funzionare per la maggior parte dei PDF, ma viene visualizzato il seguente errore:

FPDF error: Unable to find xref table.

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

Esiste una soluzione o una soluzione a questo? Probabilmente ho caricato oltre 10 000 PDF dagli utenti, alcuni dei nuovi funzionanti, altri no. È anche fastidioso che FPDI muoia invece di causare qualche tipo di errore o persino di restituire false

L'unica soluzione a cui riesco a pensare in questo momento è analizzare la prima riga del file PDF per determinare la versione e aggiungere solo quelle che sopra le versioni che funzioneranno.

Modifica

Ho anche provato questo in Zend_Pdf e ha avuto il seguente risultato, usando il file demo 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 PDF maggiori di 1,4?

È stato utile?

Soluzione 4

Ho scoperto che l'utilizzo della versione commerciale di FPDI PDF-Parser risolto il mio problema. Lo uso da un anno ormai e non ho avuto alcun PDF che non potesse analizzare (a meno che il PDF non fosse corrotto o avesse qualcosa di strano in corso).

Altri suggerimenti

Puoi usare FPDI con TCPDF, genererà e leggerà (con FPDI) PDF versione 1.7.

Vedi TCPDF - Classe PHP per PDF .


Modifica

Di recente sono stato sfidato a utilizzare varie versioni e formati di PDF con FPDI e TCPDF e posso confermare che le versioni PDF sopra 1.4 sono incostante, la cosa interessante è che ho molto lavoro 1.7 PDF e funziona circa 50/50 su 1.5 e 1.6.

Ho risolto il problema convertendo tutti i file PDF non lavorabili in v1.4 usando GhostScript che puoi exec dalla riga di comando. Usa ps2pdf14 dalla cartella GhostScript lib.

Ho appena pubblicato un paio di progetti ( TCPDI / tcpdi_parser , basati rispettivamente su FPDI e tcpdf_parser) che funzionano con TCPDF 6 (e FPDF_TPL) per importare PDF sopra v1.4 (testato fino a 1.6 finora, ma mi assicurerò che funzioni con 1.7 una volta trovato un PFD 1.7 con cui testarlo!) senza richiedere componenti aggiuntivi commerciali. Le istruzioni di base per l'installazione e l'uso sono disponibili nel README TCPDI ; non esitate a provarlo e segnalare eventuali problemi tramite il tracker Github.

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

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

Se si dispone di Acrobat PDF Writer, è possibile manipolare le impostazioni del lavoro per rendere il PDF che si sta stampando / salvando Come compatibile con PDF 1.4. Per la piccola ragione per cui ho bisogno di questo prodotto, non sembra valere i 100 euro per ottenere la versione commerciale compatibile con le versioni successive alla 1.4.

il mio team aveva rimosso parte del codice. abbiamo impedito al codice di aggiungere filigrana al pdf. questo ha risolto il problema per noi. PDF & Gt; = 1.5

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top