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
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("/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
document.add(p);kopiuj
image
Image img = Image.getInstance("path_to_image.jpg");
document.add(img);kopiuj
document.add(img);kopiuj
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
put("red", BaseColor.RED);
...
...
}};kopiuj