Skip to content

Commit e11c4b3

Browse files
committed
refactored xref offset. RES-713
1 parent 444a398 commit e11c4b3

File tree

2 files changed

+19
-17
lines changed

2 files changed

+19
-17
lines changed

src/main/java/com/itextpdf/rups/view/itext/ObjectStreamParser.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
* Utility class to parse ObjectStreams to extract the offset of a given object id within the stream.
1616
*/
1717
public class ObjectStreamParser {
18-
1918
/**
2019
* Parses an ObjectStream to find the offset to the passed parameter, compressedObjectNumber. This offset is
2120
* relative to the ObjectStream and not to the complete file, as described in the specification.
@@ -26,7 +25,7 @@ public class ObjectStreamParser {
2625
* @param compressedObjectNumber the ID of the object of which you want the offset
2726
* @return the offset of the object or -1 if the object is not found
2827
*/
29-
public int parseObjectStream(PdfStream objStm, int compressedObjectNumber) {
28+
public static int parseObjectStream(PdfStream objStm, int compressedObjectNumber) {
3029
byte[] objStmBytes = objStm.getBytes(true);
3130
int byteOffsetOfFirst = objStm.getAsInt(PdfName.First);
3231

src/main/java/com/itextpdf/rups/view/itext/XRefTable.java

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,6 @@ This file is part of the iText (R) project.
4242
*/
4343
package com.itextpdf.rups.view.itext;
4444

45-
import com.itextpdf.io.source.PdfTokenizer;
46-
import com.itextpdf.io.source.RandomAccessFileOrArray;
47-
import com.itextpdf.io.source.RandomAccessSourceFactory;
4845
import com.itextpdf.kernel.pdf.*;
4946
import com.itextpdf.rups.controller.PdfReaderController;
5047
import com.itextpdf.rups.model.IndirectObjectFactory;
@@ -167,28 +164,34 @@ private String getByteOffSetByRow(int rowIndex) {
167164
final PdfObject object = objects.getObjectByIndex(rowIndex);
168165
PdfIndirectReference indirectReference = object.getIndirectReference();
169166
if ( indirectReference != null ) {
170-
long offset = indirectReference.getOffset();
171-
172-
if ( offset == -1 ) {
173-
int objStreamNumber = indirectReference.getObjStreamNumber();
174-
PdfObject refersTo = indirectReference.getRefersTo();
175-
int compressedObjectNumber = refersTo.getIndirectReference().getObjNumber();
176-
PdfObject objectByIndex = objects.loadObjectByReference(objStreamNumber);
177-
178-
PdfStream objStm = (PdfStream) objectByIndex;
179-
int internalCompressedObjectOffset = new ObjectStreamParser().parseObjectStream(objStm, compressedObjectNumber);
167+
if (isObjectStream(indirectReference)) {
168+
int compressedObjectNumber = indirectReference.getObjNumber();
169+
PdfStream objStm = getObjectStream(indirectReference);
170+
int internalCompressedObjectOffset
171+
= ObjectStreamParser.parseObjectStream(objStm, compressedObjectNumber);
180172

181173
return String.format(
182174
Language.XREF_BYTE_OFFSET_OBJECT_STREAM.getString(),
183-
objStreamNumber, internalCompressedObjectOffset
175+
objStm.getIndirectReference().getObjNumber(), internalCompressedObjectOffset
184176
);
185177
}
186178

187-
return String.valueOf(offset);
179+
return String.valueOf(indirectReference.getOffset());
188180
}
189181
return Language.XREF_NOT_LOADED_YET.getString();
190182
}
191183

184+
private PdfStream getObjectStream(PdfIndirectReference indirectReference) {
185+
int objStreamNumber = indirectReference.getObjStreamNumber();
186+
PdfObject objectByIndex = objects.loadObjectByReference(objStreamNumber);
187+
188+
return (PdfStream) objectByIndex;
189+
}
190+
191+
private boolean isObjectStream(PdfIndirectReference indirectReference) {
192+
return indirectReference.getOffset() == -1;
193+
}
194+
192195

193196
/**
194197
* @see javax.swing.JTable#getColumnName(int)

0 commit comments

Comments
 (0)