Salut,
je cherche à créer un contrôleur avec spring qui me permettra de générer un pdf avec possibilité d'enregistrement.
J'ai utilisé la librairie itext et j'ai pratiquement réussi. il me manque la mise en page de mon contenu pdf.
Comment puis je centrer mon tableau de contenu pdf et de mettre la date au format dd/mm/yyyy en haut à gauche
voici mon code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82 import com.itextpdf.text.Document; import com.itextpdf.text.DocumentException; import com.itextpdf.text.Element; import com.itextpdf.text.Font; import com.itextpdf.text.FontFactory; import com.itextpdf.text.Phrase; import com.itextpdf.text.pdf.PdfPCell; import com.itextpdf.text.pdf.PdfPTable; import com.itextpdf.text.pdf.PdfWriter; import dev.bean.City; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; public class GeneratePdfReport { public static ByteArrayInputStream citiesReport(List<City> cities) { Document document = new Document(); ByteArrayOutputStream out = new ByteArrayOutputStream(); try { PdfPTable table = new PdfPTable(3); table.setWidthPercentage(60); table.setWidths(new int[]{1, 3, 3}); Font headFont = FontFactory.getFont(FontFactory.HELVETICA_BOLD); PdfPCell hcell; hcell = new PdfPCell(new Phrase("Id", headFont)); hcell.setHorizontalAlignment(Element.ALIGN_CENTER); table.addCell(hcell); hcell = new PdfPCell(new Phrase("Name", headFont)); hcell.setHorizontalAlignment(Element.ALIGN_CENTER); table.addCell(hcell); hcell = new PdfPCell(new Phrase("Population", headFont)); hcell.setHorizontalAlignment(Element.ALIGN_CENTER); table.addCell(hcell); for (City city : cities) { PdfPCell cell; cell = new PdfPCell(new Phrase(city.getId().toString())); cell.setVerticalAlignment(Element.ALIGN_MIDDLE); cell.setHorizontalAlignment(Element.ALIGN_CENTER); table.addCell(cell); cell = new PdfPCell(new Phrase(city.getName())); cell.setPaddingLeft(5); cell.setVerticalAlignment(Element.ALIGN_MIDDLE); cell.setHorizontalAlignment(Element.ALIGN_LEFT); table.addCell(cell); cell = new PdfPCell(new Phrase(String.valueOf(city.getPopulation()))); cell.setVerticalAlignment(Element.ALIGN_MIDDLE); cell.setHorizontalAlignment(Element.ALIGN_RIGHT); cell.setPaddingRight(5); table.addCell(cell); } PdfWriter.getInstance(document, out); document.open(); document.add(table); document.close(); } catch (DocumentException ex) { Logger.getLogger(GeneratePdfReport.class.getName()).log(Level.SEVERE, null, ex); } return new ByteArrayInputStream(out.toByteArray()); } }quand j'appel mon controleur : http://localhost:8080/rest/pdfreport
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 package com.zetcode.controller; import com.zetcode.bean.City; import com.zetcode.service.ICityService; import com.zetcode.util.GeneratePdfReport; import java.io.ByteArrayInputStream; import java.io.IOException; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.InputStreamResource; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; @RestController public class MyController { @Autowired ICityService cityService; @RequestMapping(value = "/pdfreport", method = RequestMethod.GET, produces = MediaType.APPLICATION_PDF_VALUE) public ResponseEntity<InputStreamResource> citiesReport() throws IOException { List<City> cities = (List<City>) cityService.findAll(); ByteArrayInputStream bis = GeneratePdfReport.citiesReport(cities); HttpHeaders headers = new HttpHeaders(); headers.add("Content-Disposition", "inline; filename=citiesreport.pdf"); return ResponseEntity .ok() .headers(headers) .contentType(MediaType.APPLICATION_PDF) .body(new InputStreamResource(bis)); } }
j'ai un pf mais le contenu n'est pas centré et je n'ai pas la date du jour en haut à gauche et je veux aussi ajouter l'image en haut à droite.
Quelqu'un a une idée?
Partager