[ADD] PDF REST AHORA ACEPTA BACKGROUND

parent 39ad33ec
......@@ -26,6 +26,7 @@ public class pdfRest {
try {
String html;
String fileName;
String background;
boolean isBase64;
if (json != null && !json.isEmpty()) {
......@@ -33,13 +34,19 @@ public class pdfRest {
html = jsonBody.getString("html");
fileName = jsonBody.optString("file_name", "pdf.pdf");
isBase64 = jsonBody.optBoolean("base64");
background = jsonBody.has("background") ? jsonBody.getString("background") : null;
} else {
html = params.get("html");
fileName = params.getOrDefault("file_name", "pdf.pdf");
isBase64 = Boolean.parseBoolean(params.get("base64"));
background = params.get("background");
}
byte[] bytes = pdfService.generatePdf(html);
if (background != null && !background.startsWith("http") && !background.startsWith("data:")) {
background = "data:image/png;base64," + background;
}
byte[] bytes = pdfService.generatePdf(html, background);
if (isBase64) {
String base64 = commonUtils.byteToBase64(bytes);
......
package web.multitask.trismegistoservices.services;
import com.itextpdf.io.image.ImageData;
import com.itextpdf.io.image.ImageDataFactory;
import org.springframework.stereotype.Service;
import com.itextpdf.html2pdf.ConverterProperties;
import com.itextpdf.html2pdf.HtmlConverter;
import com.itextpdf.html2pdf.resolver.font.DefaultFontProvider;
import org.springframework.stereotype.Service;
import com.itextpdf.kernel.colors.DeviceRgb;
import com.itextpdf.kernel.events.Event;
import com.itextpdf.kernel.events.IEventHandler;
import com.itextpdf.kernel.events.PdfDocumentEvent;
import com.itextpdf.kernel.geom.PageSize;
import com.itextpdf.kernel.geom.Rectangle;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfPage;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.canvas.PdfCanvas;
import java.io.File;
import java.io.FileOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
@Service
public class PDFService {
public byte[] generatePdf(String htmlContent) throws Exception {
public byte[] generatePdf(String htmlContent, String backgroundUrl) throws Exception {
try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
PdfWriter writer = new PdfWriter(baos);
PdfDocument pdf = new PdfDocument(writer);
pdf.setDefaultPageSize(PageSize.A4);
// 1. Creamos el estilo CSS para el fondo
// Usamos @page para que se aplique a todas las páginas del PDF
String backgroundStyle = "<style>" +
"@page {" +
" margin: 0;" + // Opcional: define márgenes si los necesitas
" background-image: url('" + backgroundUrl + "');" +
" background-position: center;" +
" background-repeat: no-repeat;" +
" background-size: cover;" +
"}" +
"body { margin: 1cm; }" + // Margen interno para que el texto no toque los bordes
"</style>";
// 2. Concatenamos el estilo al final (o al inicio) del contenido
String finalHtml = htmlContent + backgroundStyle;
ConverterProperties properties = new ConverterProperties();
DefaultFontProvider fontProvider = new DefaultFontProvider(false, false, false);
fontProvider.addFont("/fonts/Roboto-Regular.ttf");
properties.setFontProvider(fontProvider);
FileOutputStream outputStream = new FileOutputStream(System.getProperty("java.io.tmpdir") + "/pdf.pdf");
HtmlConverter.convertToPdf(htmlContent, outputStream, properties);
File file = new File(System.getProperty("java.io.tmpdir") + "/pdf.pdf");
return org.apache.commons.io.FileUtils.readFileToByteArray(file);
// 3. Convertimos (Ya no hace falta el EventHandler manual)
HtmlConverter.convertToPdf(finalHtml, pdf, properties);
pdf.close();
return baos.toByteArray();
}
}
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment