You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by le...@apache.org on 2023/01/01 10:02:44 UTC
svn commit: r1906309 - in /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox: cos/COSObjectKey.java pdfparser/PDFXrefStreamParser.java
Author: lehmi
Date: Sun Jan 1 10:02:43 2023
New Revision: 1906309
URL: http://svn.apache.org/viewvc?rev=1906309&view=rev
Log:
PDFBOX-5178: add support for the optional index value for an object of a compressed stream
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSObjectKey.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFXrefStreamParser.java
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSObjectKey.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSObjectKey.java?rev=1906309&r1=1906308&r2=1906309&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSObjectKey.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSObjectKey.java Sun Jan 1 10:02:43 2023
@@ -30,6 +30,8 @@ public final class COSObjectKey implemen
// The lowest 16 bits hold the generation 0-65535
// The rest is used for the number (even though 34 bit are sufficient for 10 digits)
private final long numberAndGeneration;
+ // index within a compressed object stream if applicable otherwise -1
+ private final int streamIndex;
/**
* Constructor.
@@ -48,6 +50,28 @@ public final class COSObjectKey implemen
throw new IllegalArgumentException("Generation number must not be a negative value");
}
numberAndGeneration = num << NUMBER_OFFSET | (gen & GENERATION_MASK);
+ streamIndex = -1;
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param num The object number.
+ * @param gen The object generation number.
+ * @param index The index within a compressed object stream
+ */
+ public COSObjectKey(long num, int gen, int index)
+ {
+ if (num < 0)
+ {
+ throw new IllegalArgumentException("Object number must not be a negative value");
+ }
+ if (gen < 0)
+ {
+ throw new IllegalArgumentException("Generation number must not be a negative value");
+ }
+ numberAndGeneration = num << NUMBER_OFFSET | (gen & GENERATION_MASK);
+ this.streamIndex = index;
}
/**
@@ -82,6 +106,16 @@ public final class COSObjectKey implemen
}
/**
+ * The index within a compressed object stream.
+ *
+ * @return the index within a compressed object stream if applicable otherwise -1
+ */
+ public int getStreamIndex()
+ {
+ return streamIndex;
+ }
+
+ /**
* {@inheritDoc}
*/
@Override
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFXrefStreamParser.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFXrefStreamParser.java?rev=1906309&r1=1906308&r2=1906309&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFXrefStreamParser.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFXrefStreamParser.java Sun Jan 1 10:02:43 2023
@@ -136,19 +136,19 @@ public class PDFXrefStreamParser extends
}
// second field holds the offset (type 1) or the object stream number (type 2)
long offset = parseValue(currLine, w[0], w[1]);
- // third field holds the generation number for type 1 entries
- int genNum = type == 1 ? (int) parseValue(currLine, w[0] + w[1], w[2]) : 0;
- COSObjectKey objKey = new COSObjectKey(objID, genNum);
+ // third filed may hold the generation number (type1) or the index within a object stream (type2)
+ int thirdValue = (int) parseValue(currLine, w[0] + w[1], w[2]);
if (type == 1)
{
- resolver.setXRef(objKey, offset);
+ // third field holds the generation number for type 1 entries
+ resolver.setXRef(new COSObjectKey(objID, thirdValue), offset);
}
else
{
// For XRef aware parsers we have to know which objects contain object streams. We will store this
// information in normal xref mapping table but add object stream number with minus sign in order to
// distinguish from file offsets
- resolver.setXRef(objKey, -offset);
+ resolver.setXRef(new COSObjectKey(objID, 0, thirdValue), -offset);
}
}
close();