JAVA 06 (p) - SPARK framework - pdf /updated 29.04.2022/

JAVA 06 (p) - SPARK framework - pdf /updated 29.04.2022/
ukryj menu
SPEC
aktualizacja: 2022-04-29 10:17:22
0. zmiany na stronie html

odświeżenie bez restartu serwera:

public static void main(String[] args) {

     // podajemy ścieżkę bezwzględną do folderu
     externalStaticFileLocation("c:/.../.../public");

     //zamiast
     // staticFiles.location("/public");


}
kopiuj


1. opis pracy na dziś:

a) na stronie admin.html można wysłać żądanie fetchem, aby na serwerze wygenerowała się losowa baza danych samochodów
b) każdemu samochodowi można wygenerować fakturę (plik pdf)
c) można pobrać fakturę do przeglądarki, jeśli jest wygenerowana


2. routing tej części aplikacji

przybywa strona admin.html i poniższe endpointy

post("/generate", (req, res) -> ...); // generowanie bazy aut
post("/invoice", (req, res) -> ...); // generowanie faktury
get("/invoices", (req, res) -> ...); // pobranie fakturykopiuj



3. biblioteka do generowania pdf-ów

a) pom.xml

<dependency>
   <groupId>com.itextpdf</groupId>
   <artifactId>itextpdf</artifactId>
   <version>5.5.10</version>
</dependency>kopiuj


b) wygenerowanie najprostszego pliku pdf w lokalizacji /katalog na serwerze


Document document = new Document(); // dokument pdf
String path = "katalog/plik.pdf"; // lokalizacja zapisu
PdfWriter.getInstance(document, new FileOutputStream(path));
      
document.open();
Font font = FontFactory.getFont(FontFactory.COURIER, 16, BaseColor.BLACK);
Chunk chunk = new Chunk("tekst", font); // akapit

document.add(chunk);
document.close();kopiuj


uwaga na sugestie kompilatora, wielokrotnie będzie trzeba dodawać blok try ... catch

c) pozostałe przydatne na dziś metody

akapit

Paragraph p = new Paragraph("paragraf", font);
document.add(p);kopiuj

image

Image img = Image.getInstance("path_to_image.jpg");
document.add(img);kopiuj



4. pobranie pdf-a

do przeglądarki jako załącznik, po kliknięciu a-href, w get

res.type("application/octet-stream"); //
res.header("Content-Disposition", "attachment; filename=plik.pdf"); // nagłówek

OutputStream  outputStream = res.raw().getOutputStream();
outputStream.write(Files.readAllBytes("katalog/plik.pdf")); // response pliku do przeglądarkikopiuj


uwaga na sugestie kompilatora, wielokrotnie będzie trzeba dodawać blok try ... catch


5. klasa Cars

- przybywa dowolne pole (true/false) informujące czy faktura została wygenerowana dla danego uuid
- jeśli jest faktura, widać też znacznik a href do jej pobrania

6. pobranie danych do faktury

szukane dane - użyj streamów - patrz lekcja6b
kolory - użyj mapy wiążącej nazwę z kolorem z biblioteki itext

HashMap<String, BaseColor> map = new HashMap<>() {{
   put("red", BaseColor.RED);
   ...
   ...
}};kopiuj