Eu tenho um documento HTML (não XHTML) que renderiza bem no Firefox 3 e IE 7. Ele usa CSS bastante básico para estilizá-lo e renderiza bem no HTML.
Agora estou procurando uma maneira de convertê-lo em PDF. Eu tentei:
- DOMPDF : tinha enormes problemas com tabelas. Eu considerei minhas grandes tabelas aninhadas e isso ajudou (antes de consumir até 128 milhões de memória e depois morrer - esse é o meu limite de memória no php.ini), mas faz uma bagunça completa de tabelas e parece não ter imagens. As tabelas eram apenas coisas básicas com alguns estilos de borda para adicionar algumas linhas em vários pontos;
- HTML2PDF e HTML2PS : Na verdade, tive mais sorte com isso. Ele renderizou algumas das imagens (todas as imagens são URLs do Google Chart) e a formatação da tabela foi muito melhor, mas parecia ter algum problema de complexidade que ainda não descobri e continuei morrendo com erros desconhecidos de node_type (). Não tenho certeza para onde ir a partir daqui; e
- Htmldoc : isso parece funcionar bem em HTML básico, mas quase não tem suporte para CSS, então você precisa fazer tudo em HTML (eu não sabia que ainda era 2001 em Htmldoc-land ...), portanto, é inútil para mim.
Eu tentei um aplicativo do Windows chamado Html2Pdf Pilot que realmente fez um trabalho bastante decente, mas eu preciso de algo que seja no mínimo executado no Linux e, idealmente, executado sob demanda via PHP no servidor da Web.
O que estou perdendo ou como posso resolver esse problema?
@import
,@media
e@screen
regras, e irá carregar folhas de estilo externas. Ele também vem com tudo o necessário para que ele funcione, embora haja algumas coisas que você pode instalar para obter melhor desempenho do que as bibliotecas padrão. code.google.com/p/dompdfchrome --headless --print-to-pdf="path/to/pdf" https://your_url
como a ferramenta de geração de html para pdf mais rica, mais rápida e fácil crbug.com/603559 , pois suporta a maioria dos recursos de html que os desenvolvedores confiam no desenvolvimento da web e não são atraídos por scripts complexos, como a maioria dos outros. bibliotecas e ferramentas fazem.Respostas:
Importante: observe que esta resposta foi escrita em 2009 e pode não ser a solução mais econômica hoje em 2019. As alternativas online são melhores hoje do que eram na época.
Aqui estão alguns serviços online que você pode usar:
Dê uma olhada no PrinceXML .
Definitivamente, é o melhor conversor de HTML / CSS para PDF disponível no mercado, embora não seja gratuito (mas a sua programação também pode não ser gratuita, por isso, se você economizar 10 horas de trabalho, estará em casa (já que você também precisa leve em consideração que as soluções alternativas exigirão que você configure um servidor dedicado com o software certo)
Ah, sim, eu mencionei que esta é a primeira (e provavelmente apenas) solução HTML2PDF que oferece ACID2 completo ?
Amostras PrinceXML
fonte
Dê uma olhada
wkhtmltopdf
. É de código aberto, baseado no webkit e gratuito.Escrevemos um pequeno tutorial aqui .
EDIT (2017):
Se fosse para construir algo hoje, eu não seguiria mais esse caminho.
Mas usaria http://pdfkit.org/ .
Provavelmente retirando todas as dependências do nodejs, para rodar no navegador.
fonte
Após alguma investigação e puxar o cabelo em geral, a solução parece ser HTML2PDF . O DOMPDF fez um péssimo trabalho com tabelas, bordas e até layout moderadamente complexo e o htmldoc parece razoavelmente robusto, mas é quase completamente ignorante do CSS e não quero voltar a fazer o layout HTML sem o CSS apenas para esse programa.
O HTML2PDF parecia o mais promissor, mas eu continuava tendo esse erro estranho sobre argumentos de referência nulos para node_type. Finalmente encontrei a solução para isso. Basicamente, o PHP 5.1.x funcionou bem com substituições regex (preg_replace_ *) em strings de qualquer tamanho. O PHP 5.2.1 introduziu uma diretiva de configuração do php.ini chamada pcre.backtrack_limit . O que esse parâmetro de configuração faz é limitar o comprimento da string para a qual a correspondência é feita. Por que isso foi introduzido, eu não sei. O valor padrão foi escolhido como 100.000. Por que um valor tão baixo? Mais uma vez, não faço ideia.
Um bug foi levantado contra o PHP 5.2.1 para isso , que ainda está aberto quase dois anos depois .
O mais assustador disso é que, quando o limite é excedido, a substituição falha silenciosamente . Pelo menos, se um erro tivesse sido gerado e registrado, você teria alguma indicação do que aconteceu, por que e o que alterar para corrigi-lo. Mas não.
Então, eu tenho um arquivo HTML de 70k para transformar em PDF. Requer as seguintes configurações do php.ini:
Agora, o leitor astuto deve ter notado que meu arquivo HTML é menor que 100k. A única razão pela qual posso adivinhar o motivo pelo qual encontrei esse problema é que o html2pdf faz uma conversão em xhtml como parte do processo. Talvez isso tenha me dominado (embora quase 50% de inchaço pareça estranho). Seja qual for o caso, o acima funcionou.
Agora, o html2pdf é um recurso pesado. Meu arquivo de 70k leva aproximadamente 5 minutos e pelo menos 500-600M de RAM para criar um arquivo PDF de 35 páginas. Infelizmente, não é rápido o suficiente (de longe) para um download em tempo real e o uso da memória coloca a taxa de uso da memória na ordem de 1000 para 1 (600M de RAM para um arquivo de 70k), o que é totalmente ridículo.
Infelizmente, é o melhor que eu proponho.
fonte
Por que você não tenta mPDF versão 2.0 ? Usei-o para criar um documento em PDF. Funciona bem.
Enquanto isso, o mPDF está na versão 5.7 e é mantido ativamente, em contraste com o HTML2PS / HTML2PDF
Mas lembre-se de que a documentação pode ser realmente difícil de manusear. Por exemplo, dê uma olhada nesta página: https://mpdf.github.io/ .
Tarefas muito básicas em torno de html para pdf podem ser realizadas com esta biblioteca, mas tarefas mais complexas levarão algum tempo lendo e "compreendendo" a documentação.
fonte
mPDF error: IMAGE Error (http://www.example.com/folder/image.jpg): Error parsing image file - image type not recognised, and not supported by GD imagecreate
1) use MPDF !
a) extrair em
yourfolder
b) criar arquivo.php em
yourfolder
e inserção tal código:c) abra o arquivo.php no seu navegador
2) Use pdfToHtml !
1) extraia o pdftohtml.exe para a sua pasta raiz:
2) dentro dessa pasta, no arquivo anyfile.php , coloque este código (supondo que também exista uma fonte example.pdf):
3) entre no FinalFolder e haverá os arquivos convertidos (quantas páginas, como o PDF de origem tinha ..)
fonte
Caixa TCPDF . Possui algumas funcionalidades de HTML para PDF que podem ser suficientes para o que você precisa. Também é grátis!
fonte
Apenas para aumentar o encadeamento, tentei o DOMPDF e funcionou perfeitamente. Eu usei
DIV
e outros elementos de nível de bloco para posicionar tudo, mantive-o estritamente CSS 2.1 e jogou muito bem.fonte
Sugiro DocRaptor (que usa
PrinceXML
como o "mecanismo")fonte
Já foi mencionado, mas eu gostaria de confirmar que o mpdf é o conversor de HTML para pdf mais fácil, mais poderoso e mais gratuito do mercado. O céu é realmente o limite. Você pode até gerar PDF de dados dinâmicos gerados pelo usuário.
Por exemplo, um cliente queria um sistema CMS para poder atualizar o tracklist da música que tocava em seu clube. Isso não era problema, mas ele também queria que os usuários pudessem baixar um .pdf da lista de reprodução, e esse pdf para download também precisava ser atualizado pelo cms. Graças ao mpdf, com alguns loops simples e variáveis intercaladas, eu poderia fazer exatamente isso. Algo que eu pensei que levaria semanas literalmente me levou minutos.
Ótimo artigo que me ajudou a começar.
fonte
Boas notícias! Snappy !!
O Snappy é uma biblioteca PHP5 de código aberto muito fácil , permitindo a geração de miniaturas, instantâneos ou PDF a partir de uma página url ou html. E ... ele usa o excelente wkhtmltopdf baseado em webkit
Aproveitar! ^ _ ^
fonte
Bem, se você deseja encontrar uma biblioteca perfeita de conversor de XHTML + CSS para PDF, esqueça. Está longe de ser possível. Porque é como encontrar um navegador perfeito (mecanismo de renderização XHTML + CSS). Nós temos um? IE ou FF?
Eu tive algum sucesso com o DOMPDF. O problema é que você precisa modificar seu código HTML + CSS para acompanhar o funcionamento da biblioteca. Fora isso, tenho bons resultados.
Ver abaixo:
HTML original
Convertendo HTML para PDF
fonte
O HTML2PDF e o HTML2PS que foram mencionados originalmente no post de abertura estavam falando sobre um pacote de 2009 com este link
Mas há um HTML2PDF melhor
É baseado no TCPDF, embora parcialmente em francês.
Você pode ter cabeçalhos ou rodapés de tabelas que se repetem nas páginas e ter números de página e total de páginas. Veja seus exemplos . Uso-o há mais de três anos e recomendo-o.
fonte
Estou usando o fpdf para produzir arquivos PDF usando PHP. Até agora, está funcionando bem para mim produzir resultados simples.
fonte
Há um tutorial sobre o devzone do Zend sobre a geração de pdf a partir do php ( parte 1 , parte 2 ) sem bibliotecas externas. Eu nunca implementei esse tipo de solução, mas como tudo é php, você pode achar mais flexível implementar e depurar.
fonte
Tente pegar a versão mais recente do dompdf noturno - eu estava usando uma versão mais antiga que era um péssimo recurso e demorou uma eternidade para renderizar meu pdf. Depois de pegar uma noite a partir daqui .
Levou apenas alguns segundos para gerar o PDF - E foi tão bem renderizado quanto no PrinceXML / Docraptor . Parece que eles otimizaram seriamente o código dompdf desde a última vez que o usei!
fonte
A menção de Darryl Hein acima ao TCPDF é provavelmente uma ótima idéia. O código de Nicola Asuni é bastante útil e poderoso. O único assassino é que, se você planeja mesclar arquivos PDF com o PDF gerado, ele não possui esses recursos. Você precisaria criar o PDF e mesclá-lo usando algo como PDFTK de Sid Steward (www.pdflabs.com/tools/pdftk-the-pdf-toolkit/).
fonte
Em termos de custo, o uso de um serviço da Web (API) pode, em muitos casos, ser a abordagem mais sensata. Além disso, ao terceirizar esse processo, você libera sua própria infraestrutura / back-end e, desde que esteja usando um serviço respeitável, garante compatibilidade com o ajuste de padrões da web, tempo de atividade, tempos curtos de processamento e entrega rápida de conteúdo.
Eu fiz algumas pesquisas na maioria dos serviços da Web atualmente no mercado. Encontre abaixo as APIs que eu acho que vale a pena mencionar neste segmento, em um pedido com base na relação preço / valor. Todos eles estão oferecendo classes e pacotes PHP pré-compostos.
Qualidade:
Tendo o mecanismo de alta qualidade
PrinceXML
como espinha dorsal, o DocRaptor oferece claramente a melhor qualidade de PDF, retornando documentos PDF altamente polidos e bem convertidos. No entanto, o serviço da API pdflayer fica bem próximo aqui. Pdfcrowd não necessariamente pontua com qualidade, mas com velocidade de processamento.Custo:
pdflayer.com - Como indicado acima, a opção mais econômica aqui é pdflayer.com, oferecendo um plano de assinatura totalmente gratuito para 100 PDFs mensais e assinaturas premium que variam entre US $ 9,99 e US $ 119,99. O preço de 10.000 documentos mensais em PDF é de US $ 39,99.
docraptor.com - Oferecendo um período de avaliação gratuita de 7 dias. Os planos de assinatura premium variam de US $ 15 a US $ 2250. O preço para 10.000 documentos mensais em PDF é de ~ US $ 300,00.
pdfcrowd.com - Oferecendo 100 PDFs uma vez de graça. Os planos de assinatura premium variam de US $ 9 a US $ 89. O preço para 10.000 documentos mensais em PDF é de ~ $ 49,00.
Eu usei todos os três e este texto deve ajudar alguém a decidir sem ter que pagar por todos eles. Este texto não foi escrito para endossar nenhum produto e não tenho afiliação com nenhum dos produtos.
fonte
Se você tiver acesso à linha de comando, é possível usar o PhantomJS para criar a
PDF
partir deURL
(remoto ou local).Funciona muito bem e é uma solução gratuita.
Dê uma olhada neste script de exemplo criado para esse problema exato.
fonte
Esta questão já é bastante antiga, mas não vi ninguém mencionar o CutyCapt, então eu vou :)
CutyCapt
fonte
Eu recomendo TCPDF ou DOMPDF, nessa ordem.
fonte
Eu não acho que uma classe php será o melhor para renderizar uma página xHtml com css.
O que acontece quando uma nova regra de css é lançada? (em breve css 3.0 ...)
A melhor maneira de renderizar uma página html é, obviamente, um navegador. O Firefox 3.0 pode 'imprimir' nativamente em formato pdf, torisugary desenvolveu uma extensão (linha de comando de impressão) para usá-lo. Aqui você encontra.
De qualquer forma, ainda existem muitos problemas no runninr firefox, assim como um conversor de pdf ...
No momento, acho que o wkhtmltopdf é o melhor (que é o usado pelo navegador safari), rápido, rápido, incrível. Sim, código-fonte também ... Dê uma olhada
fonte
Desenvolvi uma API pública para criar arquivos PDF a partir de páginas da web. Ele tem uma classe de cliente PHP agradável que o torna super fácil de usar. Ele usa o wkhtmltopdf para renderizar o PDF na nuvem.
Não há necessidade de nada de especial no HTML. Não há necessidade de URLS absolutos nos links images / css / js. Também funciona no localhost (máquina de desenvolvimento).
Atualmente, o serviço possui pontos de extremidade em 4 regiões do Azure: leste dos EUA, oeste dos EUA, norte da UE e sudeste da Ásia.
É rápido, pois usa um protocolo proprietário para enviar o conteúdo da página da web para a API para conversão em PDF.
É confiável porque todos os pontos de extremidade têm balanceamento de carga.
Conta gratuita disponível para teste ou baixo uso. Detalhes no site:
https://rotativahq.com
fonte
Talvez você possa tentar usar o Tidy antes de entregar o arquivo ao conversor. Se um dos renderizadores engasgar com algum problema de HTML (como tag não fechada), isso poderá ajudá-lo.
fonte
A renderização fina não significa nada. Isso valida?
Todos os navegadores fazem o máximo que podem para mostrar algo na tela, não importa quão ruim seja a entrada. E é claro que eles não fazem a mesma coisa. Se você quiser a mesma renderização do FireFox, poderá usar o mecanismo de renderização. Existem geradores de pdf para isso. É uma enorme quantidade de trabalho, no entanto.
fonte
Embora já existam muitas soluções, recomendo as duas seguintes:
O que há de diferente nessas duas APIs de todas as soluções mencionadas anteriormente é que - além de converter HTML para PDF com CSS e JavaScript - ele também oferece gerenciamento de direitos PDF, marcas d'água e criptografia. Portanto, é uma solução tudo-em-um para quem quer começar a correr.
Isenção de responsabilidade: trabalho para a Kaiomi, uma empresa que opera esses dois sites.
fonte
A conversão de HTML para PDF realmente precisa ocorrer no lado do servidor usando PHP?
Acabei de encontrar o jsPDF , uma solução do lado do cliente usando HTML5 / JavaScript. O código licenciado pelo MIT também está no GitHub .
fonte
O TCPDF funciona bem, sem dependências, é gratuito e constantemente corrigido. Tem velocidade razoável se o conteúdo HTML / CSS fornecido estiver bem formatado. Eu normalmente gero de 50 a 300 kB de entrada HTML (incluindo CSS) e obtenho saída em PDF em 1-3 segundos com 10 a 15 páginas em PDF.
Eu recomendo usar a biblioteca arrumada como um bonito formatador de HTML antes de enviar qualquer coisa para o TCPDF.
fonte
Eu tentei várias bibliotecas diferentes para PHP. Todos os listados que eu tentei. Na minha opinião, a biblioteca TCPDF é o melhor comprometimento de desempenho / usabilidade. É muito simples de instalar e usar, também com bom desempenho em pequenas aplicações médias. Se você precisar de alto desempenho e documento PDF muito grande, use o módulo Zend_PDF , mas prepare-se para codificar com firmeza !
fonte
API da Web
Se houver pessoas que sempre pesquisam esse tipo de coisa, existe um site gratuito que permite converter o código html e as páginas em pdf. Há também uma API (muito pequena) que permite obter arquivos PDF a partir do URL.
Veja aqui
fonte
não PHP , mas uma biblioteca Java , que faz o seguinte:
É utilizável a partir do PHP via
system()
ou uma chamada semelhante. Embora exija XML bem-formação doinput
.fonte