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 2016/03/11 19:49:54 UTC
svn commit: r1734615 -
/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFXRefStream.java
Author: lehmi
Date: Fri Mar 11 18:49:54 2016
New Revision: 1734615
URL: http://svn.apache.org/viewvc?rev=1734615&view=rev
Log:
PDFBOX-3263: create correct cross reference stream
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFXRefStream.java
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFXRefStream.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFXRefStream.java?rev=1734615&r1=1734614&r2=1734615&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFXRefStream.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFXRefStream.java Fri Mar 11 18:49:54 2016
@@ -77,7 +77,8 @@ public class PDFXRefStream implements PD
{
throw new IllegalArgumentException("size is not set in xrefstream");
}
- stream.setLong(COSName.SIZE, getSizeEntry());
+ // add one for object number 0
+ stream.setLong(COSName.SIZE, streamData.size() + 1);
List<Long> indexEntry = getIndexEntry();
COSArray indexAsArray = new COSArray();
@@ -212,11 +213,6 @@ public class PDFXRefStream implements PD
return w;
}
- private long getSizeEntry()
- {
- return size;
- }
-
/**
* Set the size of the XRef stream.
*
@@ -232,8 +228,11 @@ public class PDFXRefStream implements PD
LinkedList<Long> linkedList = new LinkedList<Long>();
Long first = null;
Long length = null;
-
- for ( Long objNumber : objectNumbers )
+ Set<Long> objNumbers = new TreeSet<Long>();
+ // add object number 0 to the set
+ objNumbers.add(0L);
+ objNumbers.addAll(objectNumbers);
+ for ( Long objNumber : objNumbers )
{
if (first == null)
{
@@ -275,6 +274,10 @@ public class PDFXRefStream implements PD
private void writeStreamData(OutputStream os, int[] w) throws IOException
{
+ // write dummy entry for object number 0
+ writeNumber(os, ENTRY_FREE, w[0]);
+ writeNumber(os, ENTRY_FREE, w[1]);
+ writeNumber(os, 0xFFFF, w[2]);
// iterate over all streamData and write it in the required format
for ( Object entry : streamData.values() )
{