2014-07-02 26 views
13

Chcę przekonwertować stronę HTML na PDF formatu A4.phantomjs pasuje do strony A4

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

Czy istnieje sposób na skalowanie witryny do szerokości A4?

Jeśli mam następujący kod HTML:

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

prawym końcu div spada stronę.

Grałem z właściwością viewportSize:

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

Liczyłam, że większe wyniki szerokość rzutni w większej części strony są renderowane w formacie PDF.

page.zoom 

Nie uzyskał również pożądanego efektu.

Pliki PDF są raportami. Aby uzyskać profesjonalny wygląd, powinny mieć format A4, a nie dowolny dowolny rozmiar.

Czy phantomjs jest niewłaściwym narzędziem do mojego problemu?

Używam phantomjs w wersji 1.9.7 na Ubuntu 12.04.4.


Edit:

Wydaje się, że istnieją trzy różne wymiary tutaj:

  • vieportSize który jest rozmiar, który jest używany do renderowania, jak napisano w docs
  • paperSize, który jest wielkością wynikowego dokumentu PDF
  • , a następnie pojawia się rozmiar ekranu. phantomjs zawsze pasuje do szerokości jednego ekranu na rozmiarze papieru. Rozmiar ekranu mojej wersji phantomjs to 1024 x 768 pikseli. Jeśli port widoku jest większy niż rozmiar ekranu, wszystko poza 1024 pikselami nie jest wyświetlane.

Nie znalazłem jeszcze sposobu na zmianę rozmiaru ekranu.

Znalazłem to, renderując http://www.whatismyscreenresolution.com/ do PDF.

+0

Można manipulować szerokością elementu/strony tak, aby pasowała do dokumentu. Pytanie brzmi, czy nadal będzie dobrze wyglądać. Którą wersję phantomjs i jakiego systemu operacyjnego używasz btw? –

+1

I wolałbym nie projektować stron internetowych pod kątem wymagań phantomjs ... – pat

+0

Oto kolejny wskaźnik: Można [symulować powiększenie strony] (http://stackoverflow.com/a/9441618/1816580), ale to prawdopodobnie potłucze twoją stronę. –

Odpowiedz

2

Jednym z rozwiązań jest stworzenie elementu o dokładnie takiej samej wielkości jak A4 i umieszczenie w nim treści. To zadziałało na mojej maszynie:

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

Pamiętaj, że używam współczynnika powiększenia 1,25. Wynika to z this issue.

+0

To wydaje się działać dobrze. Robię to dynamicznie za pomocą funkcji "oceny" i działa dobrze, np. document.querySelector ("body"). Style.height = "calc (297mm * 1,25)" – Ian

Powiązane problemy