Sep 22 2009

Prawn i prawnto - dlaczego jestem przeciw?

Category: Ruby On Rails początki, Ruby, Ruby on RailsSebastian Bobrowski @ 1:13 pm

Jednym z elementów programu do faktur, nad którym pracuje jest generowanie wielu rodzajów pdfów, od faktur vat, przez korygujące aż po zestawienia faktur miesięcznie, kwartalne, roczne.Nie ukrywam, że na początku przysparzało to sporo problemów. Głównym z nich były tabelki, które stanowią trzon każdego z powyższych dokumentów.  Przy nowej odsłonie pdfów chciałem wykorzystać bibliotekę Prawn wraz z pluginem PrawnTo za namową reklamy na railscasts. W przykładach wszystko wygląda dobrze, pare lini kodu i działa. Jednak problemy zaczynają się przy:

  • większej ilości tekstu
  • numeracji poszczególnych stron

Autorzy nie przewidzieli dobrej obsługi sytuacji gdy tekst umieszczony w komórce tabeli nie mieści się w jednym wierszu i musi zostać przeniesiony do kolejnych. Pozostawienie automatycznej konfiguracji dawało bardzo kiepskie rezulataty. Oczywiście można też samodzielnie liczyć szerokość każdego z wyrazów i dzielić je w razie potrzeby, gdy nie mieszczą się w jednym wierszu. Jednak obsługa szerokości znaków polskich nie działała poprawnie.Zdedydowanie gorszą sprawą, było numerowanie poszczególnych stron. O ile wersja podstawowa działała bez problemu, bo wystarczało zwiększać licznik wraz z każdą nową stroną to innej wersje są nieosiągalne. Próbowałem najbardziej popularną wersją obecną w dokumentach np: strona 2/7. Jest to konieczne dla wszystkich sprawdzających i czytających aby mieli pewność, że żadana ze stron nie zaginęła. Pytałem o tą sprawę na forum i kanale irc projektu jednak od autora biblioteki otrzymałem odpowiedź: “Nie da się :)”. Podobno mechanizm zamykania stron jest dość dziwny tzn, aby otworzyć nową stronę trzeba zamknąć poprzednią, a raz zamknięta strona nie może być ponownie otworzona. Takie rozwiązanie kompletnie wyklucza moją funkcjonalność. Autor próbował mi pomóc, ale razem doszliśmy do wniosku, że najłatwiejszym i najszybszym (tylko do implementacji) sposobem będzie:

  1. generowanie dokumentu
  2. zliczanie jego stron
  3. generowanie ponownie dokumentu znając już całkowitą liczbę stron z pierwszego punktu

Jednak to rozwiązanie nie bardzo przypadło mi do gustu z uwagi na to, że dokumenty już dość długo się generowały (parę sekund), a w wersji produktcyjnej pewnie zrobi się z tego około 10 z uwagi na dużo większą ilość danych.

Podsumowanie:Prawn polecam do prostych dokumentów takich jak prosta lista czy prawie pusta tabelka. Wtedy używa się tego bardzo przyjemnie. Jednak do bardziej wymagających zadań wciąż niezastąpione jest rfpdf.

3 Responses to “Prawn i prawnto - dlaczego jestem przeciw?”

  1. fidel says:

    Próbuję ugryźć rfpdf, ale ta dokumentacja, którą znalazłem jest bardzo enigmatyczna. Czy mógłbym prosić o polecenie czegoś sensownego? Albo jakiś przykład?

  2. Seban says:

    rfpdf też jest słabe, uzywałem tego tez do generowania faktur

  3. Sebastian Bobrowski says:

    @fidel - napiszę posta z przykładem
    @Seban, co innego polecasz z obsługą polskich znaków?

Leave a Reply