Użyłem PhantomJS do generowania obrazów PNG ze stron internetowych i może on generować PDF, a jakość jest zwykle dobra. Właściwość nazywa się przechwytywaniem ekranu i opisano here. Obsługiwane formaty to PNG, JPEG, GIF i PDF.
Po konwersji do formatu PDF, teksty stron zachowują się jak teksty.
Po przetestowaniu kilku innych bibliotek lub programów, PhantomJS znalazł najdoskonalsze rozwiązanie. PhantomJS używa WebKit, prawdziwego układu i mechanizmu renderowania.
Kilka przykładów znajduje się w https://github.com/ariya/phantomjs/wiki/Examples. W sekcji renderowania/rasteryzacji tam jest mowa następujący skrypt, który pomaga w procesie:
rasterize.js rasterizes a web page to image or PDF
PhantomJS QuicStart Guide mówi:
Produkcja wyjściowy PDF jest to możliwe, na przykład z Wikipedii:
phantomjs rasterize.js 'http://en.wikipedia.org/w/index.php?title=Jakarta&printable=yes' jakarta.pdf
lub podczas tworzenia drukarki gotowe ściągawki:
phantomjs rasterize.js http://www.nihilogic.dk/labs/webgl_cheat_sheet/WebGL_Cheat_Sheet.htm webgl.pdf
Testowałem pdf generacji kilku stronach, a jeśli strona spełnia standardy, to daje dobre rezultaty. Tekst można wybierać i drukować jako wysokiej jakości, ale na niektórych stronach układ w pdf nie jest taki sam jak w png.Poniżej dwa zrzuty ekranu, które są generowane za pomocą poleceń:
$ phantomjs rasterize.js 'http://windows.microsoft.com/en-US/windows/home' microsoft.png
$ phantomjs rasterize.js 'http://windows.microsoft.com/en-US/windows/home' microsoft.pdf
Przetestowałem również http://lab.simurai.com/buttons/. Plik pdf i png był bardzo identyczny, a poniżej znajduje się próbka pdf, którą zrasteryzowałem do 5641 pikseli i przycinałem jej region. Podobnie jak w poprzednim przykładzie PDF, tekst można wybrać w formacie PDF i jak widać, tekst jest ostry (bez antialias!).
INSTALACJA
Próbowałem najpierw zainstalować bibliotekę Qt i PhantomJS na Centos5 kompilacji ze źródeł, ale bez powodzenia. Następnie na Ubuntu 11.10, a proces był bezbolesny:
Pobrałem http://phantomjs.googlecode.com/files/phantomjs-1.7.0-linux-x86_64.tar.bz2 i ekstrahowano go za pomocą
tar -xjvf phantomjs-1.7.0-linux-x86_64.tar.bz2
A potem kopiowane phantomjs wykonywalny do bin dir systemu:
$ cp phantomjs-1.7.0-linux-x86_64/bin/phantomjs /usr/local/bin/phantomjs
i phantomjs był gotowy biegać.
Jeśli wygenerowany plik PDF nie jest dobry, możesz spróbować zaktualizować pakiet Webkit, ale przypuszczam, że wynik powinien być wystarczający. PhantomJS ma doskonały cykl aktualizacji, więc błędy powinny być naprawione w rozsądnym czasie.
PhantomJS FAQ ma również dobre informacje o możliwościach.
Dlaczego to wciąż jest zamknięte? Każde pytanie powoduje więcej "nagabywania debaty, argumentów, sondowania lub rozszerzonej dyskusji" niż to. –
wkhtml2pdf teraz * robi * renderuj płótno ... zobacz wkhtmltopdf.org. Kciuki w górę za wkhtml2pdf ... to jest naprawdę niesamowite mieć tylko jeden plik wykonywalny, zamiast zajmować się 7000 klasami java z fopem –