Skip to content

Commit 7958b64

Browse files
committed
Avoid unnecessary page labels creation. Another fix for PdfObject#release()
DEVSIX-480
1 parent ce23a8f commit 7958b64

File tree

6 files changed

+15
-13
lines changed

6 files changed

+15
-13
lines changed

kernel/src/main/java/com/itextpdf/kernel/pdf/PdfCatalog.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ protected PdfCatalog(PdfDictionary pdfObject) {
3535
}
3636
ensureObjectIsAddedToDocument(pdfObject);
3737
getPdfObject().put(PdfName.Type, PdfName.Catalog);
38+
setForbidRelease();
3839
pageTree = new PdfPagesTree(this);
3940
}
4041

@@ -231,8 +232,8 @@ public PdfNameTree getNameTree(PdfName treeType) {
231232
* This method returns the NumberTree of Page Labels
232233
* @return
233234
*/
234-
public PdfNumTree getPageLabelsTree(){
235-
if (pageLabels == null) {
235+
public PdfNumTree getPageLabelsTree(boolean createIfNotExists) {
236+
if (pageLabels == null && createIfNotExists) {
236237
pageLabels = new PdfNumTree(this, PdfName.PageLabels);
237238
}
238239

kernel/src/main/java/com/itextpdf/kernel/pdf/PdfDocument.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1102,11 +1102,14 @@ public void addFileAttachment(String description, PdfFileSpec fs) {
11021102
* @return
11031103
*/
11041104
public String[] getPageLabels() {
1105-
String[] labelStrings = new String[getNumberOfPages()];
1106-
Map<Integer, PdfObject> pageLabels = catalog.getPageLabelsTree().getNumbers();
1105+
if (catalog.getPageLabelsTree(false) == null) {
1106+
return null;
1107+
}
1108+
Map<Integer, PdfObject> pageLabels = catalog.getPageLabelsTree(false).getNumbers();
11071109
if (pageLabels.size() == 0) {
11081110
return null;
11091111
}
1112+
String[] labelStrings = new String[getNumberOfPages()];
11101113
int pageCount = 1;
11111114
String prefix = "";
11121115
String type = "D";

kernel/src/main/java/com/itextpdf/kernel/pdf/PdfPage.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -644,7 +644,7 @@ public PdfPage setPageLabel(PageLabelNumberingStyleConstants numberingStyle, Str
644644
if (firstPage != 1) {
645645
pageLabel.put(PdfName.St, new PdfNumber(firstPage));
646646
}
647-
getDocument().getCatalog().getPageLabelsTree().addEntry(getDocument().getPageNumber(this) - 1, pageLabel);
647+
getDocument().getCatalog().getPageLabelsTree(true).addEntry(getDocument().getPageNumber(this) - 1, pageLabel);
648648

649649
return this;
650650
}

kernel/src/main/java/com/itextpdf/kernel/pdf/PdfPages.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ public PdfPages(int from, PdfDocument pdfDocument) {
2727

2828
public PdfPages(int from, int maxCount, PdfDictionary pdfObject, PdfPages parent) {
2929
super(pdfObject);
30+
setForbidRelease();
3031
this.from = from;
3132
this.count = pdfObject.getAsNumber(PdfName.Count);
3233
this.parent = parent;

kernel/src/main/java/com/itextpdf/kernel/pdf/PdfXrefTable.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,6 @@ protected void writeXrefTableAndTrailer(PdfDocument document, PdfObject fileId,
255255
trailer.put(PdfName.Prev, lastXref);
256256
}
257257
writer.write(document.getTrailer());
258-
259258
}
260259

261260
writer.writeString("\nstartxref\n").

kernel/src/main/java/com/itextpdf/kernel/pdf/canvas/PdfCanvas.java

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,17 @@
11
package com.itextpdf.kernel.pdf.canvas;
22

3-
import com.itextpdf.kernel.PdfException;
4-
import com.itextpdf.io.util.Utilities;
53
import com.itextpdf.io.font.PdfEncodings;
64
import com.itextpdf.io.font.otf.Glyph;
75
import com.itextpdf.io.font.otf.GlyphLine;
8-
import com.itextpdf.kernel.geom.AffineTransform;
9-
import com.itextpdf.kernel.geom.Rectangle;
106
import com.itextpdf.io.image.Image;
117
import com.itextpdf.io.source.OutputStream;
12-
import com.itextpdf.kernel.pdf.canvas.wmf.WmfImageHelper;
8+
import com.itextpdf.io.util.Utilities;
9+
import com.itextpdf.kernel.PdfException;
1310
import com.itextpdf.kernel.color.Color;
1411
import com.itextpdf.kernel.color.PatternColor;
1512
import com.itextpdf.kernel.font.PdfFont;
13+
import com.itextpdf.kernel.geom.AffineTransform;
14+
import com.itextpdf.kernel.geom.Rectangle;
1615
import com.itextpdf.kernel.pdf.IsoKey;
1716
import com.itextpdf.kernel.pdf.PdfArray;
1817
import com.itextpdf.kernel.pdf.PdfDictionary;
@@ -25,6 +24,7 @@
2524
import com.itextpdf.kernel.pdf.PdfResources;
2625
import com.itextpdf.kernel.pdf.PdfStream;
2726
import com.itextpdf.kernel.pdf.PdfString;
27+
import com.itextpdf.kernel.pdf.canvas.wmf.WmfImageHelper;
2828
import com.itextpdf.kernel.pdf.colorspace.PdfColorSpace;
2929
import com.itextpdf.kernel.pdf.colorspace.PdfDeviceCs;
3030
import com.itextpdf.kernel.pdf.colorspace.PdfPattern;
@@ -45,8 +45,6 @@
4545
import java.util.Map;
4646
import java.util.Stack;
4747

48-
import static java.lang.Math.*;
49-
5048
/**
5149
* PdfCanvas class represents an algorithm for writing data into content stream.
5250
* To write into page content, create PdfCanvas from a page instance.

0 commit comments

Comments
 (0)