Existe uma maneira de fazer FPDF / FPDI ou Zend_Pdf apoiar a análise de PDFs maiores que 1.4?
-
20-08-2019 - |
Pergunta
Eu estou tentando adicionar um PDF existente (criado de outra forma) para um PDF criado com FPDF usando FPDI. Parece para encontrar trabalho para a maioria dos PDFs, mas eu recebo o seguinte erro:
FPDF error: Unable to find xref table.
Depois de alguns testes, eu descobri que se eu usar uma versão em PDF 1.4 ou inferior (Acrobat v5 ou diminuir) parece funcionar. Olhando para o arquivo parece ser por causa de um formato PDF diferente.
Existe um em torno do trabalho ou solução para isso? Eu tenho provavelmente 10 000+ PDFs enviados por usuários, alguns dos novos trabalho, alguns deles não. Também é irritante que FPDI apenas morre em vez de causar algum tipo de erro ou até mesmo retornar false
A única solução que eu posso pensar agora é analisar a primeira linha do arquivo PDF para determinar a versão e só adicionar os que mais versões que vai funcionar.
Editar:
Eu também tentei isso em Zend_Pdf e teve o seguinte resultado, usando o arquivo de demonstração que vem com o 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
É impossível analisar PDFs maiores que 1.4?
Solução 4
Descobri que usando a versão comercial do FPDI PDF-Parser resolveu o meu problema. Eu tenho usado por um ano agora e não tive quaisquer PDFs que coul parse (a menos que o PDF foi corrompido ou tinha outra coisa estranha acontecendo).
Outras dicas
Você pode usar FPDI com TCPDF, que irá gerar e ler (com FPDI) versão 1.7 PDFs.
Editar
I foram recentemente desafiados com a questão do uso várias versões e formatos de PDF com FPDI e TCPDF, e posso confirmar que as versões PDF acima de 1,4 são errática, o interessante é que eu tenho um monte de trabalho 1.7 PDFs e trabalhos sobre 50/50 em 1.5 e 1.6.
Eu trabalhei em torno da questão, convertendo todos os arquivos PDF não-viáveis ??para v1.4 usando GhostScript que você pode exec
a partir da linha de comando. Use ps2pdf14
da pasta lib
GhostScript.
Acabei de lançar um par de projectos ( TCPDI / tcpdi_parser , com base em FPDI e tcpdf_parser, respectivamente) que funcionam com TCPDF 6 (e FPDF_TPL) para PDF importação acima v1.4 (testado até 1,6 até agora, mas eu vou ter certeza que funciona com 1.7 uma vez que eu encontrar um PFD 1,7 a testá-lo com!), sem necessidade de complementos comerciais. instruções de instalação e uso básico pode ser encontrada no TCPDI README ; não hesite em experimentá-lo e relatar quaisquer problemas através do rastreador Github.
Setasign está oferecendo um analisador de PDF como um addon comercial para FPDI. Nós não tivemos problemas ao analisar arquivos PDF até a versão 1.7 até agora usando o novo analisador.
para symfony, eu usei essa lib para converter> 1.4 https://packagist.org/packages/xthiago/pdf-version-converter
Se você tem Acrobat escritor PDF, você pode manipular as configurações do trabalho para tornar o PDF estiver imprimindo / savingAs para ser compatível com PDF 1.4. Para a pequena razão que eu preciso este produto, não parece vale a pena os 100 euros para obter a versão comercial, que é compatível com as versões maior que 1,4.
minha equipe tinha removido alguma parte do código. paramos o código da adição de marca d'água para o pdf. isso resolveu o problema para nós. PDF> = 1,5