Mi dispiace portare alla luce questo vecchio post, ma è uscito primo nella mia ricerca del miglior strumento di conversione HTML/PDF. Su Linux wkhtmltopdf è molto buono (prende in considerazione CSS, tra gli altri) e GPL.
Aggiornamento 2019-05
L'intero processo è stato fortunatamente racchiuso in un'immagine docker da TheCodingMachine:https://github.com/thecodingmachine/gotenberg
Ciò rende la manutenzione e l'utilizzo della generazione di pdf basata su Chrome negli ambienti di produzione davvero fluidi e senza problemi.
C'è una nuova modalità senza testa da Chrome 59. Poiché tutte le altre soluzioni faticano davvero con le funzionalità CSS più nuove (o non più così nuove) come flexbox, questa era nel mio caso l'unica soluzione per produrre un output PDF adeguato.
Per creare un pdf da un file html locale basta utilizzare il seguente comando:chrome --headless --disable-gpu --print-to-pdf file:///path/to/myfile.html
.
Per Mac OS sostituisci chrome
con /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome
.
L'unico aspetto negativo che ho notato finora è che (al momento) non è possibile passare l'html tramite stdin, ma la creazione di un file temporaneo non è un gran problema.
Per ulteriori informazioni, vedere https://developers.google.com/web/updates/2017/04/headless-chrome#create_a_pdf_dom
Aggiornamento:a quanto pare, i ragazzi di Chrome molto probabilmente forniranno una sorta di modulo nodo per questa attività, che alla fine deprecherebbe la modalità senza testa (https://bugs.chromium.org/p/chromium/issues/detail?id =719921).
La soluzione migliore sarebbe utilizzare l'approccio basato su nodi utilizzando il modulo burattinaio come documentato in https://developers.google.com/web/updates/2017/04/headless-chrome#node e stampare la pagina tramite il comando Page.printToPDF , che abilita anche alcune configurazioni aggiuntive.
Naturalmente, puoi connetterti al websocket della console di debug anche da qualsiasi ambiente diverso da node (ad es. script PHP).
NOTA:questa risposta è del 2008 e probabilmente ora non è corretta; controlla le altre risposte
PrinceXML è il migliore che abbia mai visto (analizza l'HTML normale così come XML/XHTML). Com'è il migliore? Bene, supera l'acid2 test che ho pensato fosse dannatamente impressionante
È tuttavia piuttosto costoso
WeasyPrint produce bei PDF con testo selezionabile e collegamenti ipertestuali.
weasyprint input.html output.pdf
Se usi wkhtmltopdf
invece, prova le seguenti opzioni:
wkhtmltopdf --margin-bottom 20mm --margin-top 20mm --minimum-font-size 16 ...