2008-10-06 7 views
35

Używam htmldoc przez jakiś czas, ale napotkałem dość poważne ograniczenia. Potrzebuję rozwiązania końcowego do pracy na Linuksie. Będę wywoływać tę bibliotekę/narzędzie/aplikację z aplikacji Perla, więc wszelkie interfejsy Perla będą dodatkiem.Jak mogę zautomatyzować konwersję HTML na PDF?

Odpowiedz

8

PrinceXML to najlepszy, jaki widziałem (analizuje zwykły HTML oraz XML/XHTML). Jak to jest najlepsze? Well, it passes the acid2 test które moim zdaniem było cholernie imponujące

Jest to jednak dość kosztowne

+2

Miałem ten sam problem. Niedawno oceniłem Księcia XML i mogę ręczyć za to, że jest to CAŁKOWICIE świetna aplikacja. Szybkość i jakość wyników są po prostu niewiarygodne. – cletus

+0

Po co płacić wiele tysięcy dolarów, gdy dostępne jest darmowe oprogramowanie o otwartym kodzie źródłowym, które również przechodzi test Acid 2? http://weasyprint.readthedocs.io WeasyPrint bardzo zalecane. Fenomenalne wyniki. – FlorianB

2

Nie będę twierdził, że jest to "najlepsze" rozwiązanie, ale jest to rozwiązanie "a", którego używałem.

HTML wejściowe ->HTML 2 PS ->PS 2 PDF -> PDF Wyjście

1

To byłoby całkowite przesada, ale można pobrać i zainstalować mirth. Jest to silnik routingu wiadomości, ale ma możliwość konwersji html na pdf, więc możesz ustawić go tak, aby pobierał plik html w folderze, konwertował do formatu pdf i upuszczał plik PDF w tym samym lub innym folderze. Tak jak mówiłem, przesada, trochę krzywej uczenia się, ale jest darmowa i java, więc możesz uruchomić ją na Linuksie, jeśli chcesz. A wszystko, co powinna zrobić twoja aplikacja perl, to zrzucenie pliku html do pliku.

7

Zrobiłem dla ciebie trochę wyszukiwania i wymyśliłem dwie opcje. Mogło być więcej, moja strategia google polegała na wypróbowaniu "wiersza poleceń w webkit pdf" i "wiersza polecenia gecko pdf", po prostu szukając programów z poleceniami, które osadzają dwa popularne silniki renderujące o otwartym kodzie źródłowym w renderers wiersza poleceń. Oto co znalazłem:

Firefox command-line printer - wyjścia do PDF i PNG

wkpdf - jednocześnie jest to dla Mac, to chyba całkiem przenośny.

53

Niestety, by odkryć ten stary post, ale okazało się, najpierw w moim poszukiwaniu najlepszego narzędzia konwersji HTML/PDF. Na Linuksie wkhtmltopdf jest bardzo dobry (bierze pod uwagę CSS między innymi) i GPL.

+0

Aby wesprzeć twój punkt, 1) działa jak zaklęcie 2) korzysta z mechanizmu renderowania Webkit, a qt co oznacza, że ​​może korzystać z aktualizacji. Chociaż ostatni RC został wydany w lutym 2011. – kommradHomer

+0

doskonałe oprogramowanie, dzięki – RockScience

+0

Aby zaktualizować komentarz @ kommradHomer, projekt jest nadal aktywny; najnowsza stabilna wersja została wydana w zeszłym miesiącu. Jest również dostępny w oficjalnych repozytoriach Ubuntu, ale w momencie pisania kilku wersji z tyłu. – Arild

-1

Możesz chcieć sprawdzić "Usługa konwersji dokumentów" przez Peernet (pod numerem http://www.peernet.com/conversion-software/batch-document-converter/). Działa to jako usługa na komputerze z systemem Windows lub Windows Server. Otwiera dokumenty HTML w przeglądarce internetowej, a następnie drukuje je za pomocą sterownika drukarki w celu utworzenia dokumentów PDF, tak aby dokument PDF wyglądał dokładnie tak, jakbyś wydrukował dokument HTML z przeglądarki.

1

Trzeba spojrzeć na http://phantomjs.org/

konwersji można zrobić przez mały skrypt rasterize.js a następnie wydawanie

phantomjs rasterize.js 'http://en.wikipedia.org/w/index.php?title=Jakarta&printable=yes' jakarta.pdf 
12

WeasyPrint produkuje ładne plików PDF z możliwością wyboru tekstu i linków.

weasyprint input.html output.pdf 

Jeśli używasz wkhtmltopdf Zamiast tego, spróbuj następujących opcji:

wkhtmltopdf --margin-bottom 20mm --margin-top 20mm --minimum-font-size 16 ... 
+0

To powinna być wybrana odpowiedź, jest darmowa, open-source, i tak, wyniki są fenomenalne! Wysoce polecany. – FlorianB

4

Jest nowy tryb bezgłowy od Chrome 59. Jak wszystkie inne rozwiązania naprawdę walczyć z nowszych (lub już nie tak nowy) Funkcje CSS, takie jak Flexbox, w moim przypadku było to jedyne rozwiązanie pozwalające uzyskać prawidłowe wyjście PDF.

Aby utworzyć plik pdf z lokalnego pliku html, należy użyć następującej komendy: chrome --headless --disable-gpu --print-to-pdf file:///path/to/myfile.html.

Dla systemu Mac OS pod nazwą chrome z /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome.

Jedyną wadą, jaką zauważyłem do tej pory, jest to, że (obecnie) nie można przekazać html przez stdin, ale utworzenie tymczasowego pliku nie stanowi większego problemu.

Więcej informacji można znaleźć https://developers.google.com/web/updates/2017/04/headless-chrome#create_a_pdf_dom

Update: Jak się okazuje, Chrome faceci najprawdopodobniej zapewnić jakiś moduł węzła do tego zadania, które w końcu potępiać tryb bezgłowe (https://bugs.chromium.org/p/chromium/issues/detail?id=719921).

Najlepszym rozwiązaniem byłoby zastosowanie podejścia opartego na węzłach przy użyciu modułu lalkarza , zgodnie z dokumentacją pod numerem https://developers.google.com/web/updates/2017/04/headless-chrome#node i wydrukowanie strony za pomocą polecenia Page.printToPDF, które umożliwia również dodatkową konfigurację.

Oczywiście można również połączyć się z websocket konsoli debugowania z dowolnego innego środowiska niż węzeł (to znaczy skrypt PHP).