Béton brut

HTML 2 PDF: wkhtmltopdf
⌜ Technologia ⌟

2010-05-19

Zadanie: przygotować dokument PDF zawierający wszystkie faktury wystawione przez system w ostatnim roku.

Problem: system nie zapisuje faktur w PDF-ach, są wyświetlane jako strony HTML na ekranie monitora i drukowane przy pomocy arkuszy stylów z odpowiednimi definicjami @media dla wydruków.

Problem: faktury, które trafią do dokumentu muszą wyglądać identycznie jak te dostępne w systemie. Napisanie zewnętrznego generatora, który na podstawie danych z bazy zapisze odpowiedni PDF będzie kłopotliwe i czasochłonne. 1

Problem: programy, które potrafiły generować PDF z HTML-a nie potrafiły robić tego dobrze. Większość była szlachetnie nieświadoma istnienia definicji w style.css — pamiętajmy — celem jest identyczny wygląd.

Rozwiązaniem byłoby zautomatyzowanie wydruków przy pomocy przeglądarki. Nie miałem za bardzo pomysłu jak tego dokonać. Do tego dochodzi okienko przed wydrukiem, którego chyba nie da się oskryptować.

Pokarmiłem wyszukiwarkę różnymi słowami kluczowymi i znalazłem projekt wkhtmltopdf, który zrobił mi dzień. WebKit HTML To PDF to jak ławo zgadnąć program zawierający w sobie silnik WebKit i wypluwający na jego podstawie PDF. Czego można chcieć więcej? Potrafi używać osobnych stylów, interpretuje JavaScript (więc nie ma problemu z robieniem zrzutu aplikacji generującej wygląd przez dżejkłery czy co tam teraz jest modne do fruwania elementów) i zmienić automatycznie kolorystykę na odcienie szarości, co pomaga przy drukowaniu. Innymi słowy robi jedną rzecz i robi ją dobrze.

Przykłady: piotrpotera.com, bronikowski.com, riddle.pl 2

Jak widać “tekst jest tekstem”, obrazki się wczytały, zewnętrzne czcionki także zaskoczyły. Jestem miło zaskoczony. Faktury nadal się konwertują. Jeden testowy przebieg trwa około pięciu godzin. Tę noc spędzę w objęciach kawy.

  1. dorzućmy do tego problem z kodowaniem, który powstał w wyniku dawnej aktualizacji MySQL-a do 4.1, która to wersja lubiła definiować latin1 dla pól tekstowych
  2. Strona Riddle się delikatnie popsuła. Nie żeby mnie to specjalnie dziwiło, on jest psuja od CSS, a wersji WebKita z którą zbudowany jest wkhtmltopdf na moim systemie nie znam.
QR for HTML 2 PDF: wkhtmltopdf