trabajando en el pdf

This commit is contained in:
2025-10-12 23:28:33 +02:00
parent 99d27cd3ed
commit c15fff73ee
8 changed files with 243 additions and 373 deletions

View File

@ -1,5 +1,6 @@
package com.imprimelibros.erp.pdf;
import com.openhtmltopdf.outputdevice.helper.BaseRendererBuilder;
import com.openhtmltopdf.pdfboxout.PdfRendererBuilder;
import org.springframework.core.io.Resource;
import org.springframework.beans.factory.annotation.Value;
@ -11,34 +12,33 @@ import java.io.ByteArrayOutputStream;
public class PdfRenderer {
@Value("classpath:/static/")
private Resource staticRoot;
private org.springframework.core.io.Resource staticRoot;
public byte[] renderHtmlToPdf(String html) {
try (var baos = new ByteArrayOutputStream()) {
var builder = new PdfRendererBuilder();
builder.useFont(() -> getClass().getResourceAsStream("/static/assets/fonts/OpenSans-Regular.ttf"), "Open Sans",
400, com.openhtmltopdf.outputdevice.helper.BaseRendererBuilder.FontStyle.NORMAL, true);
builder.useFont(() -> getClass().getResourceAsStream("/static/assets/fonts/OpenSans-SemiBold.ttf"), "Open Sans",
600, com.openhtmltopdf.outputdevice.helper.BaseRendererBuilder.FontStyle.NORMAL, true);
builder.useFont(() -> getClass().getResourceAsStream("/static/assets/fonts/OpenSans-Bold.ttf"), "Open Sans", 700,
com.openhtmltopdf.outputdevice.helper.BaseRendererBuilder.FontStyle.NORMAL, true);
var builder = new com.openhtmltopdf.pdfboxout.PdfRendererBuilder();
builder.useFastMode();
builder.withHtmlContent(html, baseUrl());
// 👇 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);
}
}
private String baseUrl() {
try {
return staticRoot.getURL().toString();
} catch (Exception e) {
return null;
}
}
}