Skip to content

Generowanie PDF w Springu

Pracując przy projekcie Snake in The Pocket planowałem przygotować moduł raportu, w który pozwoli na generowanie PDF i jego ściągnięcie. Prezentuje pierwsze zaimplementowane rozwiązanie.

Założenia projektu Snake in The Pocket – tutaj.

Projekt oparty był o Spring Framework. W pierwszej wersji nie wykorzystałem Spring Boot, dlatego implementacja w pierwszej fazie różni się od tego, co będę chciał zrobić w kolejnych iteracjach projektu.

Generowanie PDF w Spring

Do wygenerowania potrzebujemy modułu iText. Za pomocą Mavena dołączamy go do zbioru naszych zależności.

Teraz możemy przejść do implementacji.

Stworzyłem klasę PDFBuilder, która odpowiada za zbudowanie i wygląd dokumentu PDF. Musimy pamiętać, żeby oznaczyć ją adnotacją @Component. U mnie znajduje się w niej tylko jedna klasa, która jako argumenty przyjmuję Map<String, Object>, Document, request i response.

Wygląda to tak:

Przejdźmy do tego, co jest w środku. Najpierw z modelu pobieram dane, które mają się znaleźć w tabeli. W moim przypadku jest to lista rachunków, więc od razu zapisuje ją do listy.

Do dokumentu dodaje nagłówek za pomocą metody add obiektu Document.

Jak widzicie, w dokumencie mają znaleźć się transakcje z danego konta. Dlatego całość będzie miała formę tabeli. Kolejny etap to zbudowanie tabeli. Tak naprawdę robimy tu kilka rzeczy:

  • wskazujemy rozmiar tabeli (liczbę kolumn i wierszy oraz odległości między wierszami)
  • określamy font wykorzystany w tabeli
  • określamy kolor pierwszego wiersza
  • nadajemy nazwy kolumn
  • i na koniec wypełniamy ją danymi

Pierwsze cztery części prezentuje poniżej:

Wypełnienie tabeli zostawiamy na koniec.

Na sam koniec musimy pamiętać o tym, żeby dodać stworzoną tabelę do dokumentu pdf!

Wywołanie generatora

No dobra. Mamy już zaimplementowany generator. Teraz czas go wywołać. Ja stworzyłem dla niego controller, który ma odpowiadać tylko za to.

Co się dzieje na tym etapie? Wybieram, z którego konta dane mają zostać pobrane. Następnie wypełniam listę rachunków właściwymi danymi. Na koniec zwracam model, który zawiera te rachunki.

Tyle!

Więcej tekstów z kategorii DEV

Published inDEV