diff --git a/lib/itextpdf-5.5.13.4.jar b/lib/itextpdf-5.5.13.4.jar new file mode 100644 index 0000000..2846692 Binary files /dev/null and b/lib/itextpdf-5.5.13.4.jar differ diff --git a/resources/WEB-INF/jsp/profile.jsp b/resources/WEB-INF/jsp/profile.jsp index c86abfb..f3a1f0f 100644 --- a/resources/WEB-INF/jsp/profile.jsp +++ b/resources/WEB-INF/jsp/profile.jsp @@ -45,10 +45,10 @@

${wordBundle.getWord("photo")}

- + +
-
- + @@ -56,10 +56,13 @@ +
- + - + + +
diff --git a/src/ru/charm/back/controller/ProfileController.java b/src/ru/charm/back/controller/ProfileController.java index 9999bb6..f6f2bed 100644 --- a/src/ru/charm/back/controller/ProfileController.java +++ b/src/ru/charm/back/controller/ProfileController.java @@ -1,5 +1,9 @@ package ru.charm.back.controller; +import com.itextpdf.text.Document; +import com.itextpdf.text.DocumentException; +import com.itextpdf.text.pdf.PdfPTable; +import com.itextpdf.text.pdf.PdfWriter; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.MultipartConfig; import jakarta.servlet.annotation.WebServlet; @@ -12,11 +16,12 @@ import ru.charm.back.mapper.RequestToProfileUpdateDtoMapper; import ru.charm.back.service.ProfileService; import java.io.IOException; +import java.io.OutputStream; import java.util.Optional; import static jakarta.servlet.http.HttpServletResponse.SC_NOT_FOUND; -@WebServlet("/profile") +@WebServlet("/profile/*") @MultipartConfig public class ProfileController extends HttpServlet { private final ProfileService service = ProfileService.getInstance(); @@ -26,22 +31,43 @@ public class ProfileController extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String sId = req.getParameter("id"); - String forwardUri = null; if (sId != null) { Optional optProfileDto = service.findById(Long.parseLong(sId)); - System.out.println("Optional profile" + optProfileDto.toString()); if (optProfileDto.isPresent()) { - req.setAttribute("profile", optProfileDto.get()); - forwardUri = "/WEB-INF/jsp/profile.jsp"; + ProfileGetDto profileGetDto = optProfileDto.get(); + if (req.getRequestURI().equals("/profile/pdf")) { + resp.setHeader("Content-Disposition", "attachment; filename=\"profile.pdf\""); + resp.setContentType("application/pdf"); + resp.setCharacterEncoding("UTF-8"); + + try(OutputStream os = resp.getOutputStream()) { + Document document = new Document(); + PdfWriter.getInstance(document, os); + + document.open(); + PdfPTable table = new PdfPTable(2); + table.addCell("Email"); + table.addCell(profileGetDto.getEmail()); + table.addCell("Name"); + table.addCell(profileGetDto.getName()); + table.addCell("Surname"); + table.addCell(profileGetDto.getSurname()); + document.add(table); + document.close(); + + } catch (DocumentException e) { + throw new IOException(e); + } + } else { + req.setAttribute("profile", profileGetDto); + req.getRequestDispatcher("/WEB-INF/jsp/profile.jsp").forward(req, resp); + } + } else { + resp.sendError(SC_NOT_FOUND); } } else { req.setAttribute("profiles", service.findAll()); - forwardUri = "/WEB-INF/jsp/profiles.jsp"; - } - if (forwardUri == null) { - resp.sendError(SC_NOT_FOUND); - } else { - req.getRequestDispatcher(forwardUri).forward(req, resp); + req.getRequestDispatcher("/WEB-INF/jsp/profiles.jsp").forward(req, resp); } }