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.pl2
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.
« Bajka z morałem | Źle, gorzej »
Dotarłeś do końca. Czas na nową przygodę.
Eri pokonuje korporacje ołówkiem. Czerski, Piotr dziwi się światu. Waglowski prawi o prawie. Maciej występuje w roli służbisty ateistyczno-sceptystycznej religii. Patryk maca się z technologią. Piwnice i trywialne informacje w tę stronę. Vontrompka, czyli komentarz psychodeliczny.
Są też tacy, którzy gadają. O filmach, scepty-cyźmie, japońskich bajeczkach. Nie zapomnij też, że trzeba rozumieć popularną naukę.
May 20th, 2010 at 05:17
No w mordeczkę! Teraz zrobię to, co zawsze chciałem zrobić – wydam książkę z bloga. Inni wydają, to ja nie mogę?
May 20th, 2010 at 08:08
Wydaj! Z KOMENTARZAMI!
May 20th, 2010 at 22:42
jak pod winde to gmouse + pdfcreator zalatwiaja sprawe. od lat tak “drukuje” gazety do czytania offline. gmouse zapamietuje ruchy i kliki myszki, pdfcreator skleja do kupy. proste jak sranie, nic nie trzeba kombinowac, mozna uzyc dowolnej przgladarki. WGIWYS
May 20th, 2010 at 22:48
@Valwit
Dzięki za info, obawiam się jednak że dopisanie widoku, który bym mógł oskryptować zajęłoby tyle samo czasu co znalezienie tego i napisanie generatora. Poza tym przyda się do innych rzeczy, ale nazwa do “koszyczka z zabaweczkami”.
May 21st, 2010 at 07:32
Tego mi było trzeba. Właśnie czegoś takiego miałem zacząć szukać. Dzięki.
May 30th, 2010 at 16:33
BEGIN GEEK BLOCK
Popsuła się, bo min wspierana szerokość to 1000px – poniżej odpowiednie @media query zmienia trochę CSS – zgaduję, że nie działają one przy konwersji, bo nie ma idei dynamicznego viewportu. Stąd każda kolumna ma 50% dostępnego miejsca, a że nie jest to już 500px, więc część rzeczy jest ucięte.
END GEEK BLOCK
June 15th, 2010 at 02:07
Testowy wpis…
Spodobał mi się Twój artykuł, umieściłem Trackbacka na swoim blogu do tego wpisu….
June 15th, 2010 at 13:47
emilu, ja pierdolę, wszechświat jest okrutny.
zmarnowałem 1.5 dnia na korzystanie z prawn i ręcznie składanie pdfa, zanim dziś rano znalazłem wkhtmltopdf. po całym dniu rzeźbienia pięknego htmla konwertowanego do pdfa, zupełnie losowo, wszedłem na twojego bloga – po jakichś kilku miesiącach nieobecności.
no kurwa.
July 17th, 2010 at 08:25
A ja znalazłem dziś jeszcze coś takiego:
http://lateral.netmanagers.com.ar/weblog/posts/BB901.html
http://cutycapt.sourceforge.net/
+ rozwiązanie w Pajtonie