Rotativa – eleganckie dokumenty PDF z kodu HTML

Chciałem Wam dzisiaj przedstawić fajną bibliotekę dla .net opartą na wkhtmltopdf do generowania dokumentów PDF z kodu HTML. Bardzo długo szukałem optymalnego dla mnie rozwiązania, aż w końcu trafiłem właśnie na Rotativę. Próbowałem wielu rozwiązań, ale każde miało swoje wady. Długi czas próbowałem walczyć z iTextSharp, ale składnia dokumentu PDF była mocno odpychająca, a licencja nie była zachęcająca. Później trafiłem właśnie na wkhtmltopdf, ale i ta biblioteka miała dwie zasadnicze wady, które mnie zniechęciły. Chodzi o konieczność posiadania pliku .exe na komputerze klienta (poprawcie mnie jeśli się mylę) oraz problemy z generowaniem dokumentów z widoków, które wymagają autoryzacji. Niestety było to dla mnie nie do zaakceptowania, ale właśnie wtedy znalazłem bibliotekę, która rozwiązała moje wszystkie problemy i była nią właśnie Rotativa. Można ją znaleźć w NuGet Package Manager. Samo zastosowanie jest bardzo proste. Tworzymy akcję w kontrolerze tak jak dla zwykłego widoku, jednak z tej akcji zwracamy nie

return View(model);

a jeden z przygotowanych typów przez twórców np (1).

return new ViewAsPdf(model) { FileName = String.Format("Szczegoly_zamowienia_nr_{0}", model.Id) };

Można również zastosować po prostu (2)

return new ViewAsPdf(model);

Drugie rozwiązanie ma jednak dwie wady:

  • Nie mamy wpływu na nazwę wygenerowanego dokumentu
  • Dokument jest otwierany bezpośrednio w czytniku PDF w przeglądarce. Zdarzało się, że plik drukowany bezpośrednio z przeglądarki „wykrzaczał się” i drukował jakiś badziew. W pierwszym podejściu dokument jest bezpośrednio kierowany do ściągnięcia ze zdefiniowaną przez nas nazwą, a drukarka nie ma żadnych problemów, żeby sobie z nim poradzić.

Widok dokumentu to już tradycyjny kod HTML. Ważne jest (przynajmniej jeżeli chcemy drukować jakieś dokumenty), aby widok nie korzystał z layoutu. Do widoku możemy również bez problemu dołączać swoje style CSS, ale niewszystkie fonty są obsługiwane. Czasami spotykałem się, że niektóre osoby miały problemy z łamaniem tabelki w środku wiersza, ale i na to jest łatwy sposób 🙂

<tr style="page-break-inside: avoid;"></tr>

Gwoli ścisłości – spotykałem się również z komentarzami, że Rotativa nie radzi sobie z polskimi znakami, ale jak do tej pory nie spotkałem takiego problmu.

Liczę na to, że się takim podejściem zainteresujecie i skorzystacie. Jeżeli jednak macie doświadczenia z innymi bibliotekami do tworzenia dokumentów PDF to chętnie je poznam!

Czekam na komentarze i do zobaczenia 🙂

Reklamy

10 comments

  1. Pingback: dotnetomaniak.pl
  2. Czy testowałeś wydajność dla większych plików? Ile zajmuje generowanie dokumentu który ma ponad 50 stron?

    Ja używając wkhtmltopdf miałem problem z borderami o grubości 1px. Bardzo słabo to wyglądało. Czy ten problem dalej występuje?

    Lubię to

  3. Z wkhtmltopdf, jedynym sposobem na użycie header-ów i footer-ów na każdej stronie, było zapisanie ich zawartości do pliku na dysku. Czy w tej bibliotece zostało to inaczej rozwiązane?

    Lubię to

    1. Powiem Ci tak. Headerow i footerow nigdy nie miałem potrzeby użyć wiec nie wiem czy tak jest. Jeżeli chodzi o szybkość to dokument, który ma 40 stron generuje się nieznacznie dłużej od takiego co ma ich 4. Nie sterujemy elektrownia atomowa wiec różnica jednej sekundy nie ma dla mnie znaczenia 🙂 z boarderami 1px nie miałem żadnych kłopotów 🙂

      Lubię to

  4. Rotativa to biblioteka która korzysta z wkhtmltopdf. I w jednym i w drugim wypadku trzeba posiadać plik exe 😉 wszystko co zrobisz za pomocą Rotativa (odnoście samych dokumentów pdf!) zrobisz tez wkhtmltopdf. Odwrotnie może nie być już tak kolorowo 🙂 tylko tu mamy fajny interface i wiele już za nas zrobi ta biblioteka 😉

    Lubię to

    1. Oczywiście, tak jak pisałem w poście jest to biblioteka oparta na wkhtmltopdf. Nie byłem do końca pewny co do pliku .exe. W wkhtmltopdf, wydaje mi się, że .exe musi być na komputerze klienta w rotativie wkhtmltopdf jest na serwerze. Nie korzystałem długo z czystego wkhtmltopdf i nie wiem czy plik .exe również może być na serwerze. Odrzuciła mnie walka związana z generowaniem dokumentów z akcji wymagających autoryzacji. To w moim przypadku było dyskfalifikujące, a w bibliotece, którą opisałem ten problem nie występuje, no i kawał roboty jak wspomniałeś jest odwalony za nas i właśnie na tym polega fajność Rotativy 🙂

      Lubię to

      1. nie no w pierwszym rozwiązaniu też nie trzeba nic na klienta wrzucać 🙂 a polecam jeszcze wypróbować TuesPechkin 🙂 tu już nie ma żadnego exe a oparte jest również na wkhtmltopdf. Przy 300 użytkownikach zrezygnowanie z uruchamiania procesu daje niezłego kopa

        Lubię to

      2. Czyli się myliłem 🙂 Dzięki za informację! TuesPechkin wygląda zacnie i z pewnością w kolejnym projekcie nie zawaham się go użyć 🙂 Dzięki!

        Lubię to

  5. Jeżeli chodzi o krzaki w przeglądarce to problem Firefoxa. Chłopaki w Mozilli zrobili własny silnik wyświetlania pdf i nie poszło im najlepiej, co podobno sami przyznają. I nie jest to związane z biblioteką do generowania pdf. Rozwiązaniem jakie daliśmy klientowi to zmiana ustawień przeglądarki zostało ono zaakceptowanie.

    Lubię to

    1. To całkiem prawdopodobne, korzystam z Firefoksa, ale właśnie nie trafiłem na tę informację także dzięki! Dziwi mnie tylko, że testerzy tego nie wykryli. Z drugiej strony podanie dokumentu od razu do ściągnięcia wydaje mi się dobrym rozwiązaniem, bo a) jesteśmy niezależni od przeglądarki, a nawet zamiast ściągać dokument możemy go otworzyć w czytniku, b) mamy wpływ na nazwę dokumentu, który udostępniamy do pobrania 🙂

      Lubię to

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Wyloguj / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Wyloguj / Zmień )

Facebook photo

Komentujesz korzystając z konta Facebook. Wyloguj / Zmień )

Google+ photo

Komentujesz korzystając z konta Google+. Wyloguj / Zmień )

Connecting to %s