Converter HTML + CSS para PDF com PHP? [fechado]

Eu tenho um documento HTML (não XHTML) que torna fine no Firefox 3 e IE 7. Ele usa um CSS bastante básico para o estilo e torna fine em HTML.

Estou agora atrás de uma maneira de convertê-lo em PDF. Eu tentei.

  • DOMPDF : teve enormes problemas com as mesas. Tive em conta as minhas grandes mesas aninhadas e isso ajudou (antes de consumir até 128 M de memória e depois morrer-é o meu limite de memória em php.ini) mas faz uma completa bagunça de mesas e não parece ter imagens. As tabelas eram apenas coisas básicas com alguns estilos de fronteira para adicionar algumas linhas em vários pontos;
  • HTML2PDF e HTML2PS : na verdade tive mais sorte com isto. Ele rendeu 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 continuou morrendo com erros desconhecidos node_type (). Não sei para onde ir a partir daqui.; e
  • Htmldoc : isto parece funcionar bem no HTML básico, mas não tem quase nenhum suporte para CSS, por isso você tem que fazer tudo no HTML (Eu não sabia que ainda era 2001 no Htmldoc-land... então é 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 no mínimo funciona em Linux e idealmente funciona on-demand via PHP no servidor Web.

O que me está a escapar, ou como posso resolver isto? problema?

Author: cletus, 2008-12-24

30 answers

Importante: Por favor, note que esta resposta foi escrita em 2009 e pode não ser a solução mais rentável hoje em 2018. Alternativas Online como PDFShift são melhores hoje do que eram naquela época.


Dá uma vista de olhos aPrinceXML .

É definitivamente o melhor HTML/CSS para conversor de PDF lá fora, embora não é livre (mas hey, a sua programação também pode não ser livre, por isso, se lhe poupar 10 horas de trabalho, você está em casa free (Uma vez que você também precisa levar em conta que as soluções alternativas irão exigir que você configure um servidor dedicado com o software certo)

Oh sim, eu mencionei que esta é a primeira (e provavelmente única) solução HTML2PDF que completa ACID2 ?

Amostras De PrinceXML

 460
Author: SchizoDuckie, 2018-06-04 09:32:03
Olha para isto.wkhtmltopdf . É de código aberto, baseado no webkit e gratuito.

Nós escrevemos um pequeno tutorial aqui.

Editar( 2017 ):

Se fosse para construir algo hoje, eu não iria mais por esse caminho.
Mas usaria http://pdfkit.org/ em vez disso.
Provavelmente removendo-o de todas as suas dependências nodejs, para executar no navegador.
 634
Author: Mic, 2016-12-23 11:07:35

Depois de uma investigação e de um corte de cabelo geral, a solução parece ser HTML2PDF . o DOMPDF fez um trabalho terrível com tabelas, fronteiras e até mesmo layout moderadamente complexo e o htmldoc parece razoavelmente robusto, mas é quase completamente ignorante em CSS e eu não quero voltar a fazer layout HTML sem CSS apenas para esse programa.

O HTML2PDF parecia o mais promissor, mas continuei a ter este erro estranho sobre argumentos de referência nulos para o node_type. I finalmente, encontrei a solução para isto. Basicamente, PHP 5.1.x trabalhou bem com regex replaces (preg_replace_*) em strings de qualquer tamanho. PHP 5.2.1 introduziu um php.ini config directiva chamado pcre.backtrack_limit . O que este parâmetro de configuração faz é limitar o comprimento do texto para o qual a correspondência é feita. Porque é que isto foi apresentado, não sei. O valor padrão foi escolhido como 100.000. Porquê um valor tão baixo? Mais uma vez, não faço ideia.

A bug foi levantado contra o PHP 5.2.1 para este , que ainda está aberto quase dois anos depois.

O que é horrível sobre isso é que quando o limite é excedido, o substituto apenas silenciosamente falha . Pelo menos se um erro tivesse sido levantado e registrado você teria alguma indicação do que aconteceu, porquê e o que mudar para corrigi-lo. Mas não.

Então eu tenho um arquivo HTML de 70k para transformar em PDF. Requer o seguinte php.configuração do ini:

  • pcre.backtrack_limit = 2000000; # provavelmente mais do que eu preciso, mas está tudo bem.
  • memory_limit = 1024M; # sim, um gigabyte, e
  • max_execution_time = 600; # sim, 10 minutos .

Agora o leitor astuto pode ter notado que o meu ficheiro HTML é menor que 100k. a única razão pela qual consigo adivinhar porque é que atingi este problema é que o html2pdf faz uma conversão para xhtml como parte do processo. Talvez isso me levou (embora quase 50% de inchaço parece estranho). Seja qual for o caso, o acima funcionou.

Agora, html2pdf é um porco de recursos. Meu arquivo 70k leva aproximadamente 5 minutos e pelo menos 500-600M de RAM para criar um arquivo PDF de 35 páginas. Não é rápido o suficiente (de longe) para um download em tempo real infelizmente e o uso da memória coloca a razão de uso da memória na ordem de 1000-para-1 (600M de RAM para um arquivo de 70k), o que é completamente ridículo. Infelizmente, foi o melhor que consegui.
 143
Author: cletus, 2015-11-24 02:08:31

Porque não tentas mPDF versão 2.0 ? Usei - o para criar um documento PDF. Funciona bem.

Entretanto, o mPDF está na versão 5.7 e é activamente mantido, em contraste com o HTML2PS / HTML2PDF

Mas tenha em mente que a documentação pode ser 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, pode ser feito com esta biblioteca, mas tarefas mais complexas levará algum tempo ler e" compreender " a documentação.

 118
Author: Karthick, 2016-08-25 12:06:03

1) Utilizar MPDF !

A) extracto yourfolder

B) criar o ficheiro .php em yourfolder e inserir esse código:

<?php
include('../mpdf.php');
$mpdf=new mPDF();
$mpdf->WriteHTML('<p style="color:red;">Hallo World<br/>Fisrt sentencee</p>');
$mpdf->Output();   exit;
 ?>

C) abrir o ficheiro.php do seu navegador




2) utilizarpdfToHtml !

1) extracto pdftohtml.exe para a sua pasta de base:

2) dentro dessa pasta, em QUALQUER ficheiro.ficheiro php , Coloque este código (assumindo que existe um exemplo de código.documento too):

<?php
$source="example.pdf";
$output_fold="FinalFolder";

    if (!file_exists($output_fold)) { mkdir($output_fold, 0777, true);}
$result= passthru("pdftohtml $source $output_fold/new_filename",$log);
//var_dump($result); var_dump($log);
?>

3) Digite FinalFolder {[[13]}, e haverá os arquivos convertidos(quantas páginas, como o PDF fonte tinha..)

 63
Author: tazo todua, 2016-08-26 06:49:41

Checkout TCPDF . Ele tem alguma funcionalidade HTML para PDF que pode ser suficiente para o que você precisa. Também é grátis!

 53
Author: Darryl Hein, 2016-12-09 17:43:14
Eu sugiro ... DocRaptor (que usa PrinceXML como "motor")
 29
Author: aRahmanS29, 2015-01-24 11:25:42
Só para quebrar o fio, tentei DOMPDF e funcionou perfeitamente. Eu usei {[[0]} e outros elementos de nível de bloco para posicionar tudo, manteve estritamente CSS 2.1 e jogou muito bem.
 27
Author: Filip Dupanović, 2013-08-13 20:47:05

Boas notícias! Rápido!!

O Snappy é uma bibliotecamuito fácil de código aberto PHP5, permitindo a geração de miniaturas, instantâneos ou PDF a partir de um url ou de uma página html. E... ele usa o Excelente baseado no webkit wkhtmltopdf

Divirtam-se! ^_^
 25
Author: Paulo Coghi, 2011-11-21 20:23:29
Se quiser encontrar uma biblioteca XHTML+CSS perfeita para conversor de PDF, esqueça. Está longe de ser possível. Porque é como encontrar um navegador perfeito (XHTML+CSS rendering engine). Temos um? Eu ou FF? Tive algum sucesso com o DOMPDF. A coisa é que você tem que modificar seu código CSS HTML+para ir com a forma como a biblioteca está destinada a funcionar. Além disso, tenho bons resultados.

Ver abaixo:

Original HTML

A converter HTML para PDF

 22
Author: datasn.io, 2013-05-08 05:41:49
Já foi mencionado, mas gostaria de confirmar que o mpdf é o mais fácil, mais poderoso e mais livre conversor de html para pdf. O céu é realmente o limite. Você pode até mesmo gerar pdfs de dados dinâmicos gerados pelo Usuário. Por exemplo, um cliente queria um sistema CMS para poder actualizar a lista de músicas que tocava no clube. Isso não foi problema, mas ele também queria que os usuários fossem capazes de baixar A.pdf da lista de reprodução, e assim este pdf transferível teve de ser atualizado pelo cms também. Graças à mpdf, com alguns loops simples e variáveis intercaladas eu poderia fazer isso. Algo que pensei que me levaria semanas, literalmente, levou-me minutos.

Grande Artigo que me ajudou a começar.

 22
Author: Starkers, 2018-06-12 08:05:38

O HTML2PDF e HTML2PS que foi originalmente mencionado no post de abertura estava a falar de um pacote de 2009 com este link

Mas há uma melhor HTML2PDF

([1]) baseia-se no TCPDF, embora em parte em francês.

Você pode ter cabeçalhos de mesa ou rodapé que se repetem nas páginas e têm números de páginas e páginas totais. Ver os seus exemplos . Uso-o há mais de três anos e recomendo-o.

 20
Author: Luke Wenke, 2018-06-12 04:29:19

Há um tutorial no devzone de Zend sobre Gerar pdf a partir do php (part 1, Parte 2 ) sem bibliotecas externas. Eu nunca implementei este tipo de solução, mas como é tudo php, você pode achá-lo mais flexível para implementar e depurar.

 18
Author: yoavf, 2008-12-24 09:46:11

Estou a usar o fpdf para produzir ficheiros pdf usando o php. Até agora, está a funcionar bem para mim produzir resultados simples.

 18
Author: , 2009-02-21 20:21:17
Em termos de custo, a utilização de um serviço web (API) pode, em muitos casos, ser a abordagem mais sensata. Além disso, ao outsourcing deste processo você desbloqueia sua própria infra - estrutura/infra - estrutura e-desde que você esteja usando um serviço respeitável-garantir a compatibilidade com o ajuste de padrões web, uptime, tempos de processamento curtos e entrega rápida de conteúdo. Eu fiz algumas pesquisas sobre a maioria dos serviços da web atualmente no mercado, por favor, Encontre abaixo as APIs que eu sinto que vale a pena mencionar em este fio, em uma ordem baseada na relação preço / valor. Todos eles estão oferecendo classes e pacotes de PHP pré-compostos.
  1. pdflayer.com-Custo: $ - Qualidade: ☆☆☆☆
  2. docraptor.com-Custo: $ $ $ - Qualidade: ☆☆☆☆☆
  3. pdfcrowd.com-Custo: $ - Qualidade: ☆ ☆ ☆

Qualidade:

Tendo o motor de alta qualidade {[[0]} como espinha dorsal, O DocRaptor {[[9]} oferece claramente a melhor qualidade PDF, devolvendo altamente polido e bem convertido documentos PDF. No entanto, a API {[[8]} de pdflayer fica muito perto daqui. O Pdfcrowd não marca necessariamente com qualidade, mas com velocidade de processamento.

Custo:

Pdflayer.com - como indicado acima, a opção mais rentável aqui é: pdflayer.com, oferecendo um plano de assinatura inteiramente livre para 100 PDFs mensais e assinaturas Premium que variam entre $9.99-$119.99. o preço de 10.000 mensais Os documentos PDF são $ 39.99.

Docraptor.com-oferecendo um período de 7 dias livre. Os planos de Subscrição variam entre 15 e 2250 dólares. o preço de 10.000 documentos PDF mensais é ~ $300,00.

Pdfcrowd.com - oferecendo 100 PDFsuma vez de graça. Os planos de Subscrição variam entre 9 e 89 dólares. o preço de 10.000 documentos PDF mensais é ~ $49,00.

Usei os três e este texto é suposto ajudar. qualquer um decide sem ter de pagar por todos. Este texto não foi escrito para endossar nenhum produto e eu não tenho nenhuma afiliação com nenhum dos produtos.
 13
Author: Frank, 2016-02-11 18:00:11

A menção de Darryl Hein acima de TCPDF é provavelmente uma boa ideia. O código de Nicola Asuni é muito útil e poderoso. O único assassino é se você alguma vez planeja fundir arquivos PDF com o seu PDF gerado ele não tem essas características. Você teria que criar o PDF e, em seguida, fundi-lo usando algo como PDFTK por Sid Steward (www.pdflabs.com/tools/pdftk-the-pdf-toolkit/).

 13
Author: Arachnid, 2016-07-28 08:51:15

Tente pegar a última versão noturna dompdf - eu estava usando uma versão mais antiga que era um terrível motor de recursos e levou uma eternidade para renderizar o meu pdf. Depois de pegar uma noite aqui.

Demorou apenas alguns segundos para gerar o PDF - e foi tão bem renderizado como com PrinceXML / Docraptor . Parece que eles otimizaram seriamente o código dompdf desde a última vez que o usei!

 12
Author: Arni J, 2014-01-02 18:38:18

Se você tem acesso à linha de comando é possível usar PhantomJS para criar o {[[0]} a partir de um URL (remoto ou local).

Funciona muito bem, e é uma solução livre.

Dê uma olhada neste exemplo script feito para este problema exato.

 12
Author: Hjortlund, 2015-01-24 11:23:47

Esta pergunta já é bastante antiga, mas não vi ninguém mencionar CutyCapt por isso vou:)

CutyCapt

O CutyCapt é um pequeno utilitário de linha de comandos multi-plataforma para capturar a renderização de WebKit de uma página web em uma variedade de vetor e formatos de imagem, incluindo SVG, PDF, PS, PNG, JPEG, TIFF, GIF e BMP

 11
Author: Koen., 2012-02-20 15:19:17

Talvez possa tentar usar o Tidy antes de entregar o ficheiro ao conversor. Se um dos renderizadores se engasga em algum problema HTML (como tag unclosed), ele pode ajudá-lo.

 9
Author: PhiLho, 2008-12-24 09:16:29

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 da css sair? (soon CSS 3.0...)

A melhor maneira de renderizar uma página html é, obviamente, um navegador. Firefox 3.0 pode nativamente 'imprimir' em formato pdf, torisugary desenvolveu uma extensão (command line print) para usá-lo. Aqui vais encontrá-lo.

De qualquer forma, ainda existem muitos problmes runninr firefox apenas como um conversor de pdf...

Em no momento, eu acho que o wkhtmltopdf é o melhor (que é o usado pelo navegador safari), rápido, rápido, incrível. Sim, a opensource também... Dá uma vista de olhos.

 9
Author: Strae, 2009-05-12 21:02:00

Desenvolvi uma API pública para construir ficheiros PDF a partir de páginas web. Ele tem uma classe de cliente PHP agradável que torna super fácil de usar. Ele usa o wkhtmltopdf para desenhar o PDF na nuvem.

Não há necessidade de nada especial no HTML. Não há necessidade de URLS absolutos nas ligações imagens/css / js. Também trabalha no localhost (dev machine).

[[1] actualmente, o serviço tem objectivos em 4 regiões Azure: Leste dos EUA, Oeste dos EUA, Norte da UE, Sudeste Asiático. É rápido, já que usa um proprietário. Protocolo para enviar o conteúdo da página web para a API para conversão para PDF. É fiável porque todos os parâmetros são equilibrados.

Conta gratuita disponível para testes ou de baixa utilização. Detalhes no site:

Https://rotativahq.com

 9
Author: Giorgio Bozio, 2016-06-22 14:22:52

Embora já haja muitas soluções propostas, eu recomendo as duas seguintes:

  1. HTM2PDF - oferece uma API para converter HTML para PDF e também tem um PHP SDK, O que torna muito fácil de implementar no PHP; oferece uma escolha de locais de servidores na Europa, Ásia e EUA
  2. PDFmyURL - oferece uma API que faz URL e HTML para PDF também, com aproximadamente a mesma funcionalidade que HTM2PDF, mas trabalha em uma paisagem de carga balanceada e tem sido ao redor um pouco mais.

A coisa que é diferente sobre estas duas APIs de todas as soluções anteriormente mencionadas, é que - além de converter HTML para PDF com CSS e JavaScript-ele também oferece gerenciamento de direitos PDF, marca d'água e criptografia. Portanto, é uma solução única para aqueles que querem bater no chão correndo.

Disclaimer: eu trabalho para a Kaiomi, uma empresa que opera ambos os sites.
 7
Author: user1914292, 2014-06-02 17:59:32
A renderização não significa nada. Valida?

Todos os navegadores fazem o máximo que podem para mostrar alguma coisa na tela, não importa quão má a entrada. E é claro que não fazem a mesma coisa. Se quiser a mesma representação do FireFox, pode usar o seu motor de renderização. Há geradores de pdf para isso. Mas dá muito trabalho.

 6
Author: Stephan Eggermont, 2008-12-24 09:09:27

Eu recomendo TCPDF ou DOMPDF, é que a ordem

 5
Author: criss_ae, 2013-05-17 12:38:12
Tentei muitas bibliotecas diferentes para o PHP. Todas as listas que tentei. Na minha opinião a biblioteca TCPDF é o melhor desempenho de compromisso/usabilidade. É muito simples de instalar e usar, também bom desempenho em pequeno aplicativo Médio. Se você precisar de um documento PDF de alto desempenho e muito grande, use zend_pdf Módulo, mas prepare-se para codificar com força!
 5
Author: trullallero, 2013-05-22 06:47:40

A conversão de HTML para PDF realmente precisa de ocorrer do lado do servidor usando o PHP?

Acabei de encontrar jsPDF , uma solução do lado do cliente que utiliza HTML5 / JavaScript. O código licenciado pelo MIT também está no GitHub .

 5
Author: Oliver Schafeld, 2013-08-29 15:06:44

O TCPDF funciona bem, sem dependências, é livre e constantemente misturado. Ele tem velocidade razoável se o conteúdo HTML/CSS fornecido é bem formatado. Eu normalmente gerar a partir de 50-300 kB de entrada HTML (incluindo CSS) e obter saída PDF dentro de 1-3 secs com 10 - 15 páginas PDF.

Recomendo vivamente a utilização da Biblioteca tidy como formatação em HTML antes de enviar qualquer coisa para o TCPDF.

 5
Author: lubosdz, 2013-12-08 11:09:22

NÃO PHP , mas um Java library , que faz a coisa:

O disco voador pega em XML ou XHTML e aplica em conformidade com o CSS 2.1 folhas de estilo para ele, a fim de renderizar para PDF

Pode ser utilizado a partir de PHP via system() ou de uma chamada semelhante. Embora exija XML bem-estar do input.

 3
Author: Ivan Kurmanov, 2014-01-02 18:37:09

API Web

Se há pessoas que sempre procuram por este tipo de coisas, há um site livre que lhe permite converter código html & páginas para pdf. Há também uma api (muito pequena) que lhe permite obter arquivo pdf a partir de url.

Vê aqui.

 3
Author: Superdrac, 2014-05-23 15:18:40