// Generate PDF byte[] pdf = session.getPage().printToPDF();
// Save or stream response sendPdfResponse(pdf); If you just need a PDF from your data , skip HTML: convertir jsf a pdf
document.close(); OpenPDF's HTML support is basic. For complex CSS, use Flying Saucer. Method 3: Headless Browser (for AJAX/rich JSF) For modern JSF with PrimeFaces, AJAX, JavaScript charts: Using Puppeteer (Java wrapper) <dependency> <groupId>com.github.kklisura.cdt</groupId> <artifactId>cdt-java</artifactId> <version>0.3.0</version> </dependency> Java code public void renderWithChrome() throws Exception ChromeDevToolsService service = ChromeDevToolsService.builder() .headless(true) .build(); ChromeDevToolsSession session = service.createSession(); // Generate PDF byte[] pdf = session