2014-07-02 14 views
13

Voglio convertire una pagina HTML in un PDF in formato A4.phantomjs adattano il contenuto alla pagina A4

page.paperSize = { 
    format: 'A4', 
    orientation: 'portrait', 
    border: '1cm' 
}; 

C'è un modo per ridimensionare il sito Web in modo che si adatti alla larghezza di A4?

Se ho il seguente codice HTML:

<div style="width:1500px; text-align:right;"> 
    right 1500px 
</div> 

L'estremità destra del div cade fuori dalla pagina.

Ho giocato con la proprietà viewportSize:

page.viewportSize = { 
    width: 480, 
    height: 800 
}; 

mi sarei aspettato che un grande risultato larghezza finestra in una parte più grande della pagina viene eseguito il rendering in PDF.

page.zoom 

Inoltre, non ha avuto l'effetto desiderato.

I file PDF sono report. Per un aspetto professionale dovrebbero essere A4 e non qualsiasi dimensione arbitraria.

Oppure phantomjs è lo strumento sbagliato per il mio problema?

Sto usando phantomjs versione 1.9.7 su Ubuntu 12.04.4.


Edit:

Sembra che ci sono tre diverse dimensioni qui:

  • vieportSize che è la dimensione che viene utilizzata per il rendering, come scritto nella documentazione
  • paperSize che è la dimensione del documento PDF risultante
  • e quindi c'è il dimensione dello schermo. phantomjs si adatta sempre alla larghezza di uno schermo sulla dimensione della carta. La dimensione dello schermo della mia versione di phantomjs è 1024 x 768 pixel. Se la porta di visualizzazione è più grande della dimensione dello schermo, tutto ciò che non è compreso tra 1024 pixel non viene visualizzato.

Non ho ancora trovato un modo per modificare le dimensioni dello schermo.

Ho trovato questo rendendo http://www.whatismyscreenresolution.com/ in PDF.

+0

È possibile modificare la larghezza dell'elemento/pagina in modo che si adatti al documento. La domanda è se questo sarebbe ancora bello. Quale versione di phantomjs e quale sistema operativo usi btw? –

+1

E preferirei non dover progettare i miei siti web in base ai requisiti di phantomjs ... – pat

+0

Ecco un altro puntatore: si potrebbe [simulare uno zoom di pagina] (http://stackoverflow.com/a/9441618/1816580), ma questo probabilmente romperà la tua pagina orribilmente. –

risposta

2

Una soluzione è creare un elemento che abbia esattamente le stesse dimensioni di A4 e inserirvi il contenuto. Questo ha funzionato sulla mia macchina:

.page{ 
    position:relative; 
    border: 0px; 
    width:calc(210mm * 1.25); 
    height:calc(297mm * 1.25); 
    padding:0 
} 

Nota che utilizzo un fattore di zoom di 1,25. Ciò è dovuto a this issue.

+0

Questo sembra funzionare bene. Lo faccio dinamicamente usando la funzione "Valuta" e funziona bene, ad es. document.querySelector ('body'). Style.height = "calc (297mm * 1,25)" – Ian

Problemi correlati