[Git][java-team/libsejda-java][upstream] New upstream version 4.2.9

Markus Koschany (@apo) gitlab at salsa.debian.org
Sat Nov 20 21:56:01 GMT 2021



Markus Koschany pushed to branch upstream at Debian Java Maintainers / libsejda-java


Commits:
82934d0d by Markus Koschany at 2021-11-20T22:49:38+01:00
New upstream version 4.2.9
- - - - -


17 changed files:

- pom.xml
- sejda-conversion/pom.xml
- sejda-core/pom.xml
- sejda-core/src/test/java/org/sejda/core/service/AlternateMixTaskTest.java
- sejda-distribution/pom.xml
- sejda-docs/pom.xml
- sejda-fonts/pom.xml
- sejda-image-writers/pom.xml
- sejda-model/pom.xml
- sejda-model/src/main/java/org/sejda/common/RomanNumbersUtils.java
- sejda-model/src/main/java/org/sejda/model/input/PdfMixInput.java
- sejda-model/src/test/java/org/sejda/common/RomanNumbersUtilsTest.java
- sejda-sambox/pom.xml
- sejda-sambox/src/main/java/org/sejda/impl/sambox/component/PageImageWriter.java
- sejda-sambox/src/main/java/org/sejda/impl/sambox/component/PdfAlternateMixer.java
- sejda-sambox/src/main/java/org/sejda/impl/sambox/component/PdfMixFragment.java
- sejda-sambox/src/test/java/org/sejda/impl/sambox/component/PageImageWriterTest.java


Changes:

=====================================
pom.xml
=====================================
@@ -6,7 +6,7 @@
 	<artifactId>sejda-parent</artifactId>
 	<packaging>pom</packaging>
 	<name>sejda</name>
-	<version>4.2.6</version>
+	<version>4.2.9</version>
 	<description>An extendible and configurable PDF manipulation layer library. A ready to use java library to perform PDF documents manipulation without having to deal with the low level API. Sejda offers many "ready to go" manipulations implemented using the SAMBox but it can be extended to use other implementations.</description>
 
 	<organization>
@@ -32,7 +32,7 @@
 		<connection>scm:git:git at github.com:torakiki/sejda.git</connection>
 		<developerConnection>scm:git:git at github.com:torakiki/sejda.git</developerConnection>
 		<url>scm:git:git at github.com:torakiki/sejda.git</url>
-		<tag>v4.2.6</tag>
+		<tag>v4.2.9</tag>
 	</scm>
 
 	<developers>
@@ -352,9 +352,9 @@
 	</distributionManagement>
 
 	<properties>
-		<sejda.commons.version>1.1.4</sejda.commons.version>
+		<sejda.commons.version>1.1.7</sejda.commons.version>
 		<junit.version>4.13.1</junit.version>
-		<slf4j.version>1.7.29</slf4j.version>
+		<slf4j.version>1.7.30</slf4j.version>
 		<commons.lang.version>3.9</commons.lang.version>
 		<commons.io.version>2.7</commons.io.version>
 		<validation.api.version>1.0.0.GA</validation.api.version>
@@ -363,9 +363,9 @@
 		<jdepend.version>2.9.1</jdepend.version>
 		<hibernate-validator.version>4.2.0.Final</hibernate-validator.version>
 		<hamcrest.version>1.3</hamcrest.version>
-		<sambox.version>2.2.15</sambox.version>
+		<sambox.version>2.3.1</sambox.version>
 		<sejda.io.version>2.1.3</sejda.io.version>
-		<bouncycastle.version>1.66</bouncycastle.version>
+		<bouncycastle.version>1.69</bouncycastle.version>
 		<twelvemonkeys.version>3.4.2</twelvemonkeys.version>
 		<metadata-extractor.version>2.15.0</metadata-extractor.version>
 		<thumbnailator.version>0.4.13</thumbnailator.version>


=====================================
sejda-conversion/pom.xml
=====================================
@@ -10,7 +10,7 @@
 	<parent>
 		<groupId>org.sejda</groupId>
 		<artifactId>sejda-parent</artifactId>
-		<version>4.2.6</version>
+		<version>4.2.9</version>
 		<relativePath>../pom.xml</relativePath>
 	</parent>
 	


=====================================
sejda-core/pom.xml
=====================================
@@ -5,7 +5,7 @@
 	<parent>
 		<groupId>org.sejda</groupId>
 		<artifactId>sejda-parent</artifactId>
-		<version>4.2.6</version>
+		<version>4.2.9</version>
 		<relativePath>../pom.xml</relativePath>
 	</parent>
 


=====================================
sejda-core/src/test/java/org/sejda/core/service/AlternateMixTaskTest.java
=====================================
@@ -124,5 +124,31 @@ public abstract class AlternateMixTaskTest extends BaseTaskTest<AlternateMixMult
         testContext.assertPages(8);
     }
 
+    @Test
+    public void repeatForeverExplicitlyMarkedInputs() throws IOException {
+        AlternateMixMultipleInputParameters params = new AlternateMixMultipleInputParameters();
+        params.addInput(new PdfMixInput(shortInput()));
+        params.addInput(new PdfMixInput(customInput("pdf/one_page.pdf")));
+        
+        for(PdfMixInput input :params.getInputList()) {
+            input.setRepeatForever(true);
+        }
+        
+        setUpParameters(params);
+        testContext.pdfOutputTo(params);
+        execute(params);
+        testContext.assertTaskCompleted();
+        testContext.assertPages(8).forPdfOutput(d -> {
+            assertHeaderContains(d.getPage(0), "Pagina 1 di 4");
+            assertPageTextContains(d.getPage(1), "First page");
+            assertHeaderContains(d.getPage(2), "Pagina 2 di 4");
+            assertPageTextContains(d.getPage(3), "First page");
+            assertHeaderContains(d.getPage(4), "Pagina 3 di 4");
+            assertPageTextContains(d.getPage(5), "First page");
+            assertHeaderContains(d.getPage(6), "Pagina 4 di 4");
+            assertPageTextContains(d.getPage(7), "First page");
+        });
+    }
+
     protected abstract void assertHeaderContains(PDPage page, String expectedText);
 }


=====================================
sejda-distribution/pom.xml
=====================================
@@ -10,7 +10,7 @@
 	<parent>
 		<groupId>org.sejda</groupId>
 		<artifactId>sejda-parent</artifactId>
-		<version>4.2.6</version>
+		<version>4.2.9</version>
 		<relativePath>../pom.xml</relativePath>
 	</parent>
 


=====================================
sejda-docs/pom.xml
=====================================
@@ -5,7 +5,7 @@
 	<parent>
 		<groupId>org.sejda</groupId>
 		<artifactId>sejda-parent</artifactId>
-		<version>4.2.6</version>
+		<version>4.2.9</version>
 		<relativePath>../pom.xml</relativePath>
 	</parent>
 


=====================================
sejda-fonts/pom.xml
=====================================
@@ -10,7 +10,7 @@
 	<parent>
 		<groupId>org.sejda</groupId>
 		<artifactId>sejda-parent</artifactId>
-		<version>4.2.6</version>
+		<version>4.2.9</version>
 		<relativePath>../pom.xml</relativePath>
 	</parent>
 	


=====================================
sejda-image-writers/pom.xml
=====================================
@@ -6,7 +6,7 @@
 	<parent>
 		<groupId>org.sejda</groupId>
 		<artifactId>sejda-parent</artifactId>
-		<version>4.2.6</version>
+		<version>4.2.9</version>
 		<relativePath>../pom.xml</relativePath>
 	</parent>
 


=====================================
sejda-model/pom.xml
=====================================
@@ -6,7 +6,7 @@
 	<parent>
 		<groupId>org.sejda</groupId>
 		<artifactId>sejda-parent</artifactId>
-		<version>4.2.6</version>
+		<version>4.2.9</version>
 		<relativePath>../pom.xml</relativePath>
 	</parent>
 


=====================================
sejda-model/src/main/java/org/sejda/common/RomanNumbersUtils.java
=====================================
@@ -37,9 +37,13 @@ public final class RomanNumbersUtils {
      */
     public static String toRoman(long toConvert) {
 
-        if (toConvert <= 0) {
+        if (toConvert < 0) {
             throw new IllegalArgumentException();
         }
+        
+        if (toConvert == 0) {
+            return "nulla";
+        }
 
         long n = toConvert;
         StringBuilder buf = new StringBuilder();


=====================================
sejda-model/src/main/java/org/sejda/model/input/PdfMixInput.java
=====================================
@@ -39,6 +39,7 @@ public class PdfMixInput extends PdfMergeInput {
     private boolean reverse = false;
     @Min(value = 1)
     private int step = 1;
+    private boolean repeatForever = false;
 
     public PdfMixInput(PdfSource<?> source, boolean reverse, int step) {
         super(source);
@@ -63,6 +64,14 @@ public class PdfMixInput extends PdfMergeInput {
         return step;
     }
 
+    public boolean isRepeatForever() {
+        return repeatForever;
+    }
+
+    public void setRepeatForever(boolean repeatForever) {
+        this.repeatForever = repeatForever;
+    }
+
     @Override
     public String toString() {
         return new ToStringBuilder(this).appendSuper(super.toString()).append(reverse).append(step).toString();
@@ -70,7 +79,8 @@ public class PdfMixInput extends PdfMergeInput {
 
     @Override
     public int hashCode() {
-        return new HashCodeBuilder().appendSuper(super.hashCode()).append(reverse).append(step).toHashCode();
+        return new HashCodeBuilder().appendSuper(super.hashCode()).append(reverse).append(step).append(repeatForever)
+                .toHashCode();
     }
 
     @Override
@@ -83,7 +93,7 @@ public class PdfMixInput extends PdfMergeInput {
         }
         PdfMixInput input = (PdfMixInput) other;
         return new EqualsBuilder().appendSuper(super.equals(other)).append(reverse, input.reverse)
-                .append(step, input.step).isEquals();
+                .append(step, input.step).append(repeatForever, input.repeatForever).isEquals();
     }
 
 }


=====================================
sejda-model/src/test/java/org/sejda/common/RomanNumbersUtilsTest.java
=====================================
@@ -42,9 +42,8 @@ public class RomanNumbersUtilsTest {
         RomanNumbersUtils.toRoman(-1);
     }
 
-    @Test(expected = IllegalArgumentException.class)
     public void testFailingZero() {
-        RomanNumbersUtils.toRoman(0);
+        assertEquals("nulla", RomanNumbersUtils.toRoman(0));
     }
 
 }


=====================================
sejda-sambox/pom.xml
=====================================
@@ -6,7 +6,7 @@
 	<parent>
 		<groupId>org.sejda</groupId>
 		<artifactId>sejda-parent</artifactId>
-		<version>4.2.6</version>
+		<version>4.2.9</version>
 		<relativePath>../pom.xml</relativePath>
 	</parent>
 


=====================================
sejda-sambox/src/main/java/org/sejda/impl/sambox/component/PageImageWriter.java
=====================================
@@ -200,9 +200,9 @@ public class PageImageWriter {
             throws IOException, TaskIOException {
         int degrees = ExifHelper.getRotationBasedOnExifOrientation(source.asNewInputStream());
 
-        BufferedImage image = ImageIO.read(source.asNewInputStream());
         if (degrees > 0) {
-            BufferedImage result = Thumbnails.of(image).scale(1).rotate(degrees).asBufferedImage();
+            BufferedImage result = Thumbnails.of(ImageIO.read(source.asNewInputStream())).scale(1).rotate(degrees)
+                    .asBufferedImage();
 
             File tmpFile = IOUtils.createTemporaryBuffer();
             ImageIO.write(result, getImageIOSaveFormat(source), tmpFile);


=====================================
sejda-sambox/src/main/java/org/sejda/impl/sambox/component/PdfAlternateMixer.java
=====================================
@@ -38,8 +38,8 @@ import org.sejda.sambox.pdmodel.PDPage;
  */
 public class PdfAlternateMixer extends PDDocumentHandler {
 
+
     private List<PdfMixFragment> mixFragments = new ArrayList<>();
-    private int currentStep = 0;
 
     /**
      * Perform the alternate mix on the given {@link PdfMixInput}s.
@@ -52,18 +52,32 @@ public class PdfAlternateMixer extends PDDocumentHandler {
         for (PdfMixInput input : inputs) {
             mixFragments.add(PdfMixFragment.newInstance(input));
         }
-        int totalSteps = mixFragments.stream().map(PdfMixFragment::getNumberOfPages).reduce(0,
-                (curr, value) -> curr + value);
+        
+        int maxNumberOfPages = 0;
+        for(PdfMixFragment fragment: mixFragments) {
+            maxNumberOfPages = Math.max(fragment.getNumberOfPages(), maxNumberOfPages);
+        }
+        
+        int currentStep = 0;
+        int maxSteps = mixFragments.size() * maxNumberOfPages + 1;
+
+        // to properly calculate the expected total number of steps we'd have to look at page numbers, steps, reverse
+        notifyEvent(executionContext.notifiableTaskMetadata()).progressUndetermined();
 
-        while (mixFragments.stream().anyMatch(PdfMixFragment::hasNextPage)) {
+        while (mixFragments.stream().anyMatch(PdfMixFragment::hasNotReachedTheEnd)) {
             mixFragments.stream().filter(PdfMixFragment::hasNextPage).forEach(f -> {
                 for (int i = 0; i < f.getStep() && f.hasNextPage(); i++) {
                     PDPage current = f.nextPage();
                     f.addLookupEntry(current, importPage(current));
-                    notifyEvent(executionContext.notifiableTaskMetadata()).stepsCompleted(++currentStep)
-                            .outOf(totalSteps);
                 }
             });
+            
+            currentStep++;
+            
+            // a safety net so we don't loop here forever due to a bug and fill up the disk
+            if(currentStep > maxSteps) {
+                throw new RuntimeException("Too many loops, currentStep: " + currentStep + ", maxSteps: " + maxSteps);
+            }
         }
 
         mixFragments.stream().forEach(PdfMixFragment::saintizeAnnotations);
@@ -74,7 +88,6 @@ public class PdfAlternateMixer extends PDDocumentHandler {
         super.close();
         mixFragments.stream().forEach(IOUtils::closeQuietly);
         mixFragments.clear();
-        currentStep = 0;
     }
 
 }


=====================================
sejda-sambox/src/main/java/org/sejda/impl/sambox/component/PdfMixFragment.java
=====================================
@@ -41,29 +41,53 @@ import org.slf4j.LoggerFactory;
  */
 class PdfMixFragment implements Closeable {
 
-    private static final Logger LOG = LoggerFactory.getLogger(PdfAlternateMixer.class);
+    private static final Logger LOG = LoggerFactory.getLogger(PdfMixFragment.class);
 
     private LookupTable<PDPage> lookups = new LookupTable<>();
     private PDDocumentHandler handler;
     private PdfMixInput input;
     private LinkedList<Integer> pages;
+    private boolean hasNotReachedTheEnd = true;
 
     private PdfMixFragment(PdfMixInput input, PDDocumentHandler handler) {
-        this.pages = new LinkedList<>(input.getPages(handler.getNumberOfPages()));
         this.handler = handler;
         this.input = input;
+        populatePages();
+    }
+    
+    private void populatePages() {
+        this.pages = new LinkedList<>(input.getPages(handler.getNumberOfPages()));
+    }
+
+    private void populatePagesIfRequired() {
+        if(pages.isEmpty()) {
+            this.hasNotReachedTheEnd = false;
+            if(input.isRepeatForever()) {
+                populatePages();    
+            }
+        }
     }
 
     public PDPage nextPage() {
+        PDPage result;
+        
         if (input.isReverse()) {
-            return handler.getPage(pages.removeLast());
+            result = handler.getPage(pages.removeLast());
+        } else {
+            result = handler.getPage(pages.removeFirst());
         }
-        return handler.getPage(pages.removeFirst());
+        
+        populatePagesIfRequired();
+        return result;
     }
 
     public boolean hasNextPage() {
         return !pages.isEmpty();
     }
+    
+    public boolean hasNotReachedTheEnd() {
+        return this.hasNotReachedTheEnd;
+    }
 
     public int getNumberOfPages() {
         return handler.getNumberOfPages();


=====================================
sejda-sambox/src/test/java/org/sejda/impl/sambox/component/PageImageWriterTest.java
=====================================
@@ -118,7 +118,7 @@ public class PageImageWriterTest {
     }
 
     @Test
-    public void testExifRotated() throws TaskIOException, IOException {
+    public void testExifRotated() throws TaskIOException {
 
         PDImageXObject result = PageImageWriter.toPDXImageObject(customNonPdfInput("image/with_exif_orientation.JPG"));
         assertThat(result.getHeight(), is(3264));



View it on GitLab: https://salsa.debian.org/java-team/libsejda-java/-/commit/82934d0d2d44b57deb38602c5f5af942a94a4a84

-- 
View it on GitLab: https://salsa.debian.org/java-team/libsejda-java/-/commit/82934d0d2d44b57deb38602c5f5af942a94a4a84
You're receiving this email because of your account on salsa.debian.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/pkg-java-commits/attachments/20211120/60961335/attachment.htm>


More information about the pkg-java-commits mailing list