From 5bd2430513d766a44a18785e6d29a396f2598b7a Mon Sep 17 00:00:00 2001 From: Krystian Dabrowski Date: Fri, 18 Nov 2022 17:49:20 +0100 Subject: [PATCH 1/6] ATS-995, MNT-23248: TIFF to PDF ImageMagick transform don't work - introducing new custom transformer-misc: ImageToPdf --- .../resources/imagemagick_engine_config.json | 3 +- .../transformers/ImageToPdfTransformer.java | 218 +++++++++++ .../main/resources/misc_engine_config.json | 14 + .../transform/misc/MiscTransformsIT.java | 36 +- .../ImageToPdfTransformerTest.java | 350 ++++++++++++++++++ .../misc/util/ArgumentsCartesianProduct.java | 101 +++++ engines/misc/src/test/resources/quick.gif | Bin 0 -> 6139 bytes engines/misc/src/test/resources/quick.jpg | Bin 0 -> 57586 bytes engines/misc/src/test/resources/quick.png | Bin 0 -> 6253 bytes engines/misc/src/test/resources/quick.tiff | Bin 0 -> 20746 bytes .../transform/common/RequestParamMap.java | 1 + 11 files changed, 710 insertions(+), 13 deletions(-) create mode 100644 engines/misc/src/main/java/org/alfresco/transform/misc/transformers/ImageToPdfTransformer.java create mode 100644 engines/misc/src/test/java/org/alfresco/transform/misc/transformers/ImageToPdfTransformerTest.java create mode 100644 engines/misc/src/test/java/org/alfresco/transform/misc/util/ArgumentsCartesianProduct.java create mode 100644 engines/misc/src/test/resources/quick.gif create mode 100644 engines/misc/src/test/resources/quick.jpg create mode 100644 engines/misc/src/test/resources/quick.png create mode 100644 engines/misc/src/test/resources/quick.tiff diff --git a/engines/imagemagick/src/main/resources/imagemagick_engine_config.json b/engines/imagemagick/src/main/resources/imagemagick_engine_config.json index add6f6a7..f7cdcc74 100644 --- a/engines/imagemagick/src/main/resources/imagemagick_engine_config.json +++ b/engines/imagemagick/src/main/resources/imagemagick_engine_config.json @@ -932,7 +932,7 @@ {"sourceMediaType": "image/tiff", "targetMediaType": "image/x-raw-minolta" }, {"sourceMediaType": "image/tiff", "targetMediaType": "image/x-raw-nikon" }, {"sourceMediaType": "image/tiff", "targetMediaType": "image/x-raw-olympus" }, - {"sourceMediaType": "image/tiff", "targetMediaType": "image/x-portable-bitmap" }, + {"sourceMediaType": "image/tiff", "targetMediaType": "image/x-portable-bitmap" }, {"sourceMediaType": "image/tiff", "targetMediaType": "image/x-raw-pentax" }, {"sourceMediaType": "image/tiff", "targetMediaType": "image/x-portable-graymap" }, {"sourceMediaType": "image/tiff", "targetMediaType": "image/x-portable-anymap" }, @@ -950,7 +950,6 @@ {"sourceMediaType": "image/tiff", "targetMediaType": "image/x-xbitmap" }, {"sourceMediaType": "image/tiff", "targetMediaType": "image/x-xpixmap" }, {"sourceMediaType": "image/tiff", "targetMediaType": "image/x-xwindowdump" }, - {"sourceMediaType": "image/tiff", "targetMediaType": "application/pdf" }, {"sourceMediaType": "image/x-raw-sigma", "targetMediaType": "image/x-raw-hasselblad" }, {"sourceMediaType": "image/x-raw-sigma", "targetMediaType": "image/x-raw-sony" }, diff --git a/engines/misc/src/main/java/org/alfresco/transform/misc/transformers/ImageToPdfTransformer.java b/engines/misc/src/main/java/org/alfresco/transform/misc/transformers/ImageToPdfTransformer.java new file mode 100644 index 00000000..0afc5f02 --- /dev/null +++ b/engines/misc/src/main/java/org/alfresco/transform/misc/transformers/ImageToPdfTransformer.java @@ -0,0 +1,218 @@ +/* + * #%L + * Alfresco Transform Core + * %% + * Copyright (C) 2005 - 2022 Alfresco Software Limited + * %% + * This file is part of the Alfresco software. + * - + * If the software was purchased under a paid Alfresco license, the terms of + * the paid license agreement will prevail. Otherwise, the software is + * provided under the following open source license terms: + * - + * Alfresco is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * - + * Alfresco is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * - + * You should have received a copy of the GNU Lesser General Public License + * along with Alfresco. If not, see . + * #L% + */ +package org.alfresco.transform.misc.transformers; + +import static org.alfresco.transform.common.RequestParamMap.END_PAGE; +import static org.alfresco.transform.common.RequestParamMap.PDF_FORMAT; +import static org.alfresco.transform.common.RequestParamMap.START_PAGE; + +import javax.imageio.ImageIO; +import javax.imageio.ImageReader; +import javax.imageio.stream.ImageInputStream; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; +import java.util.Comparator; +import java.util.Iterator; +import java.util.Map; +import java.util.Optional; +import java.util.stream.Stream; + +import org.alfresco.transform.base.TransformManager; +import org.alfresco.transform.base.util.CustomTransformerFileAdaptor; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.PDPageContentStream; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.graphics.image.LosslessFactory; +import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +/** + * Converts image files into PDF files. Transformer uses PDF Box to perform conversions. + * During conversion image might be scaled down (keeping proportions) to match width or height of the PDF document. + * If the image is smaller than PDF page size, the image will be placed in the top left-hand side of the PDF document page. + * Transformer takes 3 optional transform options: + * - startPage - page number of image (for multipage images) from which transformer should start conversion. Default: first page of the image. + * - endPage - page number of image (for multipage images) up to which transformation should be performed. Default: last page of the image. + * - pdfFormat - output PDF file format. Available formats: A0, A1, A2, A3, A4, A5, A6, LETTER, LEGAL. Default: A4. + */ +@Component +public class ImageToPdfTransformer implements CustomTransformerFileAdaptor +{ + private static final Logger log = LoggerFactory.getLogger(ImageToPdfTransformer.class); + + private static final String NEGATIVE_START_PAGE_ERROR_MESSAGE = "Start page number cannot be a negative number."; + private static final String NEGATIVE_END_PAGE_ERROR_MESSAGE = "End page number cannot be a negative number."; + private static final String START_PAGE_GREATER_THAN_END_PAGE_ERROR_MESSAGE = "Start page number cannot be greater than end page."; + private static final String INVALID_OPTION_ERROR_MESSAGE = "Parameter '%s' is invalid: \"%s\" - it must be an integer."; + private static final String INVALID_IMAGE_ERROR_MESSAGE = "Image file (%s) format (%s) not supported by ImageIO."; + private static final String DEFAULT_PDF_FORMAT_STRING = "A4"; + private static final PDRectangle DEFAULT_PDF_FORMAT = PDRectangle.A4; + + @Override + public String getTransformerName() + { + return "imageToPdf"; + } + + @Override + public void transform( + String sourceMimetype, String targetMimetype, Map transformOptions, + File imageFile, File pdfFile, TransformManager transformManager + ) throws Exception { + try ( + ImageInputStream imageInputStream = ImageIO.createImageInputStream(imageFile); + PDDocument pdfDocument = new PDDocument() + ) { + final Integer startPage = parseOptionIfPresent(transformOptions, START_PAGE, Integer.class).orElse(null); + final Integer endPage = parseOptionIfPresent(transformOptions, END_PAGE, Integer.class).orElse(null); + final String pdfFormat = parseOptionIfPresent(transformOptions, PDF_FORMAT, String.class).orElse(DEFAULT_PDF_FORMAT_STRING); + verifyOptions(startPage, endPage); + + final ImageReader imageReader = findImageReader(imageInputStream, imageFile.getName(), sourceMimetype); + for (int i = 0; i < imageReader.getNumImages(true); i++) + { + if (startPage != null && i < startPage) + { + continue; + } + if (endPage != null && i > endPage) + { + break; + } + + scaleAndDrawImage(pdfDocument, imageReader.read(i), pdfFormat); + } + + pdfDocument.save(pdfFile); + } + } + + private ImageReader findImageReader(final ImageInputStream imageInputStream, final String imageName, final String mimetype) throws IOException + { + final Iterator imageReaders = ImageIO.getImageReaders(imageInputStream); + if (imageReaders == null || !imageReaders.hasNext()) + { + throw new IOException(String.format(INVALID_IMAGE_ERROR_MESSAGE, imageName, mimetype)); + } + final ImageReader imageReader = imageReaders.next(); + imageReader.setInput(imageInputStream); + + return imageReader; + } + + private void scaleAndDrawImage(final PDDocument pdfDocument, final BufferedImage bufferedImage, final String pdfFormat) throws IOException + { + final PDPage pdfPage = new PDPage(resolvePdfFormat(pdfFormat)); + pdfDocument.addPage(pdfPage); + final PDImageXObject image = LosslessFactory.createFromImage(pdfDocument, bufferedImage); + try (PDPageContentStream pdfPageContent = new PDPageContentStream(pdfDocument, pdfPage)) + { + final PDRectangle pageSize = pdfPage.getMediaBox(); + final float withRatio = pageSize.getWidth() / image.getWidth(); + final float heightRatio = pageSize.getHeight() / image.getHeight(); + final float ratio = Stream.of(withRatio, heightRatio, 1f).min(Comparator.naturalOrder()).get(); + // find image bottom + final float y = pageSize.getHeight() - image.getHeight() * ratio; + // drawing starts from bottom left corner + pdfPageContent.drawImage(image, 0, y, image.getWidth() * ratio, image.getHeight() * ratio); + } + } + + private PDRectangle resolvePdfFormat(final String pdfFormat) + { + switch (pdfFormat.toUpperCase()) { + case "A4": + return DEFAULT_PDF_FORMAT; + case "LETTER": + return PDRectangle.LETTER; + case "A0": + return PDRectangle.A0; + case "A1": + return PDRectangle.A1; + case "A2": + return PDRectangle.A2; + case "A3": + return PDRectangle.A3; + case "A5": + return PDRectangle.A5; + case "A6": + return PDRectangle.A6; + case "LEGAL": + return PDRectangle.LEGAL; + default: + log.info("PDF format: '{}' not supported. Using default: '{}'", pdfFormat, DEFAULT_PDF_FORMAT_STRING); + return DEFAULT_PDF_FORMAT; + } + } + + private static Optional parseOptionIfPresent(final Map transformOptions, final String parameter, final Class targetType) + { + if (transformOptions.containsKey(parameter)) + { + final String option = transformOptions.get(parameter); + if (targetType == Integer.class) + { + try + { + return Optional.of(targetType.cast(Integer.parseInt(option))); + } + catch (NumberFormatException e) + { + throw new IllegalArgumentException(String.format(INVALID_OPTION_ERROR_MESSAGE, parameter, option)); + } + } + else + { + return Optional.of(targetType.cast(option)); + } + } + + return Optional.empty(); + } + + private static void verifyOptions(final Integer startPage, final Integer endPage) + { + if (startPage != null && startPage < 0) + { + throw new IllegalArgumentException(NEGATIVE_START_PAGE_ERROR_MESSAGE); + } + + if (endPage != null && endPage < 0) + { + throw new IllegalArgumentException(NEGATIVE_END_PAGE_ERROR_MESSAGE); + } + + if (startPage != null && endPage != null && startPage > endPage) + { + throw new IllegalArgumentException(START_PAGE_GREATER_THAN_END_PAGE_ERROR_MESSAGE); + } + } +} diff --git a/engines/misc/src/main/resources/misc_engine_config.json b/engines/misc/src/main/resources/misc_engine_config.json index 41700f84..62c466c4 100644 --- a/engines/misc/src/main/resources/misc_engine_config.json +++ b/engines/misc/src/main/resources/misc_engine_config.json @@ -8,6 +8,11 @@ ], "metadataOptions": [ {"value": {"name": "extractMapping"}} + ], + "imageToPdfOptions": [ + {"value": {"name": "startPage"}}, + {"value": {"name": "endPage"}}, + {"value": {"name": "pdfFormat"}} ] }, "transformers": [ @@ -91,6 +96,15 @@ "transformOptions": [ "metadataOptions" ] + }, + { + "transformerName": "imageToPdf", + "supportedSourceAndTargetList": [ + {"sourceMediaType": "image/tiff", "targetMediaType": "application/pdf"} + ], + "transformOptions": [ + "imageToPdfOptions" + ] } ] } \ No newline at end of file diff --git a/engines/misc/src/test/java/org/alfresco/transform/misc/MiscTransformsIT.java b/engines/misc/src/test/java/org/alfresco/transform/misc/MiscTransformsIT.java index b6984c6c..577779e5 100644 --- a/engines/misc/src/test/java/org/alfresco/transform/misc/MiscTransformsIT.java +++ b/engines/misc/src/test/java/org/alfresco/transform/misc/MiscTransformsIT.java @@ -26,21 +26,12 @@ */ package org.alfresco.transform.misc; -import org.alfresco.transform.base.clients.FileInfo; -import org.alfresco.transform.base.clients.SourceTarget; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.MethodSource; -import org.springframework.core.io.Resource; -import org.springframework.http.ResponseEntity; - -import java.util.Map; -import java.util.stream.Stream; - import static java.text.MessageFormat.format; import static java.util.function.Function.identity; import static java.util.stream.Collectors.toMap; -import static org.alfresco.transform.base.clients.HttpClient.sendTRequest; + import static org.alfresco.transform.base.clients.FileInfo.testFile; +import static org.alfresco.transform.base.clients.HttpClient.sendTRequest; import static org.alfresco.transform.common.Mimetype.MIMETYPE_DITA; import static org.alfresco.transform.common.Mimetype.MIMETYPE_EXCEL; import static org.alfresco.transform.common.Mimetype.MIMETYPE_HTML; @@ -67,9 +58,22 @@ import static org.alfresco.transform.common.Mimetype.MIMETYPE_TEXT_PLAIN; import static org.alfresco.transform.common.Mimetype.MIMETYPE_WORD; import static org.alfresco.transform.common.Mimetype.MIMETYPE_XML; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.fail; import static org.springframework.http.HttpStatus.OK; +import java.util.Map; +import java.util.Objects; +import java.util.stream.Stream; + +import org.alfresco.transform.base.clients.FileInfo; +import org.alfresco.transform.base.clients.SourceTarget; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; +import org.springframework.core.io.Resource; +import org.springframework.http.ResponseEntity; + /** * @author Cezar Leahu */ @@ -146,6 +150,8 @@ public class MiscTransformsIT SourceTarget.of("application/dita+xml", "application/pdf"), SourceTarget.of("text/xml", "application/pdf"), + SourceTarget.of(MIMETYPE_IMAGE_TIFF, MIMETYPE_PDF), + SourceTarget.of("message/rfc822", "text/plain") ); } @@ -164,9 +170,17 @@ public class MiscTransformsIT try { + // when final ResponseEntity response = sendTRequest(ENGINE_URL, sourceFile, sourceMimetype, targetMimetype, targetExtension); + assertEquals(OK, response.getStatusCode(), descriptor); + if (MIMETYPE_PDF.equals(targetMimetype)) + { + // verify if PDF isn't corrupted + final PDDocument pdfFile = PDDocument.load(Objects.requireNonNull(response.getBody()).getInputStream()); + assertNotNull(pdfFile); + } } catch (Exception e) { diff --git a/engines/misc/src/test/java/org/alfresco/transform/misc/transformers/ImageToPdfTransformerTest.java b/engines/misc/src/test/java/org/alfresco/transform/misc/transformers/ImageToPdfTransformerTest.java new file mode 100644 index 00000000..714c79f5 --- /dev/null +++ b/engines/misc/src/test/java/org/alfresco/transform/misc/transformers/ImageToPdfTransformerTest.java @@ -0,0 +1,350 @@ +/* + * #%L + * Alfresco Transform Core + * %% + * Copyright (C) 2005 - 2022 Alfresco Software Limited + * %% + * This file is part of the Alfresco software. + * - + * If the software was purchased under a paid Alfresco license, the terms of + * the paid license agreement will prevail. Otherwise, the software is + * provided under the following open source license terms: + * - + * Alfresco is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * - + * Alfresco is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * - + * You should have received a copy of the GNU Lesser General Public License + * along with Alfresco. If not, see . + * #L% + */ +package org.alfresco.transform.misc.transformers; + +import static org.alfresco.transform.common.Mimetype.MIMETYPE_IMAGE_GIF; +import static org.alfresco.transform.common.Mimetype.MIMETYPE_IMAGE_JPEG; +import static org.alfresco.transform.common.Mimetype.MIMETYPE_IMAGE_PNG; +import static org.alfresco.transform.common.Mimetype.MIMETYPE_IMAGE_TIFF; +import static org.alfresco.transform.common.Mimetype.MIMETYPE_PDF; +import static org.alfresco.transform.common.RequestParamMap.END_PAGE; +import static org.alfresco.transform.common.RequestParamMap.PDF_FORMAT; +import static org.alfresco.transform.common.RequestParamMap.START_PAGE; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.BDDMockito.then; + +import java.io.File; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import java.util.function.Function; +import java.util.stream.Stream; + +import org.alfresco.transform.base.TransformManager; +import org.alfresco.transform.misc.util.ArgumentsCartesianProduct; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; + +class ImageToPdfTransformerTest +{ + private static final File sourceFile = loadFile("quick.gif"); + + @Mock + private TransformManager transformManager; + + @InjectMocks + private ImageToPdfTransformer transformer; + + private File targetFile = null; + + @BeforeEach + void setUp() throws IOException + { + MockitoAnnotations.openMocks(this); + + targetFile = File.createTempFile("temp_target", ".pdf"); + } + + static Stream imageFiles() + { + return Stream.of( + ImageFile.of("quick.jpg", MIMETYPE_IMAGE_JPEG), + ImageFile.of("quick.gif", MIMETYPE_IMAGE_GIF), + ImageFile.of("quick.png", MIMETYPE_IMAGE_PNG) + ); + } + + static Stream defaultTransformOptions() + { + return Stream.of( + TransformOptions.none(), + TransformOptions.of(0, null), + TransformOptions.of(0, 0) + ); + } + + static Stream tiffTransformOptions() + { + return Stream.of( + TransformOptions.of(0, 0), + TransformOptions.of(0, 1), + TransformOptions.of(1, 1), + TransformOptions.of(null, 0), // expected 1 page in target file + TransformOptions.of(null, 1), // expected 2 pages in target file + TransformOptions.of(0, null), // expected all (2) pages in target file + TransformOptions.of(1, null), // expected 1 page in target file + TransformOptions.none() // expected all (2) pages in target file + ); + } + + static Stream transformSourcesAndOptions() + { + return Stream.of( + ArgumentsCartesianProduct.of(imageFiles(), defaultTransformOptions()), + ArgumentsCartesianProduct.of(ImageFile.of("quick.tiff", MIMETYPE_IMAGE_TIFF, 2), tiffTransformOptions()) + ).flatMap(Function.identity()); + } + + @ParameterizedTest + @MethodSource("transformSourcesAndOptions") + void testTransformImageToPdf(ImageFile imageFile, TransformOptions transformOptions) throws Exception + { + File sourceFile = loadFile(imageFile.fileName); + + // when + transformer.transform(imageFile.mimetype, MIMETYPE_PDF, transformOptions.toMap(), sourceFile, targetFile, transformManager); + + then(transformManager).shouldHaveNoInteractions(); + try (PDDocument actualPdfDocument = PDDocument.load(targetFile)) + { + int expectedNumberOfPages = calculateExpectedNumberOfPages(transformOptions, imageFile.firstPage(), imageFile.lastPage()); + assertNotNull(actualPdfDocument); + assertEquals(expectedNumberOfPages, actualPdfDocument.getNumberOfPages()); + } + } + + private static int calculateExpectedNumberOfPages(TransformOptions transformOptions, int firstPage, int lastPage) + { + int startPage = Optional.ofNullable(transformOptions.startPage).orElse(firstPage); + int endPage = Math.min(Optional.ofNullable(transformOptions.endPage).orElse(lastPage), lastPage); + return endPage - startPage + 1; + } + + static Stream improperTransformOptions() + { + return Stream.of( + TransformOptions.of(1, 0), + TransformOptions.of(-1, 0), + TransformOptions.of(0, -1) + ); + } + + @ParameterizedTest + @MethodSource("improperTransformOptions") + void testTransformTiffToPdf_withImproperOptions(TransformOptions transformOptions) + { + // when + assertThrows(IllegalArgumentException.class, () -> + transformer.transform(MIMETYPE_IMAGE_TIFF, MIMETYPE_PDF, transformOptions.toMap(), sourceFile, targetFile, transformManager)); + } + + @Test + void testTransformTiffToPdf_withInvalidStartPageOption() + { + Map transformOptions = TransformOptions.none().toMap(); + transformOptions.put(START_PAGE, "a"); + + // when + assertThrows(IllegalArgumentException.class, () -> + transformer.transform(MIMETYPE_IMAGE_TIFF, MIMETYPE_PDF, transformOptions, sourceFile, targetFile, transformManager)); + } + + @Test + void testTransformTiffToPdf_withInvalidEndPageOption() + { + Map transformOptions = TransformOptions.none().toMap(); + transformOptions.put(END_PAGE, "z"); + + // when + assertThrows(IllegalArgumentException.class, () -> + transformer.transform(MIMETYPE_IMAGE_TIFF, MIMETYPE_PDF, transformOptions, sourceFile, targetFile, transformManager)); + } + + static Stream validPdfFormats() + { + return Stream.of("A0", "a0", "A1", "A2", "A3", "A4", "A5", "A6", "a6", "LETTER", "letter", "LEGAL", "legal"); + } + + @ParameterizedTest + @MethodSource("validPdfFormats") + void testTransformImageToPDF_withVariousPdfFormats(String pdfFormat) throws Exception + { + TransformOptions transformOptions = TransformOptions.of(pdfFormat); + + // when + transformer.transform(MIMETYPE_IMAGE_TIFF, MIMETYPE_PDF, transformOptions.toMap(), sourceFile, targetFile, transformManager); + + try (PDDocument actualPdfDocument = PDDocument.load(targetFile)) + { + PDRectangle expectedPdfFormat = resolveExpectedPdfFormat(pdfFormat); + assertNotNull(actualPdfDocument); + assertEquals(expectedPdfFormat.getWidth(), actualPdfDocument.getPage(0).getMediaBox().getWidth()); + assertEquals(expectedPdfFormat.getHeight(), actualPdfDocument.getPage(0).getMediaBox().getHeight()); + } + } + + @Test + void testTransformImageToPDF_withInvalidPdfFormatAndUsingDefaultOne() throws Exception + { + TransformOptions transformOptions = TransformOptions.of("INVALID"); + + // when + transformer.transform(MIMETYPE_IMAGE_TIFF, MIMETYPE_PDF, transformOptions.toMap(), sourceFile, targetFile, transformManager); + + try (PDDocument actualPdfDocument = PDDocument.load(targetFile)) + { + assertNotNull(actualPdfDocument); + assertEquals(PDRectangle.A4.getWidth(), actualPdfDocument.getPage(0).getMediaBox().getWidth()); + assertEquals(PDRectangle.A4.getHeight(), actualPdfDocument.getPage(0).getMediaBox().getHeight()); + } + } + + //----------------------------------------------- Helper methods and classes ----------------------------------------------- + + private static PDRectangle resolveExpectedPdfFormat(String pdfFormat) + { + switch (pdfFormat.toUpperCase()) { + case "LETTER": + return PDRectangle.LETTER; + case "LEGAL": + return PDRectangle.LEGAL; + case "A0": + return PDRectangle.A0; + case "A1": + return PDRectangle.A1; + case "A2": + return PDRectangle.A2; + case "A3": + return PDRectangle.A3; + case "A5": + return PDRectangle.A5; + case "A6": + return PDRectangle.A6; + case "A4": + default: + return PDRectangle.A4; + } + } + + private static File loadFile(String fileName) + { + return new File(Objects.requireNonNull(ImageToPdfTransformerTest.class.getClassLoader().getResource(fileName)).getFile()); + } + + private static class ImageFile + { + String fileName; + String mimetype; + int numberOfPages; + + private ImageFile(String fileName, String mimetype, int numberOfPages) + { + this.fileName = fileName; + this.mimetype = mimetype; + this.numberOfPages = numberOfPages; + } + + public static ImageFile of(String fileName, String mimetype, int numberOfPages) + { + return new ImageFile(fileName, mimetype, numberOfPages); + } + + public static ImageFile of(String fileName, String mimetype) + { + return of(fileName, mimetype, 1); + } + + public int firstPage() + { + return 0; + } + + public int lastPage() + { + return numberOfPages - 1; + } + + @Override + public String toString() + { + return "ImageFile{" + "fileName='" + fileName + '\'' + ", mimetype='" + mimetype + '\'' + '}'; + } + } + + private static class TransformOptions + { + Integer startPage; + Integer endPage; + String pdfFormat; + + private TransformOptions(Integer startPage, Integer endPage, String pdfFormat) + { + this.startPage = startPage; + this.endPage = endPage; + this.pdfFormat = pdfFormat; + } + + public Map toMap() + { + final Map transformOptions = new HashMap<>(); + if (startPage != null) + { + transformOptions.put(START_PAGE, startPage.toString()); + } + if (endPage != null) + { + transformOptions.put(END_PAGE, endPage.toString()); + } + if (pdfFormat != null) + { + transformOptions.put(PDF_FORMAT, pdfFormat); + } + return transformOptions; + } + + public static TransformOptions of(Integer startPage, Integer endPage) + { + return new TransformOptions(startPage, endPage, null); + } + + public static TransformOptions of(String pdfFormat) + { + return new TransformOptions(null, null, pdfFormat); + } + + public static TransformOptions none() + { + return TransformOptions.of(null); + } + + @Override + public String toString() + { + return "TransformOption{" + "startPage=" + startPage + ", endPage=" + endPage + '}'; + } + } +} \ No newline at end of file diff --git a/engines/misc/src/test/java/org/alfresco/transform/misc/util/ArgumentsCartesianProduct.java b/engines/misc/src/test/java/org/alfresco/transform/misc/util/ArgumentsCartesianProduct.java new file mode 100644 index 00000000..d08387a3 --- /dev/null +++ b/engines/misc/src/test/java/org/alfresco/transform/misc/util/ArgumentsCartesianProduct.java @@ -0,0 +1,101 @@ +/* + * #%L + * Alfresco Transform Core + * %% + * Copyright (C) 2005 - 2022 Alfresco Software Limited + * %% + * This file is part of the Alfresco software. + * - + * If the software was purchased under a paid Alfresco license, the terms of + * the paid license agreement will prevail. Otherwise, the software is + * provided under the following open source license terms: + * - + * Alfresco is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * - + * Alfresco is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * - + * You should have received a copy of the GNU Lesser General Public License + * along with Alfresco. If not, see . + * #L% + */ +package org.alfresco.transform.misc.util; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import org.junit.jupiter.params.provider.Arguments; + +/** + * Creates a cartesian product of arguments provided either in streams or as an objects. Result is a {@link Stream} of JUnit's {@link Arguments}. + */ +public class ArgumentsCartesianProduct +{ + /** + * Creates cartesian product of fixed argument and a stream of arguments. + * Example: a ✕ {x,y,z} = {a,x}, {a,y}, {a,z} + */ + public static Stream of(final Object fixedFirstArgument, final Stream secondArguments) + { + return secondArguments.map(secondArgument -> Arguments.of(fixedFirstArgument, secondArgument)); + } + + /** + * Creates cartesian product of a stream of arguments and fixed arguments. + * Example: {a,b,c} ✕ y ✕ z = {a,y,z}, {b,y,z}, {c,y,z} + */ + public static Stream of(final Stream firstArguments, final Object... otherFixedArguments) + { + return firstArguments.map(firstArgument -> Arguments.of(firstArgument, otherFixedArguments)); + } + + /** + * Creates cartesian product of two streams of arguments. + * Example: {a,b} ✕ {y,z} = {a,y}, {a,z}, {b,y}, {b,z} + */ + public static Stream of(final Stream firstArguments, final Stream secondArguments) + { + return cartesianProductOf(firstArguments, secondArguments).map(arguments -> Arguments.of(arguments.toArray())); + } + + /** + * Creates cartesian product of multiple streams of arguments. + * Example: {a,b} ✕ {k,l,m} ✕ ... ✕ {y,z} = {a,k,...,y}, {a,k,...,z}, {a,l,...,y}, ..., {b,m,...,z} + */ + public static Stream of(final Stream... argumentsStreams) + { + return cartesianProductOf(argumentsStreams).map(arguments -> Arguments.of(arguments.toArray())); + } + + private static Stream> cartesianProductOf(final Stream... streams) + { + if (streams == null) + { + return Stream.empty(); + } + + return Stream.of(streams) + .filter(Objects::nonNull) + .map(stream -> stream.map(Collections::singletonList)) + .reduce((result, nextElements) -> { + final List> nextElementsCopy = nextElements.collect(Collectors.toList()); + return result.flatMap(resultPortion -> nextElementsCopy.stream().map(nextElementsPortion -> { + final List extendedResultPortion = new ArrayList<>(); + extendedResultPortion.addAll(resultPortion); + extendedResultPortion.addAll(nextElementsPortion); + return extendedResultPortion; + })); + }).orElse(Stream.empty()) + .map(Collection::stream); + } +} diff --git a/engines/misc/src/test/resources/quick.gif b/engines/misc/src/test/resources/quick.gif new file mode 100644 index 0000000000000000000000000000000000000000..59f4989e2d4d4b29e9c8bfa3bdee2d0f0b97c7f5 GIT binary patch literal 6139 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 JuLA&T{{xRy7(4&~ literal 0 HcmV?d00001 diff --git a/engines/misc/src/test/resources/quick.jpg b/engines/misc/src/test/resources/quick.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1c1e377ad774ba42489e40ed19fb68463a86712d GIT binary patch literal 57586 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

)@ypm9G6& zJR5)1+-?Yx*2hl_x9=Jq)i~0{VIl@o9^;p@-*N|il5&5emW%NUSO-Iv74ldB6bv+E zC4qo|1P>2+&J938!(aihaMJUk=#%PeE%;UXBssWiAR{cx)p9CXXPJ zMz339-;$0f8WZ*?$}{LxXpIjXT3Yhmz0uhD>0Yv`Ap-BlJ|2U<5bmw)f-I#cq%<)k zCWBjcNI6Ry$Rzu!nAVzFDpJM0%pjqIuWscR(rbD$-~ossD?m$04SE z8#7#~Lc_s~dksvAE11!Vo|>zMX$5cownsa6XOn1L-=rl?n^`xkKN9x)jpGi#%PD9K z?@@|>L@N!8RStDHe)tqOp5_EMF=K$rdX7H)7IDu9{W)Nvm0=MzVqu#|u6d#?eQM}Y z-A8ifWc*{uA0kqI1(`&)34}oXWj>eDnowwc!pWczpFD4N`b9Xut%Qd)aa*nBc^tww zn|5zVHb-F4G~jYd%?miTN`Kj%qPqR8JZb$h3rGH;%(<1682l5A?}{qQ*z?vTJw1n4 znp7BAKrx+j^$*S!+vmwIkNdfi*UOw?stiY^D@2w=uN)uoZdXf3ez7X8p%^iJtoTE& z!5#xLk@%_Mu%aKLVY|8$k|-QL(7bO%zBSnrHnZ zrjw)x&nxpousisp?egQ5?`h~u-C-h@bLF3%CXa)WDrvwd!HdeLc%NT^b>wGnk$D}I zVldoteKOtHeSKTq+d$(}+h0%{bv4OE4XEp^tFq%{)RgJ`y)>f3%SOruT=r4*;E^zJ zP2~GZR{c&kp6IrZm+~-%kHg+yoaprHdU>fvT5|wBhL-|JMBf|UYgwxJ&8M@pV2BW7_@U*Nu{`bo8}d^E56Tj z+h}A%a;7XCKtGJ5x$O097tXF#i(5WzOF?_4BD3aauw8pv!2%iCFZ8d#a1Z1cLOSzs zw?mn}-P$Wb=nu?#byN6O&96n-0p?$v35DpUD@W<0)kP=VH8gWB`L6aEXb5KKbmdJC`6K)Xaj(jlD0HK4dx&(%us(gb# zd|x$DCuV81m_(>Qwd~o}j(oG*q2W-vl+1%g89E_@_(~4@!O_-UTWv6r)iM|pFR?ZS z2^%qI;K)adJSa>5(XzgB9UAki=+w}e@7wsGlsHd+BBvTV>r!pm{L!Ur^$i}1WJkp+ zFqoUbtY2wYOie7m5{n}J=%AGJu*q+;Qe{~=GpeGyH%{{GEHJ7%%kxg!xICV>u4uii6f!oU`wW2YmN+ij@P1^x!v%* zA0}j3SI|0+q#R)Pfl^e!hw#D}>=kT(r)ZK&zRI<>T2JajPcHo-eS=crkn5a?aM*D@ z5QO5EOl3!pnJ0l=6uHw&zCATPXWSvYf-tfnInXZ=~OmNMpS4|hACuWZIt zc6UUbKLM^F~Rd9!0~9h5E+l1d_3)SA+8IQJ#`#x-Rt4e08_q(x2Z#goTI(r1IM zR>?o@0M7IQS)P0#FDWT}ZoO-al~b|=AKN1}>hm|#z&Sssv3;?`Ex};Uepey~L2J!c z{rnLP+1WH}a|Aul`R?r;m!GOh$4@aRC*Nkhtod={k#_ELa#kF%Pt7!nl0S`j3$x|V z`3F4DC=t(OQ{5Gmp)n5*895m{m<__-MHM%gi&3oD7;wDP?64XBcjUqM#{!YVw!5 ziJr&6l>zToxt}zqMmWpGw>l z6N_$8Q_rYRl+~8W_f>(D6Y#ewDlSBWEfzoyp5i?G;4sKU&S#!Oi@mkFs#sK%Q3_!^ zmYuJzhX*4{KAS(2wxpt45@F>#y9(HZ5G$x*<7#Gh$!u|cK&Pe;8YQC@Eu@j7gS9NC zWbl)>mD(_y!b(<4NI8`iQ*W|RGU%jZDkjpB*d6T)`3Rl7qS*yYiCP#E%TOpWruG$= zY+6QO4%#YT$(dCK8V-I6^`oxDUVcJO`PguMqOO!d$tN47d=0=V1jbI^4>lSSe~$12 z2dO1@iW4p33Ph`JtF_(ExjVW?h6UeF356vA(?y45bd^j+qzWa5M%P&5hgRfhh!Rk4 z0#arJA~}h~JpZz2Ek+-Ml5yBej}Ae7E_RPCoC6h^{!k`v_uos3u@aB@gP&bae~bvv ztJLIht7D2GVFf(C0?g|twNu`73TOQ9xJi5$kJa5%sXcCnv#Nt9Jq5d~ZEpsGryB;= zyS;R+_dJis9G};3XSYSj2d`|@w#`#tMjQj*LvPdMzHB}$5}@gE8u|1|n(^d_&1>^n zQ7AhENm2ODF=@J|nsMF?@Amjkt#df09dOu>(&jZh6+TpLTAw2i^xUz$RP=b#fntcc zIwf1?G@$*3E8k#|A_O}3;8??nsQAryLzUSFt(-CM9vUJ4Um&E25tvo1t z3c4SxPO-Gu`LhEQxz(HYC$m0F`VC0~{j0rkV`^bCc$PADmuJ2h6Y=u%+R=`T+ZbLK3j zW}-_K9N%Y0nFXG^=ZkHA2|65{(O^p*tJ?455BP;9k-0xoBtDXE1{$%y;Qs6;Kvu;{ zfAfh_0rBVsvg~;{YeKmq?l=4DaZd8!f}o_A*{`Rkdthi}$zu2$=~s@-$J<8`funqb z-q-rC37X4nwIZH^kA)N8MWr-K_6>jAbNOt~My`<4PwnTvjC)`hoAEFa%q7!MN3pdB zo$$NfXy!C6kgY~~?S5#KgEyq+1?6FQUC5TQI91nzrNu6)?4hNP(ONGl?8Hd>>)>@U z=xn?>_c-24{0S2Apt{Bze>`D7;1338Z1sLD`nj0*j>EAdhW{e@A|aW!2sV9%GKp|< zUGlN?Y=0s++furzad*+QWJNSl>Oi|C^|(<+$tdA0!9!{NF}BkdJnVErf_zY4EJ^W= z(6%#|qtm5$ZQ~2pJikT?We8GoS(H-gZ7_dxy*{(YgkbSk-UnfF3cHJxx3%*bD?;r< zkY~UFT1=L6XDu(D^4Z;qc{+~DO|G9i`@dha@P}&Pwb)0J)_7lRVs?72E;7Bizo+;! zRPXuK$1P4^0r7aGU26k*gn~{d++N@^K2CgurDFXi7_-uJ$ep~2x3(L}+5Kg6qSiaN zjQ~H6P9-P0QD&PC*iq}dZ(U2f{OMKKFmJDqIN>|`@3)kV>$Pq$LE(%K&-Uu>ok z_Gy5Rs}E-UEs`f;AKD#+vQDY%BC;Kmo2N$%R3t8PMX==R4}FSDC(7OPW;hPdN>;t` zJ$LDL$!S$(kk}e!sk!pnQ-a+joSX(o*v~FEiBZgT@9N z9-b?z8YG6gmqDq1{U}!EtQ4EtZ=97QP*BecC5CCYj`p>eg7x%_Z2MNDwgs&)*w)#! zQd<;Rghrofn4qQCd%T%^=hs2rmE{p$T)x)sP9Swx7lQ~)_{7sakG0!N&>EjM2KC&0G#-F)o>I9kI zgx5ABFiQAyuJ%{tbFaXD`<}BlqrX+a z!kr#r|BJHA9wB(!y2tLGZXZ!{{JXyS{KtNW;f2%vE+NweCzvz@4s(m4q%m*}DWT7N zO2yHP9>Z9k_T#tYpXpoYZzjn48LOug!m`PCpE<@uE$v9UL)DUF01s}QLliXH)?xZliSMP4!6yxWW-N`=ndM}sW34Js{wpd(L9br_-Ivq zwr|u*pf%}X_oV}-Xp*p{FWbCS)hC4?zEkv5_45N7gFpmMKHV<}&U!Nz z&OOMh#GP32L2)QHr>YQ1^~?3tD?SRnWtGa0L-<%y+ww5$txfQDgeC+=m00+4SV`lA z@XS+bxo3KBE)rImZL}xH$n++4$yYpv4vDYfVY$?u=#-T7p-ulmNJV8SNSrF+v>~2FJn2@P&3#g)vP$N7DNRaxqf6tGtO>RF^zCkbYw|=$;rE8nIu<#P>fW& zU<>qU{Ny-dd5S}lptC}&>?z9)=Wyt#>+>n;G*niUN9pm!JES`jZ)zx*_HP`%Jx5@^Go*?g6~sk8qgeV_7FDb0rE!EQM#XBG{Y*8>CNt zUq8>${N*aIq=Or_$G>R(O-t{eP{MOAm1T5PB37JYT1Z9dDx4|6iJhYvdlGIv#Z0E7 zE*@vX$1J)nSvtBO6)vT;NQI48VP~BAiFKLk1#+L7NYInNe*IE3ttKi%giL?DhsU%x z$+{ZoE(*g#Xr!Aw8H9B&`_ z%UpJ=Q`|p$G6)7g_ZJ=M8yS>#UE4|n<*?=%6(T$ zsaK;+-(2s~F&i^O(U*loQ94iw_Zeo1d!OTp%3W%}nj9rO;yfZ{pl(vTEglBQnbiTmxz$Xik6A>K zEN(8#T`}_=4vP;o(T>$MacDpF0i2Y~0d&e4BsJ0Z^f%Y|ynpn*YBGI5!d7;^hYn0} z{<3PYD&UrJ-!_(XfOv8fV6T-v%QNc0x-z06#MqVC9dipR(59r z+j<}0P+#WoagHl3t)AL9Bvsjw@)eArZF4#BAA%fNTe3v51LQsUjyToLCSBvgCniP8 zU3eN94OgZ1xK{wIQ#Iqrq|sDtK_WmDi(%i+H{%NLSml`Nj=3ihwb{r?|6~hZSZcGH z|FGv~ej||q`r`YUS=)w4Zy|k}E@xok5shXjK6$}1A55n=AUl#V`mok4e6T{lPuS4Z z>~vP4uL~{R5{$SQ@2R_^VAwOC9M0XEfd4)~Sj4sXUeqatxT;Eqv{m6-=Op>St?gd> zP)4&)?dOH{yPVed(#cYIJ>rgK&q!ZB z%r9_`Hw=bxx8UYnP@8$;G+()nDkn`)X3!E1?Wj-;8xLrfP_KjA2pxUR#G++nSIq)^ zwUf0cP4E12&D>>ha0t(Hi3MdU?OuTzQ-XKwjZ(&nY(fQ1Z1F4I4?1*e?hjOA*fsO# zTTfS@HQg*47(U#lfn7O^VPRE%t#?suQRH%VqOze$g%Oc=x8uI**W#NEPhvGS4{^pB zdiz&6Y&%-%4Fq3!FF%Y>tCQ3bQ)FzNY}lUCEjKH9AFs=tDg<$6EsU>JMv|LYofFyq z@>me4Sh((JYES)mL|k-x9>?$FqiD3jW$FY<>%yI>dAMP*ykwB@$jvnK7o-OhS}kw) z5$Q)O-Q%$FN3Hr9G1+9{M25=;k(@tXy`(tDH9wCqY4k^`?Qu|ZWBWX3>?+S=1WleJ z4|dnIK1&Ae=;S?D=gm1kbH#JM9l-LrNc|kmzUS=X?zg$VIFQ(6l1J0#W7HHlteJ|W z(TmOb6}~j0xwD|f3yk7hqE0`n42@0xH&tRv07ic*$0DP+%TY5sYHb%=G;L$z#%9Y=*)EK7q1mr<$f}aM+*!oWLqG$|v2hfkcX&5kI zTKQUrt$>Np%_S&^W-8NO*VHoDozfT%ojwo4mO_)Uzh1Huf>}Ns)M`<=oQliZq%(*N2k15*=6QtCakCDbp zLL9tnXtCMUShH-HAEdlwNQo5&M5iV)3BRAL1TC@W;BH#VK4Ww4dCZDa2UyiPgHA+L zja%n`>ACn5g%u@C+uFrXBQ5Tn6`Of2rLtH!%F>Zg*M7M2T8!M;W*R}!*uHExpXg@DlS@h=k`w?w=VwI*E%s<8H8q0I$X}I7 z)XR>B+L~_8FZGS%Gi57+^E?d0@%&tQ=MQs1Sx}av@aZxwWY+)1;hqOW&xL zoI*=HvTcbi^+}18WA7pZ*$DGYCZ~HBd8kfaP#&@M5Hy~~_($rHc+mV6Sb7D9q<3_( z99PWZy1c-#1!J{EGKA3Ndd?*wO4lLOKdSZ}*7TE7HL4G$u%Qxo&hh^1t{!HI;fZW+ z^{M}fo0*-bVw@{+3%Pc{OZoOQS?6dXD~J?RNUfH?ZVoeFNaPR+)j&XV@nDen8ok#}5S%UKMZ+&v11)xL2h%A`hkyO?@9R$FwG zoZDJu&sZGicWQM44)O%`+(pT8NjhYH0`>#0=Xj1mLx|U-Jiki?!ev=a!lj0Ih;4`7 z*^SoFHISGWzZVcC*~#0go~u+^#U4D0EvKR=T0kU?TRA5VkmT@Ny=BoWA|4-jnM!`0 z)BK(D5s_yB$Znt9zjpin{$~y%EF28nfA03-h^pe6x_*4mUQl-ik4Yh>miT=dkBn2r zEp+RgK*?1=2jAQH%wOJvU%HFc`6PEISP zaCcE^B(ExvX?xW!=S5LP8}?-=d|SbfMsFLP1|wUMs<*ftCWZ45yVoU&J})HnWjdMBx`-6URuBN2nQM?%{SE4eG2@ghg!m_1Tnc9{qMPq9_=* z6k02p)B{vhY}rZ~m$It=bMJPrfQR4+X|4<(L33j+8khDg- zM#eL^EAK)stIQ$aDuiPicl_cX z`#$U{@e<1Fm30iZI!{vsKGAt2iPeY5p5PiwW5huEgy&MFe z`yBHl2+t$CIs#V)YjikA-z6p^q3|2=;W3p%8Ffyp_!?_mVUCW~FW#;~`eoDMY?YHD zj5`gMql}wbZ?sNR!dWOsa+VXW*j}vJ*MDKdlaB`O@-QR_~ z&i4KSXTE=*2fyCDwpOZa$v=rs2qXF7G5)qR*v5Wx-T1L*_bJGNtj#<{gmCthdW)F) z+5G4nR5$zp>)aErUrF~?YDX^kiRzBf&0jz+HhNKsrDtPXN;zQUf z=eL_4est=stJE8XM;k_p>1Nfu`XJ8xghR*V#*U(llFW&jzQ!>{eJfAj#cPkteF>^k zToP4N_YR{*m##BrCd?*m)Qj#ek1S{CKq z{O!@<-M%*St_!)`NIFOpwtW6jD(h5njdT01hN0I3^sO(VcXeHXr{4jlM})8=yIjLT zwD5wo)tM%^{lCZ*roi8Y1v+eK7>O^U{XV@_GeFi$;0rqUtY$X!;&@Tr(>lrcrS?H) zL_~F=was&B@}7riTdEynUPmnniPaXBmL+n#0qb!Rx&C_{0Z~($cr@Wdn+1~4`AotB z=5s%qUIe;j5%ID)9sfi7xY-;3O2La&o6ld10h6KV*yrR~CE?mtS$dj;h1?duW!-n8 zvZq*=EU4X%RQ9GO7>~-k1~j|@4yB9(7r99b$+MAS25K_MOV_d6H7kxWDcmy}34AP) zj*~lfK{MM6yvNCtD$?C`qtwTBTq`T3iez@)Fq3|IxGT~4WYKoLB4H7kqUyzK?Xt6! z$8s&c=x4a01T$QV?XktZV%bdTvY{q_{764{Pz@tAx=bk5nwLB}|L6H*JHE?`il#`| zb{>;hr%=yqS&A|xC4Zm#qZC4VKlASn$cSaDh`}c5%*Qt4FIp+KM>jsGli_rKnqO5u zrW%$1oQ1)=j3j`K`i`Iblq&yT^oQ?IULc>-C7s-wD3rd;W`C9LYQ^rakZ@Y}5z1kH zw{^*V%sxD%oS}S-rWw8&Jy#p`C|PoW+@!`?FCJw;&sNGS#54Bg&}rykmkzD5P`wkT zG+xfJlq8o>_9HbPdN=NK@nEIvDqU`Vd?5AEfurlpOf>)ZSb-NSCT8Z+kYx=I*vInb zY%d>MYS{GO{CDb(yhmp<3P@}}JkLu0!-V^kX#-kC?m?>ETeZcP31I|Xe1h{4jMSeJ zZCJAOCS!qGnESGl0$J@GU#G_=48;8_DlBPTNzZ_D$#>|7>{5cs{Vew>WV;xVUZ~G@ zA=}ilMNLhbqS%DHa$}o`^)4Cmo{_C!d5nBa`7drw5-8zA&5j@5Aw`(oiPc^64>Xvs zz`^1x5cO29$QwpANEuQUud_k-pBPa+8u7zd+e$jctwrT^PPL-nqhzu32t(^@*m_u54u^ zJ4pB3G|K7gR&0!@v%;<$%WK6JDy$s^J?5^jq<%wV7EMP!TOzqS&ktw#eL&`L`w9%2 z*+6DuK*76he+{~0VHLxwciU9;s!zH&wR>hB3prg~Z5GA*xJ5D>O6^0B?&lYkYD-=* zrM1^q?K9GxrL+h%nxx-MOhh-TPVyS>g*Ey{WW6|F-agSeRqdKG3tP^3=IJxLruq&z z_#WEb+=H_XwQiMi39u2j68n@-2Ha2;lK`5gU-R1Gy}IX^y;*dwaJe&JE zT*t=??@L&+RYg&@VOU|`<~7uWIT};X#DpGq{U-8Bq6V~jC*OOm$$+tRMm9AsqXMMV z0XHNfsQel3DWxYcoaay-Jg?n*jRf=b#L{rx0wpt@OiapTftSPnse(_&%$yG*x50XC zU2RR@E0dhI6wawRmyH+dDz&b|SD8wY<+9|)Z0Q9j4L?7qsx}RsBfOpZ9CaD?_VK!; zI?U?qo3R<>+X_IcH2_w87`2Jj0G}&m4zxQhnUeTw`1Zqk99@Cyd9H z(^gyZ0jz=8fwp|tV8J$T&Gn`FAttA_>kEpgHJNak-)V0_iW*VI<>E)_|gb5%#G zT~RtFS4ij=Omc*e!vj+El43ZaHhCTu19CfB+Xt6+S~cIcP(G_K)OI|Au8dkd>TC7X z^1)>*{L>8sf^I6r~r*AZSW{%2cOL|-S5?xL7;8#4{}D|EAvxzF>Wy~lOZ_Zw8&U?-1R zkm*4Ca%d98NLEjq6}Y*;Se9}k`*zmJ(>mBQqDH8GB#19I*4XTJDO!v+o8e^_4T~^$pXG_ z-4w&l8IP+mS#fjQT|!)|j?JZYV{%)$6Fb8!y>lo2`+hv}^hmvB}&xW*;w0nR7i;mvpaG+1B|pTigA>G;bzUum$1gKkqO&9d6(3P8O+Kz`WB} zXon*1IOd$ylgn&TaoW#E}de57nf*qZ1y=>vfXAZxeKoe(^14lm5tTj+t-qS?J-4lvzzjUtJl*J*Wk)65#`IlC?pD9?u(e$2b=~SJN2&MF8?6y9} zC2eXirEE~CSG8n=5csni>vuVK8LgFTe8r#Sr z0%O`d{|Z#F1;02$-k^Qa3|r%}*gi>a)l+i|#=@E*bFyA-8FzL$29^7!h=m*Mq=)a= z+1^^xM`7~4J$SyK&*h5Lp@?ugfGLSM$%v<~Z_}&!`Z$^VuB9SwVCN4eX^jPGlcOEP!nz_VM&us&L&dItHM#ql-s*p`^h@Tt^`Gzl65Ohc(Cd$~eCm(qo}h*wcF z1Q`|G4nCBso}&XrM!on@T`OI)ZWL2qtKF%ZSf{?XA#vY)A!NOnv_>=tOsl@d*%Cpm z871LXr52YJ7n2mkMYQKYzd`Kti+=!rgr`q;*568FL5IPn&$CdL-8>!ndO<9H=#CfU#RM> ziZ^HHZJlqUt0wPWFc4UCi^Ii>L(87B%}Z<2BRpmj)_dc7jYZX{H1i10#ImAK&eiD( zA49h%e6%z={!n|PTDZ+5cbu7+dWTnL?v(&{1!1D4OaPW=KL?_%XEk^tTl9+PEEHfL z5aZTG5>NYlYK!srCrE%UU0trnfs0Wqs$ipX1c&~pMs9R-;(U9EJ9VfO#e#7hc1&n~?F}sl^+V7kk9Vai1gLFLTP;VO7e7%uWacO3R9{A|8ABq2{!2Gj z^k~So(f?z-5zJnuX2=MXZTnYZ%P4+_>Mt1O+n=&orr)2umq9zcU9#qR71iD-m?HeX zN=^W2zj*C<_oWzADpF|&`+o*Pe{;Wioy^xylg{P4q~P`VCw;JQpF+8|0c7k@#?xZS za}>(QCzB&R{~9hdL!@PN=F~ywEUOi&zmjIJ4Q)!{bbk}Cvtls!2fs$(#P0lgHP^Jq zw9R;&xvBJU3y-AXUNJu7UEaZ5b!Ey$ls|0C2EWQIgb{|KeqChyGylSD8gBFTg0Zme{Vw z&yQB$=h}3W*{}Wk;etOPp|w@AM4OgHw4=S7xfCiSPh{`QC17{0#=)~dx9_v=_S`g( zzC!-Io)0I_bDB4n1@CW@kH{8!HtzHu%<6V!1cY&%C+jMI%rE_!|GjGJ!n$Dg#ndd((cuR1i zN;$dTw3rfhWeNIgzr{B<^~|NKgUMM!&5RI3-iM;v)qda3XvR%>FF+PvVp7wG6-&+w z&Lu3Y7Zq8ow0>s1$4ZJ2aTj%~1G`wYV#K!|1?oq0;R-+g{aG4eXZkN_mFC#~#in`2 zK%$#GG?s+W=7i8g_VZbhxGfffUzbwgPO0Omn26jlUCAQXvrSE-b{gH(iLLS0z;~A? z2Zq81hsG&YALX)_FQ6#jCQx-vmWesHO$J{I4i$KQ6DB;8aPgJwhaMOyBeSYDaA>L{ zzb4E0xc+x);4lRSAY|IcNT>fTBCe}haE&~$1r;z(UM)gfrf9%&s*>M(gsM;?l@UMr zlONjdR}i_=3wEg3=@q{9p8J%IYmSaXfScJ~4VTx_(n`-h7x?Mm&x^?bc4e^VC%nI_ zC~?Z*>9%6Lb9+$xAJ<;o8Q`6#eL@=F8dcuPKQurkL?^uS)+#qn)xIq!we`M&cnc8ebv00(Zu zM23}(rV0Z#2rZ6tu7WKA+3c%}KW%-C^WD(-E@9J*C#-TRW5fa{XPbuQ9hASxRWWU9 zs%kI)pmb514eA^7l6Z~F^e@se_V#mdw7&4fg~6}s4>VSn;n;TEPufv+{9?-Ah4|Ji zi_e@VZ{G!fCAA$*-;F%j|8vxwH9ZgyX@T&X_%Ib;JRPhTK9_)H*bEoAtI6Ya_3ULq z`h^4~UTYBHio3fzJ1$73yxwMzZl?;m&a%i;fN3`DVWGo3>=w=Fb&yuMZi|#{fOyBi zdPT_VBGpA7E$Dj@p7mC_4iCoQXKz{g4D3lp%}e{T2lyn27HhKJ;VOO;OJsE))|uqq zg|OcdTfF{60j13`QGbnlGOrE&>3t>o;g1M}I-(cHpp54Hd>ldiPNOS?(rvv$sLh%9 zJ+XWV?)!=5hm=mG@0^F(5PDZNFk=EPO%HB+mut+Oqh1hf?Bc#qQ8(=-YyM6Gse(ju1l`@9U57C%;TD1Wv~6b^rF zDyC|-@6${Dt_3C*+xcmGRdB6jvA}-qLs=qCQ#!rwO>l>KS5qU+d7)S6S6~0C;O1i? z_pg#25w9CfRj~QE*_kea3a0iX==5*>XWt)NGB8FijQEs%RF_*a7rOf+96exg>{wjD z78k@UyVo`aUFOEOgRmj5#5r$=#d||MLa4bY=n~%aJbpAIs=!}LnPe9=kTLzUTrj9+BxlmY*;)Q zH_zX&f7v7a!gCj9?YznxxLuwFd{=3fh!nnAtnJjlmup$P^sc(V(zbQWt((7?ve-yp z$*NlF2fBV{7TX;H(R)2AOE^XjbWjJ{fZUmm%2uRya}&|i#QS;7dN$f+e~^N5Po*0V zV# z^%U)u4AcrDPRF62L`n3cIJsqk8k)O5c&Hy`)aDR^X&IE)S98qAI%~H?i66Kx-8g(4 z7k)R%ecRL0W&J=Imx-SHRX*dZJAIDG&Aj^C)hm%SL&Hd%jgOH6wc_4!tcWF`9ZrYl z%TY0_9auIFQa&nVgHWf2&%lr}w*n9xgd(A>=m!Sb}715YSl~v6`XIM!P*qD!Er$y8JI~pr^{l zKQXp7yL=DmsP(%t3@BqnE-#;JJ@Pt+#d^w2`(fO+x$j(BGtS1MsJsuFtZyKbRyLF_ zH*xj^8TH!$Uf+i$aHakuaZ_s_BuO+N+5ktoTm|H@TlZ!hrSsY0qBXAQH(j*Aq(=#+ zr(uu!b=jq;v0abg&C!L)I-yu#z}GL+W^a1B})pdzvm3YSQJn=-nqE4ktt>(lT9MztM-efK_j7$MtwJ>WRj>*R z%ST1c>0P4$D&r<-MH#zCS-J3K8-A?PdvBZZiWtw+kt9+3r5S1`pFjJIPcW_k_8J50ZlOpq}xs#vNZGB%CKJKm3%t z=Xj;b7`;AO+u;;_`2nSx2h>uDthAUts2=}D0-Gtj!O0xpouBrr_zs!6H6$h@#>Vhv z`i+HZ6AEqK5I}e$tUt(M^7GR`l^4G{Is&I>Yn@3ds34yYOejzZZN1)B3~2}QTh4p);_ zS$!gx%*}YIc7E$Ip2uBtPT4c%r?7=S#24zTOGeMBhmceKyWmOkv>wvbn@eB8ttk&lR6y3d-cT;{^_&{SX? zs)R_fI$Ksi9mWrsBL<59p#|uF2sK(S=V)>PNVBfVbRL-zaB(5fkBg-ST+!L6;t&V= z2uJOB0uL0s=Lajz+LAznUzf$fMJYNB+IcEqGlBjMw{*BLD75mT)Wjr@E0DE4`+c*3 ziZq$Wg4?#NA6Pldsm&4nD1fvAT441eZ$;A-QR_}r>hCEcoG8U=vYxc|%FxaXF5{5s zR4QP@2!w_SK5uyeXR_rpwEFPdl#x4F3|VD>@q=&8jInG zYJMiU*F0K|t%22QaO^94)Dri0MNQLMmUbruZ{t%Nvg+yVM*7m@Vd2A_e1Mqln~kCY zU76;;dEcw_GYS`FS$uBXDstIe*pbAnFcUV0EtsysfnB8G6iS81G6-LLLzlnimzw44PZ%U7zA?4r*2B$# zFc*i(?sm~vt`tS0@r_RI)brljR;9aUh1${j&pJMqo@Rbbdkr*2OO$vdgARnkdtZbZ zJx=9))pwe+9YJP~WVWklR%9jaN|DdiqRA!QCUIVV(RF zG!&_*7nYP#Sk%}5{|O3V$vg=Pb;6r>INmNr3L|jSW$FL85Vo!|v)?}9(#4W~e}bdC z%e@?{uUPPTHo%@zCLaGa4W8?41@klm8#4X9$DdGb%i-LHm=_y_=lJKnsA!N;AKu_U zl8Qz)Eq(dzuf4os7^znZ0O-u%CPD#cSkbEX zeu`dX;N{5^5_sj^<1P(NG7+zJEU-{HhSs$ zYp+ixcAtKfKqx$Fp&6bM?v5APGm-OfwjX1<-eoyxuKBrv>yNTnL={)~M>qbFcYIxB zLb1X=#Kar6;A7gT*OrM8HSR>Yt`3q)0A+`f&&R?tPbJ{CxV?PG0qXGPI}ro@qHUdB zKfGDXrg5iYo90;M?)p{WMp6r4thgjF?<13yhFY6oCrg?JTlmuJffM#vydkQ7 zHmRcmp5cA6_dWHr&V=~g%o^5IR6r@rbswpjru0^kGBGPWow z)u~=oMrYvSVdayOjzDiA!(axh%)F^**YbJJ!s}#fVNMcd7X{hlcS~IX&zsC&tp34I z8~Ewg@R`D+N?iU75WeLP3SV}8))8_n;a_;s++nzY{%UaR^m5$>Ou!tWpTkL-&tAn= z4jJtfK7L!G8zjl8_Cr1K4pCp8VBx5c`0kGfi_ zA}rS?q%BK17zG*_Sz#}XF3oq0(%#WsR^U0YM9LfFIFX_HcqOH9oEoI^()Gl`BFl=c ze_D|7L@cnTxbKW~CvgDrCm-`Dp+=sxZ^s4_bxBk+KV_|I?m43lkKVx7jlQ{>iK}vp z$p}XUyxtC&qUTu5!TFa{Vmh#o&G+VqD-CL40~q0ohcdvs~M=d&|y z9(C1u)UA7HhIb)6dag%`A~f7lv?IC zpL+%C;ER??jn2y_X%j4{o|fX`&j{dFeb2QZwAvq}-&j1~e^EQ|4{iM)+PJ##HQhA@ z_lRTe4hx)_(b4{0-U?-LQ++^V(v*1L3CwN(ryN!z%JK(sl2RwRv##1j&O+f+?QDD~C_8r!go)mLTS)gaj z$sS&Yvku!}YmZ@xl3E!F1!$>x$>JCm%St$?8~)zS*H*UuC`(!MZHW#xGAZBPI1%yQoe-W{3v1u-m!e zfg!zhBT0ZGD)h}ptE2^hGEaoMYaDM=j9%?Vq$*=4-Q$s!MQtB-A3W)61H*Qe2`KeY z0CMbshD83jUCqiUK>?bI=QhK_R#zX;MlYXi{w5!C5 zOW(K&*-f-3xwTwxG{|Q=6FS1sn;#0V4Z#W0^apQvEH^-B59o zO+-nH$VTvdeevTzwDe0)*OKGZlnsHjPup#z>b^rfmof&Q{-zPELcki=H&~d$xl~RC zz7~Q8RwfQg9*YD-QemS%MiBNJthz#;)}VY%6R@@hJ9p^1i|}PGZer#k%9&;NDW`8J zR|Tamogf25)mILGNQo+}^-jT0Yoq@&e_t0S+E^gTh$xQ}0?-rs`HHtaU&u~UY~0l7 zSoj2|&Fi`7e4ieAOuYIAz?zGz*k@+cMv5p^$Vau#NxjX6cG#5M_`#ONs+7nm=ZRM> ziK4oA=XpgK^a_wtq^X_;d)Is)>8N?#sk7z2lm%qsa9IbCzvi{Fe6=guk`5BXt+s(PmPleucCHTwxkUVZQd|B_=0%u02%mBFlC7eTgUf@HB> zyRbDHPt=@uS)9EbQdJkj$Dc9+V`f(4*kYsbTCrS-QYAkESk=ZP zWjRafYmro{amzN_F_q|uqMWbI05v>oe^+_c<-KrR2vd?LG2dEobDBl#p$ewJ%Z`+3 z6}8Q0K4J?n4MJpyrf?zVydDU)n6o%|RBi4(;wlh>s567L>HZL=2W8#e4iza7CEDSG zFb0!0-iz;!U&o14X$OoH5h;%1x6sFS6V2q>3GP;R5eD9Vw~TTTi0~1>cPDZ{)uFDG zOYMqL0=!c=svsB;-Ne*{_V(U5fVp#mc56&%OsPV1NNZ->Jl#bIG&*KaMlIhxE6m#7 z;b+LSOFfb5miBgoL%|~VhwGTM2B+w+Cbc%8;PK3Zomiwmv^CBrHa3v~H{3F?mgvCp z=59#^+lEty@8waaRb~5fKg6b>nhP?WRke6x|CSnvJeZU)Yc^6EH5VxsAJIPS95pXt zA#vDSQ*qtJuWC+$)BSpD^cv?nk+-p+#q1*naaB{LZ+G;>@MO(2988iFg-ZZj@R6Vn zQ({2O%JAAK1sFJHOsoi%#*(X7E*GUPW1tMo#8InKXDk=9E2=24H=gcrPtAOV@>^?XMt2;+u%s1=y&39>)Bva;nDZp~g3)i&zQy-6ZQxeIV2 z%hDY7gE=hw*KmBoOKed##~+2v5+5Fq;@g>bQ|h-W4zShYqEY@@?V?Hoe5?YHVP|j$ z?ocTEg7FYM37Q4Y$|%*fSikSa94$0)hVDGN@>j0dK*_HA_()+AEc)^rx(jo#f_d+h zGzK+a8$|}d=}aD*Svzydu7%4k3H$h*p^l{!2br91(jI(RWmmO~v^1N1AuVI1{&I{f zDRoZpXP%SzW!JZZq=d$j1EJ+dI%__jshw@k(Z|NwH21gygxm5!x7S$vohQS|0x#uo zdS(WohsC&J)@3mak(JOq>loY4*7$~qq^Ip3{G@84kd@WlGi%bl=AdzIS5Uq3~jtGXr64r#Vju@+Q z>V#Ss=^5CQtmRPAKeWH`zv3UM|Dj#p@EcQzg5b~A-l>+Z5LhJ{m*@DX05f%guO<87 zzF-w)e2&z%UiUcz4;#k6nMc*9sl@17BZ2*6Uu+9XJ2WAPA06;VgbwC#c zq0X;J5V5aD0Gh(9{${nIbK_0-`;17!`<_!}z9$T%)YEQhH(R)Q`34mK3D?YOLZz&I zCW*$hn)H=eSpH`#&R+r-lB$-s>{f*ZCi^+>n8hk;^1ek0L?YDfG^(z%M|I@;5Ot-R zbH!Xs2?rW2JR;lBcy*8Xew5`bxhWyK>0=!KoHTaoIFWpa(8ltXjxt2_Eia5J3Nl)b;WG zld4v-%mm9?PG(+GY9{{A`wRv$oVPJ3f9abXUu6ep&pUxP8T(2eSRv<%|J&4F!!mNb z@cUE7x948Dm>ewNmgLB=NYQ5ysE_e3QoH?)Gc%Fbb9|&DjW^!7crPAuE0`~zlKLOM z#KnrLlTC9>Oe%8=hypTR(bFB>{2BtC)E@ILn^o#BFZUhD9x>G|OUZJ!nu_bgbohY5 zAFUhLl4r=tAk+Z)A|5%AF`!o>P%?L?X;W5UrS}t6YIGG0&%wTGp)08>igX-M#| zTR0~yamAQI7yz`reyacTJx#;yQ4RjzJ}N4+A3c>mSDYC{`FthYY-qOBVpBYPq_33Q zNp_TBO-(U$m%GZ|x@rY&Wg4;-Wu(Hi4dGCts4*=L0(p}ZS4cVNE+i1Vh)j%VzC6Gi zFi(RxI$W-*%Ia+2t!t@^hf`@DxEciQVh$UJmzZK9OAJUkwojRx&%}gU8yrAsNLA^Z z^$VQ=(+rrGP=`Uz)Bzh54_a=^z&=a1SX9h^*?(IoH)0=@GtsWpS8JJ{4h*ln!jyR}Pcv=!_r06;-B*<1@Q?jZ~bf z1o}n&Vd@WH|JPy@m9k2~&8OSu)3zqjeOaT^lU3>oD84P5aLlY)iYNMaiaw1xAv;Ir z-uBN$VP=QzEDj_|r63C3=Dg>kZOzOshr6OgmVP4H`&47v5Q_3Nw!;^(|9!_8lVxr2 zIN=^d_GgH+Ej*D+wsM;jL;I+bTVDX5-RAi=KRJ)e8J#t4E(jgY3{X?@TvgrslgE~q z)o1t9%__FrQ!kCHy!Y%Zf_Wj!Y9ajKv&ttjmQ1Qh0u6N`&IREx$=XCqQ8nao!8NRY zNx%2+z}9k6hA#es!*6`{TJgUB(M(sBbg9F(pQU^BcM1mqF|tkR_%Sq!oB=!kYPQ0-pBvZv%YLsIsB(c8r#$} z99zp*F#lPn@Ks>c`EA3~@)_|DjgK$pOS{B97PB3EJ7Meq@)Y*eDGK^nQgZZ|cpurn zfYU!W1!GRx2z(+^w7&u@8rrG&+S<(`%hJGn~R-}#suEA&7_TX2lL z*7QrqKx=(C4^dhjk{2+h!kP~vHR z0eSkcWwAO{ZX1;Tjz$>)x8XM1wrURO%nX>S<&ODlzaQ1#C;jYaj(<07{#B2B)%RT4 z#q9}IAAQs)oY73g8-6;9jKEZK$6gwHVub@)#-zC1nBNG~j2OJ9FWHQ=@5_4!|0XOpy#xP*Sp2>;(3yLM(8)U&+}@T~Aw8Y~6Y{Z4rCJ>d ziZ^FYW6F&fWI^uNHChvz=eR(6?AQ^u+sp~9W?*~MANFLa7xv}32Vbxq9Pwaj&aMRf zA9Jkes~lQEc`m>|b4)v@8;u`qluF!)e3zX=5zJB`k)Km{);ey{<7&g>rbCUJ5sh#M zpNh?O%2an1FK+W8B40;`V0`Secm=bkSub?Z06v)q`MVmeY>me-0*F*L`?g`S%fB2m`H@`>beu@ z67NnJ)iE2v>dp6~v~RX7-f%oVMYfLAOpI5Fm-fnCA6}=VL&FdPINHwUg8exid{3p+Ac-wD{oBv zwUo#vW?`Eds|n+3spcZ;y5C55R88Zpd8aXJ25IYd(Bj;F`oO@*)^x7+zRkzf3hE=h z#i|Oejy}FOH(xGDURv@0G|Rp`mP?-)K;z=iLNxC*?yb`$k4$_5r#a=f&$P$C%!C_W zH!oS*g);B?Nk!2-H#gyGR&dtjSZaN@8!#3wd{@wBN39pLEt`pN5S$>X=&G5R7b%L^ zeJ(*?V?xNTOxM4UlboJsgNTWH<^qE5HJ|-na&tRBpCICe!$X-_GJFkkzxe(C4>Wc% zDEO1jW~aD=4;cq^k*7WX!f-;0+F8@W!nluxw6Qj{7{vobO`b#;E0md5>GD0HN2+IO zr7PS(kj@1!fE&A#y(5w~%}1nhA4r~i>J=0&K8}L}s2$$vXHNli*O3IpLWn@;&8TVTAb{)o%?T;acndyOdKK$1c2jf7{sP#-3 zTY1Rh`z{H#H(osK8-;9{^BNx4{ps$+-`Yf;2QOh<82aX{BRq9KXfQG09HZNBbQyiO zgNg~4erWh3mzwildfd4H8PR(gWoJvNP_4#(ol@{qCa>2^v2rPHg^$YBZ??&E6(zD zwK9MuenHyy#}F++J?)Me&BBQ4Iw9dD&oT9-%=TPIB@CJVmbBdcJa>>oLt8BC%OqH3 zvcM11DqE*{q1$9j_O2|1v9Tw*YPF4a@>V(o7%9EL#h0!5NfQX%dX?W02-QG?L0MMLqWuU-qNG z7`(KpK9{fIReCsJmJN|A4YYq~gh317)Q~Yzwqo|z0R}397fMQaU5fi`z6a0thDk+F zmQ>kT7nSdz5!=kQ&81XujA#`wJ7V4<=Zr&aKfG29EZblk@HrkJzdGyrCg(CU3({fB z0vR{g5-JQiU|!=8aKPso-Hw3ujftc#SdJ78rr0bytye%is-`2E%2Gf9FJx#SZT)N5HmgwoEMSpwT1hZ;}Y)iJ!)W z{tzh5SVf2ZnQh8>thn)$qr}An!pt>ZY~rQxa9zh3=XaEcH?ERqrYr;Wj_D_u=YdrK ze3%<+=96+-o$y7uDn)@E%;Z20iLs$-qV+Zdba@?5Ip*58`Sl{#0WOW+M+-7{EnEbC zgXsNKCasv&Z=KSqzE!46C?u{Ni9RXTY_`n>mmC(F>WeEN+@Le5?=poWF6f{$j;rbf+ z4H@U(?ZPIhe2`2@EVi_2X*1&6o^K392j|Q+9SkeQXCYn8LP4wZW!>#7DF`sa zgGE?|va28E8bzfUxdKaexytX&2AcCTv`gi)fQpy5g&E@$m4}5}FK* zI(qT#9(*qL2EFQQ>(hSaAcEu<-Sr0Qa!*5L9Eb-OD3uOe)Qng5s;zDk*ELQ-1wnYcEVM5`W_VcS~m)!$}Sr)oRAwYjUvap4lq zkN8_X?$Opf8!K(jeSwoQJ?h`ZC~a*QWu#HIg@Y5@QmS{^a&7axIAFfFh1oW?*{U4% zUc1t!80Me~YSB51sGR51za|JKKdfAY*UYLm0;GR?nlB`6EDLdy-iiD85%B6mRum=s zFEUz?(Id}StiC$BpUJkt=F;UHZwbL-#%N)jP>OP z&T~vXgF0bv7}s!UkiU>>$yw^yL*&{Hh7fmv>pYs0xL2MBGY%QmoXr$7epk6YOf8hrJpljZ2tCX$Q zhA}yVRd9@`j#SDarCyeS3qXAK_htBUGxD+r7)<%PN0jU(g+gf9yd8+`=fBuIkX+>P zWR&#CqINPW6B!3m!Pd|D1oB#PW{Yo!A?H@_4{*sblBfJI z@Ym%>-Z;I@Av0pf!K+btk-)fsf&Yuzg>8o-3J97VI5CW;GTO|ku@4$^blk+q=qFui0I3kMu~T9rE|{R84<@-;DD@w zzJ^@)tr@nBa)wX@2M~fY2H38WSf>vI01x5Mi~EwECo~?1MN_gHL_IH|{!5WWE{hBD zh>df8a+2840@EzG-#Ry}hUZAEyd}nM8LU?`!U79VsdHhA#Y#!2(klI=&ff_FH~Q_YaUPh&*Si zP61PoCAg9LTRN10LY9MvqhTA(XoI*&u}WoHCrJ(?I@pu9Fad&Gx$Tt z$L%vi(?p+hbrPN_)HZ?|A)hmiG4W*(3M^(G!en>SvRlITZGzash*Ck#X~57{fRP|% zR#;{ZF4^-;R^e-zX9&28UZy;=#vZ?*(Lry03Y!hvb(UZXB2@f3NT1#r>rAm=6s%pJ z$<&t`y`s&IHT4f|SagN!?*OWjnY@a^leBS)V}abHg#x&^=m5qj$uFK(HQ1m%zqgWM z+Jrrh3x!oN=)VKEyDJ&=|EAqnqHicO(pa4)z?e@oNZ!PC^-mcnefl8J(+7)5F+}$x z?1eLtF9#jg{2B1cEg-@?k=Z2n$?)fmQMgfnQHZrUJgldkJJaf?r?w`oM%}(WZ{sO9QGR={X5S&sV`67vw z!z7)3-Vuo>*T!0Dv0msV0uM;B7Qp%2LZUcdMS>%{qK-QLN*A-ie>hq@Zx8cKt4eeU zp9%koQ%;8?A5Aht`!M@QG415>DGq`D4{hmJlT`T=8D<5`ydtKYo^;U%dhlGoo#L}? zkD{#Xwy9tAJJ+Xh#rsDhmS3vcP6ZC7(6_qm}G%AREQ}3cL~s~NoZ%^>et<5 zo!dx~sbmQY9?%4-Z<;o*b1Efg{xog?LsN*yS(N4VUIh6;JpWQk;o_2W?S6*qkR!0_ zhu7#?X!GWXRdD8V5JGA;YMy;#DgmbNU&!_$GQ&OHld7Q5s;#(WBaV~<81fIzNM6eY zYS>NniK$HZmkDBpI71(#bU%Z#PgmF~+{Hyg1o^T}^+mHcGTku-O7!&-zX%B~(%KvB z>{-fGn(QZvZ=f2zr0Vm$v(&4(v!7!lfk3O-o5z6we#IHlLF`zAZhyMFfR z|J0C^VR%vw(9A9z8zhLl3T9(MG#St>)MkQ&7#p;{REH3}eI;QfBwEkUd5NPy z?_JqDxYdvRccA66UFTf%U|_z_cA>X=0W%uNC_tdw4dhHec)rDa+-^P}sY8<$D~Tx0Ks7IE^A> zHk|Gr;p@M|q^QGUg}yjGgD;5sDzq|i#lo1yXhNc!??nA`qGd_VB>A^>aW7xIr3JX3 zDf~mz%xzsoTCjbxFKjG0ieE1EoqqKWBKg9ny5r|L48M!+=AmKst1HXYr;hRGbBTrR z!hc|0TOA=Tgd)b@09#14+F}9$9|P~Nar)jJR;3vsBg4G1Z!AqS)20wFpR;ZKC;1qT-E5wZ z#@IQfy@AuIRDMY>hevvNNYn6)Hp?^J0vqk=hxr6E-?qTuv&OWRVtC9CTV03Xr03DU zGuE0ve33=+SmllSKi@IhTa{n@H0M_YX>Vnnmn51_@?MOKMhp5?Sj=+1H@0-Tw|ykB z$gqQHDv)ka=WNfn-Qo4!3-s|giF(}k`1~#!?F1doQd)lCY8y>wE|*R#^qk3bOPl;tr(?v0YhHEo(s&BN>}C5F5yn>pP+Nb~DZ@ zI6-J@HFIDOouRjgHgTcj-Ou>OhfhZk6#a!Txut+~w@0tJzfa}Yr)l3BQNMWZ>_xRD zBxrC;0MI0-`b^0~{r@(Ww|$wpghOEmfc`Q{bOn0Fbl4s4Q%H$*-mY*Quz7LPYql}6 zH-D359)5{IUm@4>rF3^Kux${AsyV%NYy3+6{*a>hLHcR2p;q{Dg8x~k!^ngpVTU5* zk3?%e&KA0?z2)omOxcxS>UrsE);B}kR8rc>TBZ}q>+Nwg_Rc6n7RJ}NIBj#2ElK;S zUu*RvO8kZvho5^@H|$a8(k;1^fO+J7d(U=k53eo$1YEM};;Ly`%d!7NEqrC9LUi_e zKi1-`1G_2V*JfN_TZA`}kf(&wNAQDqn9FpkWGF zW2ez~;%u^(bjWtTw$obm=@mYR6~+LP(#75uAL>6$cKPfkxido zso3GE8-|^0^_hGT2oW1fMb&j(St=8gIH{B{P{L*gWzowsDm~^h8nk^1g#Pjf3i};4 zCsgJ;MLeLLhWeF~Y&VGae5#6u?KE_8Er*CL4AK0OQOVR@RYhds^ha{9Vk7}uzQ|~G zzopSp3W1@aFMex)J<&`^x7KdZF!x4r>#wrs>jid9cIb8r-#&kPTXh;Olr=lAQU8A* z7I)zspbur-#oy7PkELEbGV7dglyFZIO!{WDn}~mV-kn$U5dUmP&F3H5OP7&Gc0EA= zH39R3IEjX{jwcG}cV?=>_|Ygjwr8UBSe`bf;^oYt$SzKbc%_N+^xem0Oxs{#@ZNW& zI88*DiEy|^ph~`t+2QRy`iSmuAl7J}>g@P_^X&LX``EN5<9`3?GeH5%(;Y`}zYvS#G{-VQQ zQ*^R;f9J~7VWV9=5bWhVAIl#^uHEs!SbOWJIJ#zUv}YJ#7~CC(!QBZEWN>#+fS`c@ z!9ySr+}+(B0t88rAQ_wh!4n`PxCVC(xjg5b_nh~9-~I32wR%nO?yg-`d$&w?)vu~b ztXy4KP)ynabzX1XXx8}@47_oGfCSoXVokzXh?p+Jb>RzI+ezB5xZfjAC_kW#OGCXD z3h<~aW526*IC{9c&e_OjGnX%_WDiYZ@jBo(#TtJMQ+_cOoRR3Ek@->X$wO5Z^&QQa zQ68h%UF7}(x4_^|NQUwxbn$!2(#m4cbmK5r#jLnq@hNuN+JCJcPl$V&D5Tyjml5&F zwj`Bajub!6rmn?b=hN|Q29bEt(r{g#G295vFZ@ftIY=~_!B|1LL7Zk(ER`3_n`C(L zgeLjF7_AnO5$Lug#$8;&zbi(5@zrb9gaorH(6ZyrqEJ?s@Y_AKrS63b=F4}o1-Y%9dro%Y3lvPF? z^-WElxc-&%UC36(&3fH!an)wqmq(4^ktbHZc;FipAox@Mt@>`BEVWUr2d#^@v{N;4 z6!@j^oAu}Krb+H1&%VhW`CM$8b85DAUgNAAOFDmI0M;~+!z~Wem9lA4FIbwkDZEY( zF`FHkXhTMyKz;+FKkN-*r19V9}lFuw9x#7x@35+q* zos_Yhm~*x2TeCch3s04=AMp_W4!W=eU*U;-F{7=@>5@%j4RUp z$e~{1p&Jw!dY%N;^&`_kxHJwB@?cKHXrfP603in&h9UIj^bkE(Bd?XfB)+S z9N+g3g|a>Tn?K*cjv^tMuYiYm-(-6Gh>!93u&mgzlReHfW$A3}w)e^HIkFNPvWbj5 z5zW0|7nB=pJaJSXcscu|)C%X78ihB1@T(#AGM@!=gIYJVI^90s#|G3&QGBf$zP7;= zr($8teRyqZgnRq?FX@nuV9gAm1zTD>k%;3i@euxCt}PCFrKw|I8MyDy{DSO zLK2mPII8v>w8RmGny881@?v}sGM4KbPupZ(H?b@+si(7O{u;qU-D&BXeKCSwwCRD} z9XZUTCCMlr{*g%vedM&t@)IBM<5ilqUbQ1e+`9tKQMIAQUd8%0|5sd(6ai|@Mw7Z- z^p{WPQ8bP#lT_XXQ|>H%<*yk$V3HNz6y85@oJdA2g%csrXT-`+(j7@980^We&>0*G2OrGsEf0$Y2_j$R7sjQV!1{CFA%=Ng;DA5k?}0$%;OoNep_OT^n_hA zW&G~P#7k^W@yqcJ8aA=(`-J~oeJ(WjXg$1yN~3M1QMCN(KAC<1^UE%g+yfWH`Fp*s z=_iTtg8^}@SK~c}{)WrwtyL0#@;&aG8k)x351YyM#QU%=`F$UaMFmqDbQct6AyNkC~NL{}9ZeKfM#q$SrOb@%8KD{caY$j$fKS zj9Zgq?OmC@elPz5KWNW?x30@3)TVS{xCP6rRXB77WT&-vd+zEW#Ef3&-(!Ttx{;c+ zU-Vir;0xL~_EhC`ns|M9wX(jpgo{vG3t2a}dnTc/vVtm3wR+5vsn$}yqK^EERr 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 literal 0 HcmV?d00001 diff --git a/engines/misc/src/test/resources/quick.tiff b/engines/misc/src/test/resources/quick.tiff new file mode 100644 index 0000000000000000000000000000000000000000..e8069e0925ee016b0da0f30cb5de690e65aa75c6 GIT binary patch literal 20746 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 Date: Fri, 18 Nov 2022 18:34:36 +0100 Subject: [PATCH 2/6] ATS-995, MNT-23248: TIFF to PDF ImageMagick transform don't work - introducing new custom transformer-misc: ImageToPdf --- .../transform/misc/transformers/ImageToPdfTransformerTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engines/misc/src/test/java/org/alfresco/transform/misc/transformers/ImageToPdfTransformerTest.java b/engines/misc/src/test/java/org/alfresco/transform/misc/transformers/ImageToPdfTransformerTest.java index 714c79f5..ec74d46b 100644 --- a/engines/misc/src/test/java/org/alfresco/transform/misc/transformers/ImageToPdfTransformerTest.java +++ b/engines/misc/src/test/java/org/alfresco/transform/misc/transformers/ImageToPdfTransformerTest.java @@ -100,7 +100,7 @@ class ImageToPdfTransformerTest static Stream tiffTransformOptions() { return Stream.of( - TransformOptions.of(0, 0), + TransformOptions.of(0, 0), // (startPage, endPage) TransformOptions.of(0, 1), TransformOptions.of(1, 1), TransformOptions.of(null, 0), // expected 1 page in target file From ac0ccec99f7e8f0bccc503cafbdd22290e4dfbc4 Mon Sep 17 00:00:00 2001 From: Krystian Dabrowski Date: Mon, 21 Nov 2022 19:07:58 +0100 Subject: [PATCH 3/6] ATS-995, MNT-23248: TIFF to PDF ImageMagick transform don't work - fixing failing AIOTikaTest::optionListTest --- .../src/test/java/org/alfresco/transform/aio/AIOTikaTest.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/engines/aio/src/test/java/org/alfresco/transform/aio/AIOTikaTest.java b/engines/aio/src/test/java/org/alfresco/transform/aio/AIOTikaTest.java index e8960b64..e4582a45 100644 --- a/engines/aio/src/test/java/org/alfresco/transform/aio/AIOTikaTest.java +++ b/engines/aio/src/test/java/org/alfresco/transform/aio/AIOTikaTest.java @@ -63,13 +63,15 @@ public class AIOTikaTest extends TikaTest "notExtractBookmarksText", "page", "pageLimit", + "pdfFormat", "resizeHeight", "resizePercentage", "resizeWidth", "startPage", "targetEncoding", "thumbnail", - "width"), + "width" + ), getOptionNames(controller.transformConfig(0).getBody().getTransformOptions())); } } \ No newline at end of file From 154fd774384aa0f6f4e8068933a323b73b9ea482 Mon Sep 17 00:00:00 2001 From: Krystian Dabrowski Date: Tue, 22 Nov 2022 09:52:22 +0100 Subject: [PATCH 4/6] ATS-995, MNT-23248: TIFF to PDF ImageMagick transform don't work - replaced quick.tiff to 6 paged file --- .../ImageToPdfTransformerTest.java | 10 ++++++---- engines/misc/src/test/resources/quick.tiff | Bin 20746 -> 73904 bytes 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/engines/misc/src/test/java/org/alfresco/transform/misc/transformers/ImageToPdfTransformerTest.java b/engines/misc/src/test/java/org/alfresco/transform/misc/transformers/ImageToPdfTransformerTest.java index ec74d46b..c7b59b7d 100644 --- a/engines/misc/src/test/java/org/alfresco/transform/misc/transformers/ImageToPdfTransformerTest.java +++ b/engines/misc/src/test/java/org/alfresco/transform/misc/transformers/ImageToPdfTransformerTest.java @@ -34,7 +34,9 @@ import static org.alfresco.transform.common.Mimetype.MIMETYPE_PDF; import static org.alfresco.transform.common.RequestParamMap.END_PAGE; import static org.alfresco.transform.common.RequestParamMap.PDF_FORMAT; import static org.alfresco.transform.common.RequestParamMap.START_PAGE; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.BDDMockito.then; import java.io.File; @@ -105,9 +107,9 @@ class ImageToPdfTransformerTest TransformOptions.of(1, 1), TransformOptions.of(null, 0), // expected 1 page in target file TransformOptions.of(null, 1), // expected 2 pages in target file - TransformOptions.of(0, null), // expected all (2) pages in target file + TransformOptions.of(0, null), // expected all pages in target file TransformOptions.of(1, null), // expected 1 page in target file - TransformOptions.none() // expected all (2) pages in target file + TransformOptions.none() // expected all pages in target file ); } @@ -115,7 +117,7 @@ class ImageToPdfTransformerTest { return Stream.of( ArgumentsCartesianProduct.of(imageFiles(), defaultTransformOptions()), - ArgumentsCartesianProduct.of(ImageFile.of("quick.tiff", MIMETYPE_IMAGE_TIFF, 2), tiffTransformOptions()) + ArgumentsCartesianProduct.of(ImageFile.of("quick.tiff", MIMETYPE_IMAGE_TIFF, 6), tiffTransformOptions()) ).flatMap(Function.identity()); } diff --git a/engines/misc/src/test/resources/quick.tiff b/engines/misc/src/test/resources/quick.tiff index e8069e0925ee016b0da0f30cb5de690e65aa75c6..3061be2eb1992b37bc09ae664b761538c56867b7 100644 GIT binary patch literal 73904 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 literal 20746 zcmeHO30PCtwq7S81d&mh2R#N+ECdo}nGAyn3L54?poAnqAQMTL)f+$&We^7j6)V=U zbtovsnFbI=1;q)eVhcqrtrKm%lq$V_CxD9g`R=XvyZye`uSp15XYaMwT6^ua$A2d< z5Iz7{<|AFuw`@pBPo22hi$OoZax~Q}@<|AC-V;vNFY#ptow%RjKC|496+C}-W#HT` zi`l^^S&gwa)d7hi^Y?V~oNAUPg`7O2F~zNxo*e38u2;HfPcSF+6x(sfvIC(hVJ>^a z4=e8sdlYu+LB`n+>ms?~uI81UNe$7w;PstH?g>uB@FQIJc0b8H6DNo``JnNazscf- zk#2MJ)z_X&NDF&3Y-75ioh6EL+ZREu>R4KTvgTo?`_8UpNwoW%$~D_>q@+imO*|g^ zSr3;NU0QjYcf6OMx%}+IN1U^L!mJpNx%#CSjtG7+X-ab1adl9VLywDCcKG(=jNI6! z2frP>HDnhG%?1yF;?|e0}fAneEfmRw+#F)$R85P_nxBHI=q0KG(MJOnrhRE6x3{Z!R@kd_$+x!7BLqJ@;idr>VQrZ&r{4 zbwktL!@_Qr?+9+*sXPcFI&+Lvm8CM|d3Not!6p=x4QDd}SN#}^j+Fgz2J9a$0r6uk zdP$^@k*f8EMk%SJnssqDAPFPApiJ}XSY={91WT*F6@q3#vooM7p2>)K&i>~5<;L+R za)8iyH)n;(c^OFZ!>bppK=)ICt{rY(%8K%j8UbTMvmfX!qQ!tlE3iH_edq`NdZ-0B zvBLN+@&E!s!a-J_&S3Cj}rnxZ+90&&O}E*qhMASP^R3j@8(nil9IRs zKuwMLP5H)+{Y81-M(MOsvtyyp8M0^4*tLeY=Vm#Z0rJWHSRice)|cYC*6cOj`$Hrc z)yCD#Rqng4m0jadA01;PLw*EYJe1pf32DdEO{6kkFrNKO0w{T_+!Enx=bYngks%t( zZ&ydF8mQ)D)yTh{#tJqt>Y~Qf%=PV^r-t+GW(=|W4`uwAM=t`^yu8OSefG(tpxW)C znj~be>(d6<*q8uBkLv(^l{MBWC^58X=h{_j!PD8%s@j4)VG7#2jSjX8;|~L#CZ11O ztesy6Dzx%!cTWu)83byQyJA%`hP1rf<71zlDXh;pUF&N$!DDhw8V+#c#l z=)IdK3sD8ofsHpWm<}{$X{vzRq7s5%d6O0+{Y+l`CO~>-Ml-0NNs&eiBRfA%Aa%b3 z;c>HJ?Gb%%|5%8316*Wy@sT~nWy2|!$}cNbOG@(V)9P&2)PZ5^$Cd~htsPTG-ZXV@ z_mNv7x3!cPfVepjP;l}Y+!ljG-NzTL7Fz`Wb^{#}o_GL8q)ex(q-ZJ-TTbD)c8KC0#I2+0TH}KWndsc3L!%=2YZ; zhEbPv$*$ev1EtGSO}8O6o1PvWHLYY~PDEY6}S z<1G6Onc0`})6Uz+)Gk<_P{%w`dv9^I?5HqJV|rOV-GT}+bcYFz%u zdGd>Aaj89!@buIC@<(BOth!tpHMy4Yyuioz1c=xq2=*DTrZ?d*+Mrb z%_n?++^!3Y+4mN08<>sxti|%3Xj5^64wi{OJ@v}#2??-ccZ}BE6ux_(VbVP zigsBTeqNha;OtPUQglPNtbssKwN|-s+FskMdZiRDsf)5&KX2HheRnDg5Wi)0-a3+? zODk{*&g*pnW**f-N|QZyp`fCpF@;dz*{@X{YOV6y+6Da^4Yn+ur(3*mKzptXsk*{gMcZu4j#&aMYG1-gOqfN(fqG+Sz1I@d}XGkX(4el+{C8o1kSKA_P! zh9ThCZBt$_sfwOf|XQlSca>&?F8+P`%--8N;|H~B^pj^ zg*Gnxm~=`-yFM*cuhU*i{8H^IB`hsOhLqzDd=E1!iRJk9VOCWE=60TjVwTa~g(jWu zGN4(5a$dv!?SU+aX}W;oYA>f8^|zAYH)ph+*+-Wu531p%M8@;oB`sZia6HibRhfx} z7F{zRMY>s^%LWetfoRADW7*)AJpF~(h@~PM1a?il45rs4M#7Y$G=Gc0=GFtfKk4te zCIzCmaNC8gSA;ZO1Vs}47qwVCuF5~KuKQZUVb@@osq7yK27Os&Fs0ecF?^cO2#9fc zFK#I9Uc=A zCmjHfvX1(peV`Oor~&x+k|Q6{QhYV@j&8XV5YVhu+i<-7le(xmNp(3@g^T)EfQDl= zc&ZY2_l|fhtA&>fkoHrDD%wtGk*ARRQ8xn_bOoF^ns1jEpEYM{LHvmC^fipEMB}xL zkwUX|30eCrixWmR%_w3TJaj2BO>7xqZYvj(rZ>&{z6|u+3Jla$L_?5NHFUtfQMop) z3G~)n+mnY|+%7RAOK%#KniZOk>3>T#;tT2)rY&h_ld zBjQ#bI&CaPvf{Q$3D++w^^cT*u=JC!%cX>M`OO7LS5@;RVsi&K6irpjHc}a(nY8V5 zjQ;7NiuOk_Qesh%kMfHTNUJ0JXAaWeUHKrFwdB*N7OD{f~U5JZi>mu2_>Yf=3?SC&;?Y=isF&n;`@t9xL;a zS!8VnTLGaUNpMRLvr@(5I%;O0JzdMUz>Jn^8k#FMWP#t6P!`H1Sf&o5Dw(ClkUHbz1)*8AP*7|7r;!6NObVV2NYna!EKV0%l9wkwywR*E2Ga!4TZKSc$ z))2=eDx)Q!wEcMYt~yU;{FTu;EADPDk(8G73lj<>?_}5Bv}(HjRqG;3>vR-o#lksQ zFDR@E=JT&+549Ba+|VbEE>`{FNAbA>e1KKFB|kiL^7Vgez@+8jwyf5jG5eQ~w}cl5 zh2#Fv7rO#d%!59y2tOE>Qy-pkYx%*7jL!lu z?T>h*%RE$3c`Q8VT6Ahy>Q0Bk#_$*YF{u^eBNg4JBXY8rA8gD0tYY|!h?ht_SGNGY z^?gfZu66=9thm0?@j|erI`eVG=A)J2m!op2i8R8-W8oQBqh5L@^K^F~XcS$K&J9Z8 zg&q97vhl;{)L1UB;#gy4_uXh$2JgwO)5j}^zh3_0DxXhiJyE4M5R5UvcwvM8>n&m(5wcX3aAZl|RMhUd!RKd(TER{v7wRe?l zh5da8Z~1La_tco%6;D=t7m@z!8b(j)lY)dV^#ZrtiX4vJk#tAx@b=_8m4^>CM`xV< zoOic)zV+O<`28GGEtIT{f?HK(~=xGEn^_uyo){jfDX$!x@2_uj^X} zRXnJ)UQ+qcu;gyl!>A)Xn}=JQ(sx{%eoV1=uObeFk1gLe>Y+zmxl2GX&5nnP5%QinIy+zf|l!YpF{^w;t3g} zF->O5YsEkWz)>(-1Hkn$X4&|A%tnn_0NN;qGS39ip8;TG3SepifEoj67-Hpqd-n%v zupKuPUVUR$kH0Zpo<3d+aasU8zC;wf$P0~(ibgT~K?SD5bg%8jRLSNFAf= z*c(efhtV2Iz?yamE+ z5hp2Gg4$9j6x5R?NMNHO*VNT{ydB2H{S-9jUqr9tP1+kp%yd!4#1n$E1Ne8(Z)DUMU^k)m0w|5XNwY5nsKstn zXjZ&Qn?nWAvH@tSQJfAcP6rjIgNoBZ#p$2|8&cev{p;MBRqPKH`@=uq{_wwcWn2;d zitty2zv6IQaX79x99P^6Q~X};FZFvl#o|Y?`1$iKets`Dt`A2~bVPKgYJ9>lpygxPsdKd`!pChpvfMKM7{YH?M{QnJ=#hsC(vKkoLORFq6 zEvKObU};UE{}_#-iOVeB^v-eQc2PDDWpWu}F`CF`NYX_deiF(+6GVbcKAI@VLK%D( z%4OtaqbxxZfZKvBA%mI9mY@mjBo5!5^z8H(B$UH)Cq*~}QUZnE>|~B#j))zSvow^M zlggaWA}#Pxb<1+e;t6?d2?NdIart7GEO!z^4qv)pv^?2{gpRRDQr$`8aAjm59rYH7 z*rs4E)#ZJln8pd~->Eds=?u(@m=#wx~) zq`sxnUnpVPW6dS^{_B#M6PRNq#S)gyWR9^qjy3AI5Uij}Al9NRhJ@jRfzj?Htg-CK z6e^i&8%lL@v7?eH4lWeRn1vW~V4#aXUo2tpnQVU_cM_Ij&Ec?ID7Ma6n>*Q4oNOtM z&Qz*1#o5l=(bw70lVV48^0u2)+(*Dnm)GP~ahAL|R^WFQUxq>I96p2lABmAi3hFjq z4L^=pA`oSdC5?wq2s>^3Y5bAP8H*bf9cxq<22&na?j$iIgUuRmuvb}}cX{OZR0*?Y zTzFW>Fix5z2&AiCddt9im(Y%Aev;- zs|KH#E-;5LWoK~s=u!cfD-ga*{HqdUHJ&WcZStV%;ytd)TY$|;Oo=}~Q7|@iyv@T| z$YXH05dsl5Y4YWIt@&emX$)?n2n#iVd>$I_kmIIIn$ECFjHhAKBsM?Wyq=&Z8XW5^ zf8=XoAp9d$pr}I0d-+%4E`__^%LDJltcb2Zr@K_&?D*JxY^9fp?dQM*i3Yr}`63f+ zCyWCn6C437-(%i2!5IQ^Vkse~@z}y)>>FDqnBcO&>V4Ka&R+h3O6FtdOj Date: Tue, 22 Nov 2022 11:52:09 +0100 Subject: [PATCH 5/6] ATS-995, MNT-23248: TIFF to PDF ImageMagick transform don't work - fixing AIOTikaMetadataExtractsIT failing tests --- .../alfresco/transform/misc/MiscTransformsIT.java | 8 ++++---- .../transformers/ImageToPdfTransformerTest.java | 10 +++++----- .../src/test/resources/{quick.gif => sample.gif} | Bin .../src/test/resources/{quick.jpg => sample.jpg} | Bin .../src/test/resources/{quick.png => sample.png} | Bin .../src/test/resources/{quick.tiff => sample.tiff} | Bin 6 files changed, 9 insertions(+), 9 deletions(-) rename engines/misc/src/test/resources/{quick.gif => sample.gif} (100%) rename engines/misc/src/test/resources/{quick.jpg => sample.jpg} (100%) rename engines/misc/src/test/resources/{quick.png => sample.png} (100%) rename engines/misc/src/test/resources/{quick.tiff => sample.tiff} (100%) diff --git a/engines/misc/src/test/java/org/alfresco/transform/misc/MiscTransformsIT.java b/engines/misc/src/test/java/org/alfresco/transform/misc/MiscTransformsIT.java index 577779e5..d8625041 100644 --- a/engines/misc/src/test/java/org/alfresco/transform/misc/MiscTransformsIT.java +++ b/engines/misc/src/test/java/org/alfresco/transform/misc/MiscTransformsIT.java @@ -82,10 +82,10 @@ public class MiscTransformsIT private static final String ENGINE_URL = "http://localhost:8090"; private static final Map TEST_FILES = Stream.of( - testFile(MIMETYPE_IMAGE_GIF, "gif", "quick.gif"), - testFile(MIMETYPE_IMAGE_JPEG, "jpg", "quick.jpg"), - testFile(MIMETYPE_IMAGE_PNG, "png", "quick.png"), - testFile(MIMETYPE_IMAGE_TIFF, "tiff", "quick.tiff"), + testFile(MIMETYPE_IMAGE_GIF, "gif", "sample.gif"), + testFile(MIMETYPE_IMAGE_JPEG, "jpg", "sample.jpg"), + testFile(MIMETYPE_IMAGE_PNG, "png", "sample.png"), + testFile(MIMETYPE_IMAGE_TIFF, "tiff", "sample.tiff"), testFile(MIMETYPE_WORD, "doc", "quick.doc"), testFile(MIMETYPE_OPENXML_WORDPROCESSING, "docx", "quick.docx"), testFile(MIMETYPE_EXCEL, "xls", "quick.xls"), diff --git a/engines/misc/src/test/java/org/alfresco/transform/misc/transformers/ImageToPdfTransformerTest.java b/engines/misc/src/test/java/org/alfresco/transform/misc/transformers/ImageToPdfTransformerTest.java index c7b59b7d..cd519e49 100644 --- a/engines/misc/src/test/java/org/alfresco/transform/misc/transformers/ImageToPdfTransformerTest.java +++ b/engines/misc/src/test/java/org/alfresco/transform/misc/transformers/ImageToPdfTransformerTest.java @@ -63,7 +63,7 @@ import org.mockito.MockitoAnnotations; class ImageToPdfTransformerTest { - private static final File sourceFile = loadFile("quick.gif"); + private static final File sourceFile = loadFile("sample.gif"); @Mock private TransformManager transformManager; @@ -84,9 +84,9 @@ class ImageToPdfTransformerTest static Stream imageFiles() { return Stream.of( - ImageFile.of("quick.jpg", MIMETYPE_IMAGE_JPEG), - ImageFile.of("quick.gif", MIMETYPE_IMAGE_GIF), - ImageFile.of("quick.png", MIMETYPE_IMAGE_PNG) + ImageFile.of("sample.jpg", MIMETYPE_IMAGE_JPEG), + ImageFile.of("sample.gif", MIMETYPE_IMAGE_GIF), + ImageFile.of("sample.png", MIMETYPE_IMAGE_PNG) ); } @@ -117,7 +117,7 @@ class ImageToPdfTransformerTest { return Stream.of( ArgumentsCartesianProduct.of(imageFiles(), defaultTransformOptions()), - ArgumentsCartesianProduct.of(ImageFile.of("quick.tiff", MIMETYPE_IMAGE_TIFF, 6), tiffTransformOptions()) + ArgumentsCartesianProduct.of(ImageFile.of("sample.tiff", MIMETYPE_IMAGE_TIFF, 6), tiffTransformOptions()) ).flatMap(Function.identity()); } diff --git a/engines/misc/src/test/resources/quick.gif b/engines/misc/src/test/resources/sample.gif similarity index 100% rename from engines/misc/src/test/resources/quick.gif rename to engines/misc/src/test/resources/sample.gif diff --git a/engines/misc/src/test/resources/quick.jpg b/engines/misc/src/test/resources/sample.jpg similarity index 100% rename from engines/misc/src/test/resources/quick.jpg rename to engines/misc/src/test/resources/sample.jpg diff --git a/engines/misc/src/test/resources/quick.png b/engines/misc/src/test/resources/sample.png similarity index 100% rename from engines/misc/src/test/resources/quick.png rename to engines/misc/src/test/resources/sample.png diff --git a/engines/misc/src/test/resources/quick.tiff b/engines/misc/src/test/resources/sample.tiff similarity index 100% rename from engines/misc/src/test/resources/quick.tiff rename to engines/misc/src/test/resources/sample.tiff From c0ecf94b7be56ef4191d6e4192480250a36bb5e3 Mon Sep 17 00:00:00 2001 From: Krystian Dabrowski Date: Wed, 23 Nov 2022 12:55:34 +0100 Subject: [PATCH 6/6] ATS-995, MNT-23248: TIFF to PDF ImageMagick transform don't work - type and edge case fix --- .../transform/misc/transformers/ImageToPdfTransformer.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/engines/misc/src/main/java/org/alfresco/transform/misc/transformers/ImageToPdfTransformer.java b/engines/misc/src/main/java/org/alfresco/transform/misc/transformers/ImageToPdfTransformer.java index 0afc5f02..e8c611e4 100644 --- a/engines/misc/src/main/java/org/alfresco/transform/misc/transformers/ImageToPdfTransformer.java +++ b/engines/misc/src/main/java/org/alfresco/transform/misc/transformers/ImageToPdfTransformer.java @@ -136,9 +136,9 @@ public class ImageToPdfTransformer implements CustomTransformerFileAdaptor try (PDPageContentStream pdfPageContent = new PDPageContentStream(pdfDocument, pdfPage)) { final PDRectangle pageSize = pdfPage.getMediaBox(); - final float withRatio = pageSize.getWidth() / image.getWidth(); - final float heightRatio = pageSize.getHeight() / image.getHeight(); - final float ratio = Stream.of(withRatio, heightRatio, 1f).min(Comparator.naturalOrder()).get(); + final float widthRatio = image.getWidth() > 0 ? pageSize.getWidth() / image.getWidth() : 0; + final float heightRatio = image.getHeight() > 0 ? pageSize.getHeight() / image.getHeight() : 0; + final float ratio = Stream.of(widthRatio, heightRatio, 1f).min(Comparator.naturalOrder()).get(); // find image bottom final float y = pageSize.getHeight() - image.getHeight() * ratio; // drawing starts from bottom left corner