From 2c981cee000bd693648cfc0033747c49cde859b1 Mon Sep 17 00:00:00 2001 From: iroqueta Date: Mon, 18 Sep 2023 19:18:37 -0300 Subject: [PATCH 1/2] KB images were not beeing printed in PDF Reports using Sprin Boot Issue: 104856 --- .../main/java/com/genexus/util/GXFileInfo.java | 15 ++++++++++++++- .../java/com/genexus/reports/PDFReportItext2.java | 15 ++++++++++----- .../java/com/genexus/reports/PDFReportItext8.java | 15 ++++++++++----- .../java/com/genexus/reports/PDFReportPDFBox.java | 15 ++++++++++----- 4 files changed, 44 insertions(+), 16 deletions(-) diff --git a/common/src/main/java/com/genexus/util/GXFileInfo.java b/common/src/main/java/com/genexus/util/GXFileInfo.java index c9bfe3bb4..439ec4908 100644 --- a/common/src/main/java/com/genexus/util/GXFileInfo.java +++ b/common/src/main/java/com/genexus/util/GXFileInfo.java @@ -1,11 +1,14 @@ package com.genexus.util; import java.io.*; import java.util.Vector; + +import com.genexus.ApplicationContext; import com.genexus.CommonUtil; import com.genexus.common.interfaces.SpecificImplementation; import com.genexus.db.driver.ResourceAccessControlList; import org.apache.commons.io.filefilter.WildcardFileFilter; import org.apache.commons.io.IOCase; +import org.springframework.core.io.ClassPathResource; import java.util.Date; @@ -33,6 +36,12 @@ public String getPath(){ } } public boolean exists(){ + if (ApplicationContext.getInstance().isSpringBootApp() && !isDirectory) { + if (!fileSource.exists() && !new ClassPathResource(fileSource.getPath()).exists()) + return false; + return true; + } + if ((isDirectory && fileSource.isDirectory()) || (!isDirectory && fileSource.isFile())) { return fileSource.exists(); } @@ -130,8 +139,12 @@ public GXDirectoryCollection listDirectories(){ public InputStream getStream(){ try { + if (ApplicationContext.getInstance().isSpringBootApp()) { + return new ClassPathResource(fileSource.getPath()).getInputStream(); + } + return new FileInputStream(fileSource); - } catch (FileNotFoundException ex) { + } catch (Exception ex) { return null; } } diff --git a/java/src/main/java/com/genexus/reports/PDFReportItext2.java b/java/src/main/java/com/genexus/reports/PDFReportItext2.java index cc4514674..f0208d25a 100644 --- a/java/src/main/java/com/genexus/reports/PDFReportItext2.java +++ b/java/src/main/java/com/genexus/reports/PDFReportItext2.java @@ -7,6 +7,7 @@ import java.util.*; import java.util.concurrent.ConcurrentHashMap; +import com.genexus.ApplicationContext; import com.genexus.CommonUtil; import com.genexus.ModelContext; import com.genexus.platform.NativeFunctions; @@ -36,6 +37,7 @@ import com.genexus.reports.fonts.PDFFont; import com.genexus.reports.fonts.PDFFontDescriptor; import com.genexus.reports.fonts.Type1FontMetrics; +import org.springframework.core.io.ClassPathResource; public class PDFReportItext2 extends GXReportPDFCommons { @@ -377,13 +379,16 @@ public void GxDrawBitMap(String bitmap, int left, int top, int right, int bottom } // Si la ruta a la imagen NO es absoluta, en aplicaciones Web le agregamos al comienzo la ruta al root de la aplicación // más la staticContentBaseURL si ésta es relativa. - image = com.lowagie.text.Image.getInstance(defaultRelativePrepend + bitmap); - if(image == null) { // Si all\uFFFDEno se encuentra la imagen, entonces la buscamos bajo el webAppDir (para mantener compatibilidad) - bitmap = webAppDir + bitmap; - image = com.lowagie.text.Image.getInstance(bitmap); + bitmap = defaultRelativePrepend + bitmap; + if (ApplicationContext.getInstance().isSpringBootApp() && !new File(bitmap).exists()) { + image = com.lowagie.text.Image.getInstance(new ClassPathResource(bitmap).getContentAsByteArray()); } else { - bitmap = defaultRelativePrepend + bitmap; + image = com.lowagie.text.Image.getInstance(bitmap); + if (image == null) { // Si all\uFFFDEno se encuentra la imagen, entonces la buscamos bajo el webAppDir (para mantener compatibilidad) + bitmap = webAppDir + bitmap; + image = com.lowagie.text.Image.getInstance(bitmap); + } } } else { diff --git a/java/src/main/java/com/genexus/reports/PDFReportItext8.java b/java/src/main/java/com/genexus/reports/PDFReportItext8.java index a04e84379..02a1e613d 100644 --- a/java/src/main/java/com/genexus/reports/PDFReportItext8.java +++ b/java/src/main/java/com/genexus/reports/PDFReportItext8.java @@ -1,5 +1,6 @@ package com.genexus.reports; +import com.genexus.ApplicationContext; import com.genexus.CommonUtil; import com.genexus.ModelContext; import com.genexus.platform.NativeFunctions; @@ -41,6 +42,7 @@ import com.itextpdf.kernel.pdf.PdfDocument; import com.itextpdf.layout.splitting.DefaultSplitCharacters; import com.itextpdf.layout.Canvas; +import org.springframework.core.io.ClassPathResource; import java.awt.*; import java.io.File; @@ -402,13 +404,16 @@ public void GxDrawBitMap(String bitmap, int left, int top, int right, int bottom if (bitmap.startsWith(httpContext.getStaticContentBase())) { bitmap = bitmap.replace(httpContext.getStaticContentBase(), ""); } - imageData = ImageDataFactory.create(defaultRelativePrepend + bitmap); - if(imageData == null) { - bitmap = webAppDir + bitmap; - imageData = ImageDataFactory.create(bitmap); + bitmap = defaultRelativePrepend + bitmap; + if (ApplicationContext.getInstance().isSpringBootApp() && !new File(bitmap).exists()) { + imageData = ImageDataFactory.create(new ClassPathResource(bitmap).getContentAsByteArray()); } else { - bitmap = defaultRelativePrepend + bitmap; + imageData = ImageDataFactory.create(bitmap); + if (imageData == null) { + bitmap = webAppDir + bitmap; + imageData = ImageDataFactory.create(bitmap); + } } } else { diff --git a/java/src/main/java/com/genexus/reports/PDFReportPDFBox.java b/java/src/main/java/com/genexus/reports/PDFReportPDFBox.java index 8e29a9f38..7d3e56d23 100644 --- a/java/src/main/java/com/genexus/reports/PDFReportPDFBox.java +++ b/java/src/main/java/com/genexus/reports/PDFReportPDFBox.java @@ -10,6 +10,7 @@ import java.util.Set; import java.util.concurrent.ConcurrentHashMap; +import com.genexus.ApplicationContext; import com.genexus.CommonUtil; import com.genexus.ModelContext; import com.genexus.platform.NativeFunctions; @@ -40,6 +41,7 @@ import org.jsoup.nodes.Element; import org.jsoup.nodes.Node; import org.jsoup.select.Elements; +import org.springframework.core.io.ClassPathResource; import javax.imageio.IIOException; @@ -362,13 +364,16 @@ public void GxDrawBitMap(String bitmap, int left, int top, int right, int bottom { bitmap = bitmap.replace(httpContext.getStaticContentBase(), ""); } - image = PDImageXObject.createFromFile(defaultRelativePrepend + bitmap,document); - if(image == null) { - bitmap = webAppDir + bitmap; - image = PDImageXObject.createFromFile(bitmap,document); + bitmap = defaultRelativePrepend + bitmap; + if (ApplicationContext.getInstance().isSpringBootApp() && !new File(bitmap).exists()) { + image = PDImageXObject.createFromByteArray(document, new ClassPathResource(bitmap).getContentAsByteArray(), bitmap); } else { - bitmap = defaultRelativePrepend + bitmap; + image = PDImageXObject.createFromFile(bitmap, document); + if (image == null) { + bitmap = webAppDir + bitmap; + image = PDImageXObject.createFromFile(bitmap, document); + } } } else { From 7be8261899337d0d4e0a0c99fb39af0330cfa4bc Mon Sep 17 00:00:00 2001 From: iroqueta Date: Tue, 19 Sep 2023 15:38:50 -0300 Subject: [PATCH 2/2] KB images were not beeing printed in PDF Reports using Sprin Boot Issue: 104856 --- .../com/genexus/reports/PDFReportPDFBox.java | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/java/src/main/java/com/genexus/reports/PDFReportPDFBox.java b/java/src/main/java/com/genexus/reports/PDFReportPDFBox.java index 7d3e56d23..33d6f82c8 100644 --- a/java/src/main/java/com/genexus/reports/PDFReportPDFBox.java +++ b/java/src/main/java/com/genexus/reports/PDFReportPDFBox.java @@ -952,13 +952,17 @@ private void processHTMLElement(PDPageContentStream cb, PDRectangle htmlRectangl if (!new File(bitmap).isAbsolute() && !bitmap.toLowerCase().startsWith("http:") && !bitmap.toLowerCase().startsWith("https:")) { if (bitmap.startsWith(httpContext.getStaticContentBase())) bitmap = bitmap.replace(httpContext.getStaticContentBase(), ""); - image = PDImageXObject.createFromFile(defaultRelativePrepend + bitmap,document); - if(image == null) { - bitmap = webAppDir + bitmap; - image = PDImageXObject.createFromFile(bitmap,document); + bitmap = defaultRelativePrepend + bitmap; + if (ApplicationContext.getInstance().isSpringBootApp() && !new File(bitmap).exists()) { + image = PDImageXObject.createFromByteArray(document, new ClassPathResource(bitmap).getContentAsByteArray(), bitmap); + } + else { + image = PDImageXObject.createFromFile(bitmap, document); + if (image == null) { + bitmap = webAppDir + bitmap; + image = PDImageXObject.createFromFile(bitmap, document); + } } - else - bitmap = defaultRelativePrepend + bitmap; } else image = PDImageXObject.createFromFile(bitmap,document);