php - example - mpdf unicode html free pdf generator




Convertire HTML+CSS in PDF con PHP? (20)

Ho un documento HTML (non XHTML) che si presenta bene in Firefox 3 e IE 7. Usa CSS abbastanza basilari per adattarlo e rende bene l'HTML.

Sono ora dopo un modo di convertirlo in PDF. Ho provato:

  • DOMPDF : ha avuto enormi problemi con le tabelle. Ho preso in considerazione le mie grandi tabelle nidificate e mi ha aiutato (prima che consumasse fino a 128M di memoria e poi a morire - questo è il mio limite di memoria in php.ini) ma fa un casino completo di tabelle e non sembra ottenere immagini. I tavoli erano solo roba di base con alcuni stili di bordo per aggiungere alcune linee in vari punti;
  • HTML2PDF e HTML2PS : in realtà ho avuto più fortuna con questo. Ha reso alcune delle immagini (tutte le immagini sono URL di Google Chart) e la formattazione delle tabelle era molto meglio ma sembrava avere qualche problema di complessità che non avevo ancora capito e continuava a morire con errori node_type () sconosciuti. Non so da dove andare; e
  • Htmldoc : sembra funzionare bene Htmldoc base, ma non ha praticamente alcun supporto per CSS, quindi devi fare tutto in HTML (non avevo realizzato che era ancora 2001 in Htmldoc-land ...) quindi è inutile per me.

Ho provato un'applicazione per Windows chiamata Html2Pdf Pilot che in realtà ha fatto un lavoro abbastanza decente, ma ho bisogno di qualcosa che funzioni su Linux e funzioni idealmente su richiesta tramite PHP sul server web.

Cosa mi manca o come posso risolvere questo problema?


1) usa MPDF !

a) estrai in yourfolder

b) crea file.php nella tua yourfolder e inserisci tale codice:

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

c) apri file.php dal tuo browser




2) Usa pdfToHtml !

1) estrai pdftohtml.exe nella tua cartella principale:

2) all'interno di quella cartella, nel file anyfile.php , inserisci questo codice (supponendo che ci sia anche una fonte example.pdf):

<?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) inserisci FinalFolder e ci saranno i file convertiti (come molte pagine, come il PDF sorgente ..)


API Web

Se ci sono persone che cercano sempre questo tipo di cose, c'è un sito web gratuito che ti permette di convertire il codice html e le pagine in pdf. C'è anche una (molto piccola) API che ti permette di ottenere il file pdf dall'URL.

Controlla qui


Bene, se vuoi trovare una libreria di convertitori XHTML + CSS in PDF perfetta, dimenticala. È lontano dal possibile. Perché è proprio come trovare un browser perfetto (motore di rendering XHTML + CSS). Ne abbiamo uno? IE o FF?

Ho avuto un discreto successo con DOMPDF. Il fatto è che devi modificare il tuo codice HTML + CSS per adattarlo al modo in cui la biblioteca intende funzionare. Oltre a questo, ho dei risultati piuttosto buoni.

Vedi sotto:

HTML originale

Conversione di HTML in PDF


C'è un tutorial sulla devzone di Zend sulla generazione di pdf da php ( parte 1 , parte 2 ) senza alcuna libreria esterna. Non ho mai implementato questo tipo di soluzione, ma dal momento che è tutto in PHP, potresti trovarlo più flessibile da implementare ed eseguire il debug.


Dopo un po 'di ricerche e una generale tiratura dei capelli, la soluzione sembra essere HTML2PDF . DOMPDF fatto un lavoro terribile con tabelle, bordi e layout anche moderatamente complessi e htmldoc sembra abbastanza robusto ma è quasi completamente ignorante nei CSS e non voglio tornare a fare layout HTML senza CSS solo per quel programma.

HTML2PDF sembrava il più promettente, ma continuavo ad avere questo strano errore sugli argomenti di riferimento null su node_type. Finalmente ho trovato la soluzione a questo. Fondamentalmente, PHP 5.1.x ha funzionato bene con sostituzioni regolari (preg_replace_ *) su stringhe di qualsiasi dimensione. PHP 5.2.1 ha introdotto una direttiva di configurazione php.ini chiamata pcre.backtrack_limit . Ciò che questo parametro di configurazione fa è limitare la lunghezza della stringa per cui viene eseguita la corrispondenza. Perché questo è stato introdotto non lo so. Il valore predefinito è stato scelto come 100.000. Perché un valore così basso? Di nuovo, nessuna idea.

Un bug è stato sollevato contro PHP 5.2.1 per questo , che è ancora aperto quasi due anni dopo .

Ciò che è orribile di questo è che quando il limite viene superato, la sostituzione fallisce silenziosamente . Almeno se fosse stato sollevato e registrato un errore avresti qualche indicazione su cosa è successo, perché e cosa cambiare per risolverlo. Ma no.

Quindi ho un file HTML 70k da convertire in PDF. Richiede le seguenti impostazioni php.ini:

  • pcre.backtrack_limit = 2000000; # probabilmente più del necessario ma va bene
  • memory_limit = 1024M; # si, un gigabyte ; e
  • max_execution_time = 600; # si, 10 minuti .

Ora il lettore astuto potrebbe aver notato che il mio file HTML è più piccolo di 100k. L'unica ragione per cui posso indovinare il motivo per cui ho riscontrato questo problema è che html2pdf fa una conversione in xhtml come parte del processo. Forse questo mi ha portato sopra (anche se quasi il 50% di bloat sembra strano). In ogni caso, quanto sopra ha funzionato.

Ora, html2pdf è un maiale di risorse. Il mio file 70k impiega circa 5 minuti e almeno 500-600 M di RAM per creare un file PDF da 35 pagine. Non abbastanza veloce (di gran lunga) per un download in tempo reale purtroppo e l'utilizzo della memoria mette il rapporto di utilizzo della memoria nell'ordine di 1000-a-1 (600M di RAM per un file 70k), che è assolutamente ridicolo.

Sfortunatamente, questo è il migliore che ho trovato.


Forse potresti provare a usare Tidy prima di passare il file al convertitore. Se uno dei renderer soffoca su qualche problema HTML (come un tag non chiuso), potrebbe essere d'aiuto.


Ho sviluppato un'API pubblica per creare file PDF da pagine Web. Ha una buona classe client PHP che lo rende super facile da usare. Usa wkhtmltopdf per rendere il PDF nel cloud.

Non c'è bisogno di nulla di speciale nell'HTML. Non c'è bisogno di URL assoluti nei collegamenti di immagini / css / js. Funziona anche su localhost (macchina di sviluppo).

Attualmente il servizio ha endpoint in 4 regioni di Azure: Stati Uniti Est, Stati Uniti Occidentali, Nord Europa, Sud-Est asiatico.

È veloce poiché utilizza un protocollo proprietario per inviare il contenuto della pagina Web all'API per la conversione in PDF.

È affidabile perché tutti gli endpoint sono bilanciati dal carico.

Account gratuito disponibile per test o basso utilizzo. Dettagli sul sito web:

https://rotativahq.com


Il rendering fine non significa nulla. Convalida?

Tutti i browser fanno il massimo possibile per mostrare semplicemente qualcosa sullo schermo, indipendentemente dall'input. E ovviamente non fanno la stessa cosa Se vuoi lo stesso rendering di FireFox, puoi usare il suo motore di rendering. Ci sono generatori di pdf per questo. È un sacco di lavoro, però.


L' HTML2PDF e HTML2PS che è stato originariamente menzionato nel post di apertura parlava di un pacchetto del 2009 con questo link

Ma c'è un HTML2PDF migliore

È basato su TCPDF sebbene sia parzialmente in francese.

Puoi avere intestazioni o piè di pagina che si ripetono sulle pagine e avere numeri di pagina e pagine totali. Vedi i suoi esempi . Lo uso da oltre tre anni e lo consiglio.


La citazione di Darryl Hein sopra TCPDF è probabilmente una grande idea. Il codice di Nicola Asuni è abbastanza maneggevole e potente. L'unico killer è che se pianifichi di unire i file PDF con il tuo PDF generato non ha queste caratteristiche. Dovresti creare il PDF e quindi unirlo utilizzando qualcosa come PDFTK di Sid Steward (www.pdflabs.com/tools/pdftk-the-pdf-toolkit/).


Non penso che una classe php sarà la migliore per il rendering di una pagina xHtml con css.

Cosa succede quando viene fuori una nuova regola CSS? (presto css 3.0 ...)

Il modo migliore per rendere una pagina html è, ovviamente, un browser. Firefox 3.0 può "stampare" in modo nativo in formato pdf, torisugary ha sviluppato un'estensione (command line print) per usarlo. Qui lo troverai.

Comunque, ci sono ancora molti problmes runninr firefox proprio come un convertitore pdf ...

Al momento, penso che wkhtmltopdf sia il migliore (quello usato dal browser safari), veloce, veloce, fantastico. Sì, opensource pure ... wkhtmltopdf


Perché non provi la versione 2.0 di mPDF ? L'ho usato per creare un documento PDF. Funziona bene.

Nel frattempo mPDF è alla versione 5.7 e viene mantenuto attivamente, in contrasto con HTML2PS / HTML2PDF

Ma tieni presente che la documentazione può essere davvero difficile da gestire. Ad esempio, dai un'occhiata a questa pagina: https://mpdf.github.io/ .

Con questa libreria è possibile eseguire attività di base su html in pdf, ma compiti più complessi richiedono un po 'di tempo per leggere e "capire" la documentazione.


Questa domanda è già vecchia, ma non ho visto nessuno menzionare CutyCapt quindi lo farò :)

CutyCapt

CutyCapt è una piccola utility da riga di comando multipiattaforma per acquisire il rendering di WebKit di una pagina Web in una varietà di formati vettoriali e bitmap, inclusi SVG, PDF, PS, PNG, JPEG, TIFF, GIF e BMP


Raccomando TCPDF o DOMPDF, è quell'ordine


Sebbene ci siano già molte soluzioni offerte, raccomando le due seguenti:

  1. HTM2PDF - offre un'API per convertire HTML in PDF e ha anche un SDK PHP, che rende molto facile l'implementazione in PHP; Offre una scelta di posizioni server in Europa, Asia e Stati Uniti
  2. PDFmyURL : offre un'API che include anche URL e HTML in PDF, con la stessa funzionalità di HTM2PDF, ma funziona su un paesaggio con bilanciamento del carico ed è stato un po 'più lungo

La cosa che differisce da queste due API rispetto a tutte le soluzioni menzionate in precedenza è che oltre a convertire HTML in PDF con CSS e JavaScript, offre anche la gestione dei diritti PDF, watermarking e crittografia. Quindi è una soluzione all-in-one per coloro che vogliono andare a fondo.

Disclaimer: lavoro per Kaiomi, una società che gestisce entrambi questi siti web.


Solo per sfidare il thread, ho provato DOMPDF e ha funzionato perfettamente. Ho usato DIV e altri elementi a livello di blocco per posizionare tutto, mantenuto rigorosamente CSS 2.1 e ha funzionato molto bene.


Suggerisco DocRaptor (che usa PrinceXML come "motore")


TCPDF funziona bene, senza dipendenze, è gratuito e costantemente aggiornato. Ha una velocità ragionevole se i contenuti HTML / CSS forniti sono ben formati. Generalmente generi da 50 a 300 kB di input HTML (incluso CSS) e ottengo l'output PDF entro 1-3 secondi con 10-15 pagine PDF.

Consiglio vivamente di usare la libreria in ordine come formattatore di formattazione HTML prima di inviare qualsiasi cosa a TCPDF.


wkhtmltopdf un'occhiata a wkhtmltopdf . È open source, basato su webkit e gratuito.

Abbiamo scritto un piccolo tutorial here .

EDIT (2017):

Se fosse per costruire qualcosa oggi, non andrei più su quella strada.
Ma userebbe invece http://pdfkit.org/ .
Probabilmente spogliandolo di tutte le sue dipendenze nodejs, per essere eseguito nel browser.


Buone notizie! Snappy !!

Snappy è una libreria PHP5 open source molto semplice , che consente la generazione di miniature, istantanee o PDF da un url o da una pagina html. E ... utilizza l' eccellente wkhtmltopdf basato su wkhtmltopdf

Godere! ^ _ ^







pdf-generation