[Nowy gem] Łatwe generowanie plików PDF

Witajcie,

Pracuję nad rozbiciem monolitycznej aplikacji railsowej na mniejsze i niezależne elementy (gem-y).
Efektem tych prac jest na początek dość uniwersalny gem do łatwego generowania plików pdf z szablonów slim i dostarczonych danych w hash-u.

http://rubygems.org/gems/slim2pdf

Jestem w trakcie pisania kolejnego gem-a do generowania faktur w pdf, który będzie korzystał właśnie ze slim2pdf.

Wszelkie konstruktywne uwagi, komentarze i pomysły mile widziane :smile:

Pozdrawiam

Piotr Macuk


Nauka Ruby on Rails po polsku: http://szkolenie-ruby-on-rails.macuk.pl/

2 Likes

Rzuć okiem na to:

Z uwag praktycznych:

  • wkhtmltopdf jest dosyć niestabilny i często trzeba dostarczać własną binarkę (czasem lepiej działa 0.9, czasem 0.11, w dodatku często musi być skompilowana ze spatchowanym qt). Dlatego https://gist.github.com/swistak/8423518#file-pdf_generator-rb-L57 - wybiera automatcznie lokalną wersję jak jest.
  • Debugowanie jest naprawdę pita jeżeli nie zapisujesz gdzieś w międzyczasie tego htmla.
  • Większość serwerów wymaga xvfb żeby wkhtmltopdf zadziałał ( https://gist.github.com/swistak/8423518#file-pdf_generator-rb-L57 ) dobrze by było żebyś dodał opcję jego włączenia.
  • Warto logować (także np. jako komentarz w generowanym htmlu), jaka dokładnie komenda wkhtml (z wszystkimi parametrami), została wykorzystana do wygenerowania pdfa. Pozwala to łatwo zreprodukować błędy.

Od dawien dawna zabierałem się za coś podobnego, miło że ktoś inny znalazł na to czas. Warto zobaczyć jak to robi pdfkit (także korzysta z wkhtmltopdf)

W giscie masz też mój (wypracowany metodą prób & błędów) szablon css służący jako baza do projektów korzystających z wkhtmltopdf

Z tiþów które mogę jeszcze podać to - uwaga na floaty - strasznie się gryzą z page-break-inside: avoid i generalnie wszystkimi komendami page-break

Hej,

Wielkie dzięki za feedback i gist-a. CSS przyda mi się do gem-u produkującego faktury :slight_smile:

Do slim2pdf wprowadzę logowanie oraz możliwość własnej definicji komendy wywołującej wkhtmltopdf. To powinno załatwić sprawę z różnymi konfiguracjami serwerów, xvfb itp. Zrobię też lepszą obsługę błędów i wyjątków w momencie wywoływania wkhtmltopdf.

Wygenerowany HTML można zapisać metodą save_to_html(html_path). Do debugowania takie rozwiązanie powinno wystarczyć.

Pozdrawiam :slight_smile:

Piotr Macuk


Nauka Ruby on Rails po polsku: http://szkolenie-ruby-on-rails.macuk.pl/

Hej,

Właśnie wydałem nową wersję gem-a slim2pdf (0.0.2).
Zgodnie z sugestiami @swistak84 dodałem możliwość ustawienia własnej komendy wkhtmltopdf oraz wskazania loggera.

Jeśli użyjecie slim2pdf w Railsach logowanie ustawi się automatycznie.

Pozdrawiam :slight_smile:

Piotr Macuk


Nauka Ruby on Rails po polsku: http://szkolenie-ruby-on-rails.macuk.pl/

Do generowania prostych PDF-ów czasem wystarczy dołączyć stosowny arkusz styli (print) i użyć opcji “Drukuj do pliku” w Chrome. Zastosowałem to rozwiązanie do drukowania faktur i świetnie się sprawdza.

Tak, pod warunkiem, że robi to człowiek.

Jeśli PDF-y generuje system, takie rozwiązanie nie przejdzie. Na przykład przy seryjnym generowaniu umów/faktur ze skryptu w Ruby albo wysyłaniu wygenerowanych dokumentów mailem z automatu.

Pozdrawiam :slight_smile:

Piotr Macuk


Nauka Ruby on Rails po polsku: http://szkolenie-ruby-on-rails.macuk.pl/