Skip to content

Commit cdd44f9

Browse files
committed
refactored xref offset. RES-713
1 parent bf90219 commit cdd44f9

File tree

2 files changed

+19
-19
lines changed

2 files changed

+19
-19
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 & 17 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.event.RupsEvent;
@@ -58,8 +55,6 @@ This file is part of the iText (R) project.
5855
import javax.swing.JTable;
5956
import javax.swing.event.ListSelectionEvent;
6057
import javax.swing.table.TableColumn;
61-
import java.io.IOException;
62-
import java.util.Arrays;
6358
import java.util.Observable;
6459
import java.util.Observer;
6560

@@ -182,28 +177,34 @@ private String getByteOffSetByRow(int rowIndex) {
182177
final PdfObject object = objects.getObjectByIndex(rowIndex);
183178
PdfIndirectReference indirectReference = object.getIndirectReference();
184179
if ( indirectReference != null ) {
185-
long offset = indirectReference.getOffset();
186-
187-
if ( offset == -1 ) {
188-
int objStreamNumber = indirectReference.getObjStreamNumber();
189-
PdfObject refersTo = indirectReference.getRefersTo();
190-
int compressedObjectNumber = refersTo.getIndirectReference().getObjNumber();
191-
PdfObject objectByIndex = objects.loadObjectByReference(objStreamNumber);
192-
193-
PdfStream objStm = (PdfStream) objectByIndex;
194-
int internalCompressedObjectOffset = new ObjectStreamParser().parseObjectStream(objStm, compressedObjectNumber);
180+
if (isObjectStream(indirectReference)) {
181+
int compressedObjectNumber = indirectReference.getObjNumber();
182+
PdfStream objStm = getObjectStream(indirectReference);
183+
int internalCompressedObjectOffset
184+
= ObjectStreamParser.parseObjectStream(objStm, compressedObjectNumber);
195185

196186
return String.format(
197187
Language.XREF_BYTE_OFFSET_OBJECT_STREAM.getString(),
198-
objStreamNumber, internalCompressedObjectOffset
188+
objStm.getIndirectReference().getObjNumber(), internalCompressedObjectOffset
199189
);
200190
}
201191

202-
return String.valueOf(offset);
192+
return String.valueOf(indirectReference.getOffset());
203193
}
204194
return Language.XREF_NOT_LOADED_YET.getString();
205195
}
206196

197+
private PdfStream getObjectStream(PdfIndirectReference indirectReference) {
198+
int objStreamNumber = indirectReference.getObjStreamNumber();
199+
PdfObject objectByIndex = objects.loadObjectByReference(objStreamNumber);
200+
201+
return (PdfStream) objectByIndex;
202+
}
203+
204+
private boolean isObjectStream(PdfIndirectReference indirectReference) {
205+
return indirectReference.getOffset() == -1;
206+
}
207+
207208

208209
/**
209210
* @see javax.swing.JTable#getColumnName(int)

0 commit comments

Comments
 (0)