2012-10-02 14 views
15

Szukam rozwiązania do generowania pliku PDF z dokumentu HTML5/CSS3, serveride.HTML5 do serwera plików PDF

Wiem, że istnieje wiele rozwiązań do tworzenia plików PDF (takich jak FOP, iText ...), ale muszę się upewnić, że będą wyglądać w 100% tak samo, jak strona HTML. Tak więc nie chcę tworzyć elementu PDF przez element taki jak FOP lub iText.

Rzeczywiście coś powinno istnieć, ponieważ to właśnie robisz, gdy drukujesz jako plik PDF z przeglądarki. Idealnie rozwiązanie powinno zawierać mechanizm przeglądarki internetowej (webkit lub gecko). Próbowałem wkhtmlToPdf ... ale wynik nie jest dobry (płótno HTML5 nie jest nawet drukowane ...)

Jeśli ktoś ma pomysł jakiegoś rozwiązania, za darmo lub za darmo, w jakimkolwiek języku ... będę doceń DUŻO! Dzięki!

+0

Dlaczego to wciąż jest zamknięte? Każde pytanie powoduje więcej "nagabywania debaty, argumentów, sondowania lub rozszerzonej dyskusji" niż to. –

+1

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 –

Odpowiedz

0

W jakim języku korzystasz po stronie serwera?

Tworzenie zrzutu ekranu strony, a następnie konwertowanie obrazu do pliku PDF zapewniłoby najlepsze wyniki. Wyświetliłaby stronę dokładnie taką samą, jaka byłaby wyświetlana w przeglądarce.

Istnieje kilka narzędzi zrzutu ekranu jako usług, takich jak browshot.com. Spójrz na API i supported languages.

Możesz też użyć swojego narzędzia. Dla node.js istnieje fajny projekt na github.

+0

Dziękuję za odpowiedź. Używam Java po stronie serwera, ale jestem otwarty na użycie czegoś innego dla to generowanie PDF. Niestety zrzut ekranu nie jest opcją, ponieważ wygenerowany plik PDF powinien być prawdziwym plikiem PDF dla profesjonalnej drukarki (na przykład tekst powinien być tekstem, a nie pikselami). – Olivier

+0

Konwersja obrazu do pliku PDF to naprawdę zły pomysł - stracisz cały tekst, więc nie będzie ładnie powiększany i nie będzie można go kopiować ani wklejać ani wyszukiwać. Dzięki temu plik PDF będzie większy, niż powinien. Jeśli użyjesz wkHtmlToPdf lub phantomJs lub normalnej opcji drukowania w przeglądarce, tekst przejdzie do pliku PDF jako tekst, a każda grafika wektorowa będzie również wprowadzana jako wektory, unikając tych problemów. – rjmunro

1

W zależności od złożoności kodu HTML można użyć XmlWorker, który jest projektem twórców iText i używa iText.

23

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 

Example of png and pdf generation using Phantomjs

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!).

CSS3Buttons

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.

Powiązane problemy