diff --git a/pom.xml b/pom.xml index a7d6b9d060a77c12d1c81c38ef77df0ef93a18f5..3c619a560ad4762f7d200ca70a9ce4c8134fa671 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ <artifactId>sambox</artifactId> <packaging>jar</packaging> <name>sambox</name> - <version>2.3.1</version> + <version>2.3.4</version> <description>An Apache PDFBox fork intended to be used as PDF processor for Sejda and PDFsam related projects</description> <url>http://www.sejda.org</url> @@ -33,7 +33,7 @@ <connection>scm:git:git@github.com:torakiki/sambox.git</connection> <developerConnection>scm:git:git@github.com:torakiki/sambox.git</developerConnection> <url>scm:git:git@github.com:torakiki/sambox.git</url> - <tag>v2.3.1</tag> + <tag>v2.3.4</tag> </scm> <developers> diff --git a/src/main/java/org/sejda/sambox/pdmodel/PDPageTree.java b/src/main/java/org/sejda/sambox/pdmodel/PDPageTree.java index 973db7e679cefc241d2972dffd77341eef66ed9f..93f0ad38ad57765a141830577888a50f725a6686 100644 --- a/src/main/java/org/sejda/sambox/pdmodel/PDPageTree.java +++ b/src/main/java/org/sejda/sambox/pdmodel/PDPageTree.java @@ -470,7 +470,7 @@ public class PDPageTree implements COSObjectable, Iterable<PDPage> public void remove(int index) { PageAndPageTreeParent res = get(index + 1, root, 0, null); - remove(res.node); + remove(res.node, res.parent); } /** @@ -487,14 +487,32 @@ public class PDPageTree implements COSObjectable, Iterable<PDPage> * Removes the given COS page. */ private void remove(COSDictionary node) + { + remove(node, null); + } + + /** + * Removes the given COS page. + */ + private void remove(COSDictionary node, COSDictionary knownParent) { // remove from parent's kids COSDictionary parent = node.getDictionaryObject(COSName.PARENT, COSName.P, COSDictionary.class); + + if(parent == null) + { + // broken node with missing PARENT, use the one known from traversing the page tree + parent = knownParent; + } + COSArray kids = parent.getDictionaryObject(COSName.KIDS, COSArray.class); if (kids.removeObject(node)) { // update ancestor counts + parent.setInt(COSName.COUNT, parent.getInt(COSName.COUNT) - 1); + node = parent; + do { node = node.getDictionaryObject(COSName.PARENT, COSName.P, COSDictionary.class); diff --git a/src/main/java/org/sejda/sambox/pdmodel/common/PDNameTreeNode.java b/src/main/java/org/sejda/sambox/pdmodel/common/PDNameTreeNode.java index b98ba977ce091e05a049f05dcf074890b1931909..ac1f04856618dc840873d838e9947eef03f66abc 100644 --- a/src/main/java/org/sejda/sambox/pdmodel/common/PDNameTreeNode.java +++ b/src/main/java/org/sejda/sambox/pdmodel/common/PDNameTreeNode.java @@ -246,7 +246,7 @@ public abstract class PDNameTreeNode<T extends COSObjectable> implements COSObje return names.get(name); } } - catch (IOException e) + catch (IOException | ClassCastException e) { LOG.warn("NameTreeNode couldn't get the names map", e); } diff --git a/src/main/java/org/sejda/sambox/pdmodel/graphics/shading/AxialShadingContext.java b/src/main/java/org/sejda/sambox/pdmodel/graphics/shading/AxialShadingContext.java index e0e3b60cc1826d3f5f8c808a59b107a32b8d80a1..e71098a3479dc1e0174b5b74695579fbd24a6176 100644 --- a/src/main/java/org/sejda/sambox/pdmodel/graphics/shading/AxialShadingContext.java +++ b/src/main/java/org/sejda/sambox/pdmodel/graphics/shading/AxialShadingContext.java @@ -115,6 +115,7 @@ public class AxialShadingContext extends ShadingContext implements PaintContext { LOG.error(ex.getMessage() + ", matrix: " + matrix, ex); LOG.error(ex.getMessage(), ex); + rat = new AffineTransform(); } // shading space -> device space diff --git a/src/main/java/org/sejda/sambox/pdmodel/interactive/form/PDButton.java b/src/main/java/org/sejda/sambox/pdmodel/interactive/form/PDButton.java index 5d0211dd94db9c91e6c72bd3d15f050d9816c064..085a370a1cb380a2a2ee2fd97c22f549d18bd218 100644 --- a/src/main/java/org/sejda/sambox/pdmodel/interactive/form/PDButton.java +++ b/src/main/java/org/sejda/sambox/pdmodel/interactive/form/PDButton.java @@ -441,12 +441,6 @@ public abstract class PDButton extends PDTerminalField List<String> options = getExportValues(); Set<String> uniqueOptions = new HashSet<>(options); - if (widgets.size() != options.size() && uniqueOptions.size() > 1) - { - throw new IllegalArgumentException( - "The number of options doesn't match the number of widgets"); - } - if (value.equals(COSName.Off.getName())) { updateByValue(value); @@ -465,8 +459,16 @@ public abstract class PDButton extends PDTerminalField if (onValue != null) { updateByValue(onValue); + return; } } + + // we reach here if update failed + if (widgets.size() != options.size() && uniqueOptions.size() > 1) + { + throw new IllegalArgumentException( + "The number of options doesn't match the number of widgets"); + } } } }