diff --git a/pdfbox/src/main/java/org/apache/pdfbox/cos/COSArray.java b/pdfbox/src/main/java/org/apache/pdfbox/cos/COSArray.java index d6e7db23dd3..e16874d3971 100644 --- a/pdfbox/src/main/java/org/apache/pdfbox/cos/COSArray.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/cos/COSArray.java @@ -53,6 +53,14 @@ public COSArray() this(new ArrayList<>(), true); } + /** + * Constructor. + */ + public COSArray(int initialCapacity) + { + this(new ArrayList<>(initialCapacity), true); + } + /** * Use the given list to initialize the COSArray. * @@ -725,7 +733,7 @@ public List toCOSNumberIntegerList() */ public static COSArray ofCOSIntegers(List integer) { - COSArray retval = new COSArray(); + COSArray retval = new COSArray(integer.size()); integer.forEach(s -> retval.add(COSInteger.get(s.longValue()))); return retval; } @@ -739,7 +747,7 @@ public static COSArray ofCOSIntegers(List integer) */ public static COSArray ofCOSNames(List strings) { - COSArray retval = new COSArray(); + COSArray retval = new COSArray(strings.size()); strings.forEach(s -> retval.add(COSName.getPDFName(s))); return retval; } @@ -753,7 +761,7 @@ public static COSArray ofCOSNames(List strings) */ public static COSArray ofCOSStrings(List strings) { - COSArray retval = new COSArray(); + COSArray retval = new COSArray(strings.size()); strings.forEach(s -> retval.add(new COSString(s))); return retval; } diff --git a/pdfbox/src/main/java/org/apache/pdfbox/multipdf/PDFCloneUtility.java b/pdfbox/src/main/java/org/apache/pdfbox/multipdf/PDFCloneUtility.java index 9a822017642..39878cfb792 100644 --- a/pdfbox/src/main/java/org/apache/pdfbox/multipdf/PDFCloneUtility.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/multipdf/PDFCloneUtility.java @@ -126,7 +126,7 @@ private COSBase cloneCOSBaseForNewDocument(COSBase base) throws IOException private COSArray cloneCOSArray(COSArray array) throws IOException { - COSArray newArray = new COSArray(); + COSArray newArray = new COSArray(array.size()); for (int i = 0; i < array.size(); i++) { COSBase value = array.get(i); diff --git a/pdfbox/src/main/java/org/apache/pdfbox/multipdf/Splitter.java b/pdfbox/src/main/java/org/apache/pdfbox/multipdf/Splitter.java index d8eaa936a77..a8d604e1e2f 100644 --- a/pdfbox/src/main/java/org/apache/pdfbox/multipdf/Splitter.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/multipdf/Splitter.java @@ -313,7 +313,7 @@ private void cloneTreeElement( { // create a clone of the array COSArray srcArray = (COSArray) actualSrcObj; - COSArray dstArray = new COSArray(); + COSArray dstArray = new COSArray(srcArray.size()); for (int i = 0; i < srcArray.size(); ++i) { COSBase srcElement = srcArray.getObject(i); diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFXRefStream.java b/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFXRefStream.java index ffd36c078d7..5011bb3bd9f 100644 --- a/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFXRefStream.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFXRefStream.java @@ -74,7 +74,7 @@ public COSStream getStream() throws IOException stream.setLong(COSName.SIZE, size); List indexEntry = getIndexEntry(); - COSArray indexAsArray = new COSArray(); + COSArray indexAsArray = new COSArray(indexEntry.size()); for ( Long i : indexEntry ) { indexAsArray.add(COSInteger.get(i)); @@ -82,7 +82,7 @@ public COSStream getStream() throws IOException stream.setItem(COSName.INDEX, indexAsArray); int[] wEntry = getWEntry(); - COSArray wAsArray = new COSArray(); + COSArray wAsArray = new COSArray(wEntry.length); for (int j : wEntry) { wAsArray.add(COSInteger.get(j)); diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPageTree.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPageTree.java index 81404e904d2..02649d27dee 100644 --- a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPageTree.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDPageTree.java @@ -86,7 +86,7 @@ public PDPageTree(COSDictionary root) // repair bad PDFs which contain a Page dict instead of a page tree, see PDFBOX-3154 if (COSName.PAGE.equals(root.getCOSName(COSName.TYPE))) { - COSArray kids = new COSArray(); + COSArray kids = new COSArray(1); kids.add(root); this.root = new COSDictionary(); this.root.setItem(COSName.KIDS, kids); diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/taggedpdf/PDStandardAttributeObject.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/taggedpdf/PDStandardAttributeObject.java index ae0abf08e14..bb3fc4e7b08 100644 --- a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/taggedpdf/PDStandardAttributeObject.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/taggedpdf/PDStandardAttributeObject.java @@ -125,7 +125,7 @@ protected String[] getArrayOfString(String name) protected void setArrayOfString(String name, String[] values) { COSBase oldBase = this.getCOSObject().getDictionaryObject(name); - COSArray array = new COSArray(); + COSArray array = new COSArray(values.length); for (String value : values) { array.add(new COSString(value)); @@ -212,7 +212,7 @@ protected void setName(String name, String value) protected void setArrayOfName(String name, String[] values) { COSBase oldBase = this.getCOSObject().getDictionaryObject(name); - COSArray array = new COSArray(); + COSArray array = new COSArray(values.length); for (String value : values) { array.add(COSName.getPDFName(value)); @@ -363,7 +363,7 @@ protected void setNumber(String name, int value) */ protected void setArrayOfNumber(String name, float[] values) { - COSArray array = new COSArray(); + COSArray array = new COSArray(values.length); for (float value : values) { array.add(new COSFloat(value)); diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFAnnotation.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFAnnotation.java index 85a34298992..2e0b7797a56 100644 --- a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFAnnotation.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFAnnotation.java @@ -294,7 +294,7 @@ protected FDFAnnotation(Element element) throws IOException if (dashes != null && !dashes.isEmpty()) { String[] dashesValues = dashes.split(","); - COSArray dashPattern = new COSArray(); + COSArray dashPattern = new COSArray(dashesValues.length); for (String dashesValue : dashesValues) { dashPattern.add(COSNumber.get(dashesValue)); diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFAnnotationPolyline.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFAnnotationPolyline.java index 75bd91c4cc5..dcc1fbf7558 100644 --- a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFAnnotationPolyline.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/fdf/FDFAnnotationPolyline.java @@ -153,7 +153,7 @@ public void setStartPointEndingStyle(String style) COSArray array = annot.getCOSArray(COSName.LE); if (array == null) { - array = new COSArray(); + array = new COSArray(2); array.add(COSName.getPDFName(actualStyle)); array.add(COSName.getPDFName(PDAnnotationLine.LE_NONE)); annot.setItem(COSName.LE, array); @@ -186,7 +186,7 @@ public void setEndPointEndingStyle(String style) COSArray array = annot.getCOSArray(COSName.LE); if (array == null) { - array = new COSArray(); + array = new COSArray(2); array.add(COSName.getPDFName(PDAnnotationLine.LE_NONE)); array.add(COSName.getPDFName(actualStyle)); annot.setItem(COSName.LE, array);