From 97d48b3ffc9ebae97506c714504b618c8f04fc23 Mon Sep 17 00:00:00 2001 From: Makhtar DIAGNE <makhtar.diagne@teamdlab.com> Date: Tue, 5 May 2020 13:41:58 +0200 Subject: [PATCH] [US DLAB-3806] Add pdf generation with images[US DLAB-3806] Add TU on PDF generation --- .../vitamui/commons/api/FileExtensions.java | 3 + commons/commons-utils/pom.xml | 5 ++ .../commons/utils/PdfFileGenerator.java | 54 +++++++++--- .../commons/utils/PdfFileGeneratorTest.java | 79 ++++++++++++++++++ .../test/resources/template-dynamic-info.odt | Bin 0 -> 9198 bytes .../src/test/resources/template-metadata.odt | Bin 0 -> 10108 bytes pom.xml | 14 ++++ 7 files changed, 142 insertions(+), 13 deletions(-) create mode 100644 commons/commons-utils/src/test/java/fr/gouv/vitamui/commons/utils/PdfFileGeneratorTest.java create mode 100644 commons/commons-utils/src/test/resources/template-dynamic-info.odt create mode 100644 commons/commons-utils/src/test/resources/template-metadata.odt diff --git a/commons/commons-api/src/main/java/fr/gouv/vitamui/commons/api/FileExtensions.java b/commons/commons-api/src/main/java/fr/gouv/vitamui/commons/api/FileExtensions.java index 2f343a2c..b2faa552 100644 --- a/commons/commons-api/src/main/java/fr/gouv/vitamui/commons/api/FileExtensions.java +++ b/commons/commons-api/src/main/java/fr/gouv/vitamui/commons/api/FileExtensions.java @@ -53,7 +53,10 @@ public class FileExtensions { public static final String JSON = ".json"; + public static final String PNG = ".png"; + private FileExtensions() { // do nothing } + } diff --git a/commons/commons-utils/pom.xml b/commons/commons-utils/pom.xml index cec29363..ca29c392 100644 --- a/commons/commons-utils/pom.xml +++ b/commons/commons-utils/pom.xml @@ -114,5 +114,10 @@ <artifactId>powermock-module-junit4</artifactId> <scope>test</scope> </dependency> + <dependency> + <groupId>org.apache.pdfbox</groupId> + <artifactId>pdfbox</artifactId> + <scope>test</scope> + </dependency> </dependencies> </project> diff --git a/commons/commons-utils/src/main/java/fr/gouv/vitamui/commons/utils/PdfFileGenerator.java b/commons/commons-utils/src/main/java/fr/gouv/vitamui/commons/utils/PdfFileGenerator.java index a4638978..deec7056 100644 --- a/commons/commons-utils/src/main/java/fr/gouv/vitamui/commons/utils/PdfFileGenerator.java +++ b/commons/commons-utils/src/main/java/fr/gouv/vitamui/commons/utils/PdfFileGenerator.java @@ -53,9 +53,10 @@ public class PdfFileGenerator { /** * Method allowing to fill an odt template and generate a pdf file from it. - * @param odtTemplateInputStream the odt template to fill and convert to pdf /!\ the owner is reponsible for closing the stream. - * @param pdfOutputStream the generated pdf file /!\ the owner is reponsible for closing the stream. - * @param dataMap the object containing the data to add to the template. + * + * @param odtTemplateInputStream the odt template to fill and convert to pdf /!\ the owner is responsible for closing the stream. + * @param pdfOutputStream the generated pdf file /!\ the owner is responsible for closing the stream. + * @param dataMap the object containing the data to add to the template. * @throws Exception */ public static void createPdf(final InputStream odtTemplateInputStream, final OutputStream pdfOutputStream, final Map<String, Object> dataMap) @@ -66,26 +67,39 @@ public class PdfFileGenerator { /** * Method allowing to fill an odt template with dynamic and static data and generate a pdf file from it. + * * @param odtTemplateInputStream the odt template to fill and convert to pdf /!\ the owner is reponsible for closing the stream. - * @param pdfOutputStream the generated pdf file /!\ the owner is reponsible for closing the stream. - * @param dataMap the object containing the data to add to the template. - * @param dynamicFields the dynamic fields to add to the report to enable the creation of the pdf. + * @param pdfOutputStream the generated pdf file /!\ the owner is reponsible for closing the stream. + * @param dataMap the object containing the data to add to the template. + * @param dynamicFields the dynamic fields to add to the report to enable the creation of the pdf. * @throws Exception */ public static void createPdfWithDynamicInfo(final InputStream odtTemplateInputStream, final OutputStream pdfOutputStream, final Map<String, Object> dataMap, final String... dynamicFields) throws Exception { - final IXDocReport xdocGenerator = createXDocReport(odtTemplateInputStream); - final FieldsMetadata dynamicFieldsMetadata = new FieldsMetadata(); - for (final String dynamicField : dynamicFields) { - dynamicFieldsMetadata.addFieldAsList(dynamicField); - } - xdocGenerator.setFieldsMetadata(dynamicFieldsMetadata); + final IXDocReport xdocGenerator = generateXDocReport(odtTemplateInputStream, dynamicFields, new String[]{}); + createPdfDocument(xdocGenerator, dataMap, pdfOutputStream); + } + + /** + * Method allowing to fill an odt template with images, dynamic and static data and generate a pdf file from it. + * + * @param odtTemplateInputStream the odt template to fill and convert to pdf /!\ the owner is responsible for closing the stream. + * @param pdfOutputStream the generated pdf file /!\ the owner is responsible for closing the stream. + * @param dataMap the object containing the data to add to the template. + * @param dynamicFields the dynamic fields to add to the report to enable the creation of the pdf. + * @param imageFields the image fields to add to the report to enable the creation of the pdf. + * @throws Exception + */ + public static void createPdfWithMetadata(final InputStream odtTemplateInputStream, final OutputStream pdfOutputStream, final Map<String, Object> dataMap, + final String[] dynamicFields, final String[] imageFields) throws Exception { + final IXDocReport xdocGenerator = generateXDocReport(odtTemplateInputStream, dynamicFields, imageFields); createPdfDocument(xdocGenerator, dataMap, pdfOutputStream); } /** * Method allowing to get the report to generate a pdf file. - * @param odtTemplateInputStream the odt template to fill and convert to pdf /!\ the owner is reponsible for closing the stream. + * + * @param odtTemplateInputStream the odt template to fill and convert to pdf /!\ the owner is responsible for closing the stream. * @return the XDocReport. * @throws Exception */ @@ -108,4 +122,18 @@ public class PdfFileGenerator { xdocGenerator.convert(context, options, pdfOutputStream); } + private static IXDocReport generateXDocReport(final InputStream odtTemplateInputStream, final String[] dynamicFields, final String[] imageFields) + throws Exception { + final IXDocReport xdocGenerator = createXDocReport(odtTemplateInputStream); + final FieldsMetadata fieldsMetadata = new FieldsMetadata(); + for (final String dynamicField : dynamicFields) { + fieldsMetadata.addFieldAsList(dynamicField); + } + for (final String imageField : imageFields) { + fieldsMetadata.addFieldAsImage(imageField); + } + xdocGenerator.setFieldsMetadata(fieldsMetadata); + return xdocGenerator; + } + } diff --git a/commons/commons-utils/src/test/java/fr/gouv/vitamui/commons/utils/PdfFileGeneratorTest.java b/commons/commons-utils/src/test/java/fr/gouv/vitamui/commons/utils/PdfFileGeneratorTest.java new file mode 100644 index 00000000..82fc6c60 --- /dev/null +++ b/commons/commons-utils/src/test/java/fr/gouv/vitamui/commons/utils/PdfFileGeneratorTest.java @@ -0,0 +1,79 @@ +package fr.gouv.vitamui.commons.utils; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.HashMap; +import java.util.Map; + +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.text.PDFTextStripper; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Test; + +public class PdfFileGeneratorTest { + + public static final String GENERATED_PDF_NAME = "generated-pdf.pdf"; + + private static final String TEST_DIRECTORY = "src/test/resources/"; + + private static final String TMP_DIRECTORY = "/tmp/dlab/test/PdfFileGeneratorTest/"; + + @BeforeClass + public static void setUp() throws IOException { + if (!new File(TMP_DIRECTORY).exists()) { + Files.createDirectories(Paths.get(TMP_DIRECTORY)); + } + } + + @Test + public void testCreatePdfWithDynamicInfo() throws Exception { + // The template contains "${data},${dynamic.field}" + try (final InputStream templateInput = new FileInputStream(new File(TEST_DIRECTORY + "template-dynamic-info.odt")); + final FileOutputStream pdfOutput = new FileOutputStream(new File(TMP_DIRECTORY + GENERATED_PDF_NAME))) { + final Map<String, Object> dataMap = new HashMap<>(); + final String[] dynamicFields = {"dynamic.field"}; + dataMap.put("data", "value1"); + dataMap.put("dynamic.field", "value2"); + + PdfFileGenerator.createPdfWithDynamicInfo(templateInput, pdfOutput, dataMap, dynamicFields); + } + + try (final PDDocument document = PDDocument.load(new File(TMP_DIRECTORY + GENERATED_PDF_NAME))) { + final String content = new PDFTextStripper().getText(document); + final String[] results = content.split(","); + Assert.assertEquals("value1", results[0].trim()); + Assert.assertEquals("value2", results[1].trim()); + } + } + + @Test + public void testCreatePdfWithMetadata() throws Exception { + // The template contains "${data},${dynamic.field},${imageField}" + try (final InputStream templateInput = new FileInputStream(new File(TEST_DIRECTORY + "template-metadata.odt")); + final FileOutputStream pdfOutput = new FileOutputStream(new File(TMP_DIRECTORY + GENERATED_PDF_NAME))) { + final Map<String, Object> dataMap = new HashMap<>(); + final String[] dynamicFields = {"dynamic.field"}; + final String[] imageFields = {"imageField"}; + dataMap.put("data", "value1"); + dataMap.put("dynamic.field", "value2"); + dataMap.put("imageField", "value3"); + + PdfFileGenerator.createPdfWithMetadata(templateInput, pdfOutput, dataMap, dynamicFields, imageFields); + } + + try (final PDDocument document = PDDocument.load(new File(TMP_DIRECTORY + GENERATED_PDF_NAME))) { + final String content = new PDFTextStripper().getText(document); + final String[] results = content.split(","); + Assert.assertEquals("value1", results[0].trim()); + Assert.assertEquals("value2", results[1].trim()); + Assert.assertEquals("value3", results[2].trim()); + } + } + +} diff --git a/commons/commons-utils/src/test/resources/template-dynamic-info.odt b/commons/commons-utils/src/test/resources/template-dynamic-info.odt new file mode 100644 index 0000000000000000000000000000000000000000..95124f09ea33130cefc2675814f57bf382b0664e GIT binary patch literal 9198 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 literal 0 HcmV?d00001 diff --git a/commons/commons-utils/src/test/resources/template-metadata.odt b/commons/commons-utils/src/test/resources/template-metadata.odt new file mode 100644 index 0000000000000000000000000000000000000000..e7032e8a8caddfa97bfd6199519360557e0ccf9f GIT binary patch literal 10108 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 XE6F~2uo?h>@$dmXyn;|K9`F7O-xN~O literal 0 HcmV?d00001 diff --git a/pom.xml b/pom.xml index 36d2f5e4..48717ec0 100644 --- a/pom.xml +++ b/pom.xml @@ -144,6 +144,7 @@ <maven.deploy.plugin.version>2.8.2</maven.deploy.plugin.version> <maven.exec.plugin.version>1.6.0</maven.exec.plugin.version> <maven.failsafe.plugin.version>2.21.0</maven.failsafe.plugin.version> + <maven.filtering.plugin.version>1.3</maven.filtering.plugin.version> <maven.findbugs.plugin.version>3.0.4</maven.findbugs.plugin.version> <maven.frontend.plugin.version>1.6</maven.frontend.plugin.version> <maven.jacoco.plugin.version>0.8.0</maven.jacoco.plugin.version> @@ -821,6 +822,12 @@ <version>${jsonassert.version}</version> <scope>test</scope> </dependency> + <dependency> + <groupId>org.apache.pdfbox</groupId> + <artifactId>pdfbox</artifactId> + <version>${apache.pdfbox.version}</version> + <scope>test</scope> + </dependency> <!-- CUCUMBER SERENITY --> <dependency> @@ -1009,6 +1016,13 @@ <nonFilteredFileExtension>pem</nonFilteredFileExtension> </nonFilteredFileExtensions> </configuration> + <dependencies> + <dependency> + <groupId>org.apache.maven.shared</groupId> + <artifactId>maven-filtering</artifactId> + <version>${maven.filtering.plugin.version}</version> + </dependency> + </dependencies> </plugin> </plugins> <pluginManagement> -- GitLab