2012-01-09 13 views
34

Sto lavorando a un progetto utilizzando Ruby on Rails (3.1). Il mio requisito è quello di produrre pdf dal contenuto html. Quindi uso pdfkit gem.Wkhtmltopdf Caratteri in una riga parzialmente tagliati tra le pagine

In alcune pagine, i caratteri nella singola riga sono parzialmente tagliati tra le pagine. Quando converto html convertire in PDF usando PDFKit gemma

versione di wkhtmltopdf: wkhtmltopdf - 0.11.0 rc1

sistema operativo: Linux CentOS 5.5

Nell'immagine sottostante che mostra carattere parzialmente tagliare tra le pagine.

Si prega di suggerire una soluzione.

Esempio 1

enter image description here

Esempio 2

enter image description here

+1

Qual è il comando completo che si sta utilizzando per generare il pdf? –

+0

Comando generato da pdfkit gem: \t wkhtmltopdf "--page-size" "A4" "--margin-top" "5mm" "--margin-right" "5mm" "--margin-bottom" "5mm" "--margin-left" "5mm" "--encoding" "UTF-8" "--quiet" "1011284.html" "test.pdf" – amexn

+0

cosa succede se modifichi il margine? lo interrompe ancora? – Matt

risposta

7

Secondo some documentation ho scoperto (vedi pagina rottura), questo è un problema noto e suggerisce di utilizzare i CSS interruzioni di pagina per inserire interruzioni di pagina (presupponendo che si stia utilizzando una versione con patch di QT):

L'attuale algoritmo di interruzione di pagina di WebKit lascia molto a desiderare . Fondamentalmente webkit renderà tutto in un'unica pagina lunga, e poi lo ridurrà in pagine. Ciò significa che se hai due colonne di testo in cui uno è spostato verticalmente di mezza linea. Quindi il webkit taglierà una linea in pezzi per visualizzare la metà superiore di una pagina. E la metà inferiore su un'altra pagina. Si romperà anche l'immagine in due e così via. Se si utilizza la versione con patch di QT, è possibile utilizzare la proprietà CSS page-break-inside per risolvere questo problema. Non esiste una soluzione semplice per questo problema, fino a quando non si risolve il problema, prova a organizzare i tuoi documenti HTML in modo che contengano molte linee su cui le pagine possono essere pulite .

Consulta anche: http://code.google.com/p/wkhtmltopdf/issues/detail?id=9, http://code.google.com/p/wkhtmltopdf/issues/detail?id=33 e http://code.google.com/p/wkhtmltopdf/issues/detail?id=57.

+1

Questo non è più il caso. La risposta di seguito di @Besi risolve eventuali problemi di interruzione di pagina, per non parlare dell'ottima versione di 'wkhtmltopdf' (0.12.2.1). Aggiungi quanto segue al tuo CSS: 'table, img, blockquote {page-break-inside: avoid;}' – craned

+0

@craned non corretto. Il problema è solo parzialmente risolto ed è ancora lì. Il 'page-break-inside' aiuterà solo per l'intero blocco a cui lo aggiungi. Ad esempio, se 1 paragrafo/blocco è più lungo di una pagina, allora 'page-break-inside' non sarà d'aiuto e il testo verrà tagliato in alcuni casi. Va bene risolverlo se è un testo statico, ma è un problema con il testo generato dinamicamente quando non sai per quanto tempo quel particolare blocco sarà. Quindi il problema è ancora lì e solo parzialmente risolto. – Neel

+0

@Neel, in tal caso direi che è in gran parte risolto. Almeno nel mio particolare scenario, 1 paragrafo/blocco non sarebbe mai stato un problema. Francamente, un paragrafo/blocco non dovrebbe mai essere più lungo di una pagina normale, ma in quello che sembra il caso raro che sia, allora sì, sarebbe un posto dove il problema esiste ancora. – craned

9

Mi sono imbattuto in questo e ho trovato qualcosa che ha risolto il problema per me. Nel mio caso particolare, c'erano div con display: inline-block; margin-bottom: -20px;. Una volta che li ho modificati per bloccare e ripristinare il margine inferiore, la divisione della linea è scomparsa. YMMV.

+0

Grazie, ho avuto lo stesso problema con un elemento "articolo". Dopo aver aggiunto 'display: block', ha funzionato come un incantesimo. – nils

+0

@nvahalik: A quale elemento hai aggiunto display: block? Ho un problema simile con la tabella di esportazione in pdf. QUINTA domanda qui - http://stackoverflow.com/questions/17046385/wicked-pdf-rendering-the-last-row-across-two-pages – usha

1

Il problema del testo tagliato è un problema noto del webkit e sembra che gli sviluppatori abbiano trovato una soluzione all'interno di wkhtmltopdf. L'aggiornamento alla versione 0.12.1 risolverà il problema del taglio testo (se non si vuole perdere tempo con le compilation, è sufficiente prendere il file binario da qui: https://github.com/h4cc/wkhtmltopdf-amd64).

+1

Sto usando 0.12.2.1, che è una versione più aggiornata di wkhtmltopdf . Mi sembra ancora di avere questo problema, quindi non penso che questa sia la soluzione (poiché dubito che abbiano reintrodotto il bug in una versione più recente). – rageandqq

+0

Confermo che 0.12.1 ha funzionato al momento - da allora non ho giocato con esso. –

+0

Utilizzando wkhtmltopdf 0.12.2.1 (con qt con patch), il problema è ancora risolto. –

4

Ho avuto questo problema con una tabella:

enter image description here

poi ho aggiunto questo al mio CSS:

table, img, blockquote {page-break-inside: avoid;} 

Questo ha risolto il problema:

enter image description here

+0

Questo non ha funzionato per me. Ho provato le impostazioni di questo attributo accludendo td, tr e div e la linea è ancora ritagliata. –

1

Nel mio caso, il problema è stato reso lved commentando il seguente CSS:

html, body { 
    overflow-x: hidden; 
} 

In generale, controllare se eventuali tag hanno overflow insieme come hidden e rimuoverlo o impostarlo su visible.

Btw, io sto usando wkhtmltopdf version 0.12.2.1 su Windows 8.

Problemi correlati