package com.imprimelibros.erp.pdf; import com.openhtmltopdf.outputdevice.helper.BaseRendererBuilder; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import java.io.ByteArrayOutputStream; @Service public class PdfRenderer { @Value("classpath:/static/") private org.springframework.core.io.Resource staticRoot; public byte[] renderHtmlToPdf(String html) { try (var baos = new ByteArrayOutputStream()) { var builder = new com.openhtmltopdf.pdfboxout.PdfRendererBuilder(); builder.useFastMode(); // 👇 Base URL para que pueda resolver /assets/css/ y /img/ builder.withHtmlContent(html, staticRoot.getURL().toString()); // .../target/classes/static/ // (Opcional) Registrar fuentes TTF builder.useFont(() -> getClass().getResourceAsStream("/static/assets/fonts/OpenSans-Regular.ttf"), "Open Sans", 400, BaseRendererBuilder.FontStyle.NORMAL, true); builder.useFont(() -> getClass().getResourceAsStream("/static/assets/fonts/OpenSans-SemiBold.ttf"), "Open Sans", 600, BaseRendererBuilder.FontStyle.NORMAL, true); builder.useFont(() -> getClass().getResourceAsStream("/static/assets/fonts/OpenSans-Bold.ttf"), "Open Sans", 700, BaseRendererBuilder.FontStyle.NORMAL, true); builder.toStream(baos); builder.run(); return baos.toByteArray(); } catch (Exception e) { throw new IllegalStateException("Error generando PDF", e); } } }