Skip to content

Commit 31e6078

Browse files
author
Benoit Lagae
committed
Force first revision xref to not have subsections
DEVSIX-1428
1 parent a965dee commit 31e6078

File tree

2 files changed

+10
-18
lines changed

2 files changed

+10
-18
lines changed

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

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -800,12 +800,14 @@ public void close() {
800800
flushFonts();
801801
writer.flushWaitingObjects();
802802
// flush unused objects
803-
if (isFlushUnusedObjects()) {
804-
for (int i = 0; i < xref.size(); i++) {
805-
PdfIndirectReference indirectReference = xref.get(i);
806-
if (!indirectReference.isFree() && !indirectReference.checkState(PdfObject.FLUSHED)) {
803+
for (int i = 0; i < xref.size(); i++) {
804+
PdfIndirectReference indirectReference = xref.get(i);
805+
if (indirectReference != null && !indirectReference.isFree() && !indirectReference.checkState(PdfObject.FLUSHED)) {
806+
if (isFlushUnusedObjects()) {
807807
PdfObject object = indirectReference.getRefersTo();
808808
object.flush();
809+
} else {
810+
indirectReference.setFree();
809811
}
810812
}
811813
}

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

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -151,9 +151,7 @@ protected void freeReference(PdfIndirectReference reference) {
151151
if (reference.getGenNumber() < MAX_GENERATION) {
152152
freeReferences.add(reference.getObjNumber());
153153
ensureCount(Math.max(this.count, reference.getObjNumber()));
154-
xref[reference.getObjNumber()] = null;
155154
}
156-
157155
}
158156
}
159157

@@ -170,15 +168,9 @@ protected void setCapacity(int capacity) {
170168
*/
171169
protected void writeXrefTableAndTrailer(PdfDocument document, PdfObject fileId, PdfObject crypto) throws IOException {
172170
PdfWriter writer = document.getWriter();
173-
if (document.isAppendMode()) {
174-
// Increment generation number for all freed references.
175-
for (Integer objNr : freeReferences) {
176-
xref[(int) objNr].genNr++;
177-
}
178-
} else {
179-
for (Integer objNr : freeReferences) {
180-
xref[(int) objNr] = null;
181-
}
171+
// Increment generation number for all freed references.
172+
for (Integer objNr : freeReferences) {
173+
xref[(int) objNr].genNr++;
182174
}
183175
freeReferences.clear();
184176

@@ -205,9 +197,7 @@ protected void writeXrefTableAndTrailer(PdfDocument document, PdfObject fileId,
205197
for (int i = 1; i < size(); i++) {
206198
PdfIndirectReference reference = xref[i];
207199
if (reference != null) {
208-
if ((document.properties.appendMode && !reference.checkState(PdfObject.MODIFIED)) ||
209-
(reference.isFree() && reference.getGenNumber() == 0) ||
210-
(!reference.checkState(PdfObject.FLUSHED))) {
200+
if (document.properties.appendMode && !reference.checkState(PdfObject.MODIFIED)) {
211201
reference = null;
212202
}
213203
}

0 commit comments

Comments
 (0)