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 2012/01/04 19:09:17 UTC
svn commit: r1227249 - in
/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox: cos/COSDocument.java
io/PushBackInputStream.java pdfparser/PDFParser.java
pdfparser/XrefTrailerResolver.java pdfwriter/COSWriter.java
Author: lehmi
Date: Wed Jan 4 18:09:16 2012
New Revision: 1227249
URL: http://svn.apache.org/viewvc?rev=1227249&view=rev
Log:
PDFBOX-1196: use long instead of int for object offsets as proposed by Timo Boehme
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSDocument.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/PushBackInputStream.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFParser.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/XrefTrailerResolver.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfwriter/COSWriter.java
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSDocument.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSDocument.java?rev=1227249&r1=1227248&r2=1227249&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSDocument.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSDocument.java Wed Jan 4 18:09:16 2012
@@ -60,8 +60,8 @@ public class COSDocument extends COSBase
/**
* Maps object and generation id to object byte offsets.
*/
- private final Map<COSObjectKey, Integer> xrefTable =
- new HashMap<COSObjectKey, Integer>();
+ private final Map<COSObjectKey, Long> xrefTable =
+ new HashMap<COSObjectKey, Long>();
/**
* Document trailer dictionary.
@@ -89,7 +89,7 @@ public class COSDocument extends COSBase
private boolean warnMissingClose = true;
- private int startXref;
+ private long startXref;
private boolean closed = false;
@@ -618,7 +618,7 @@ public class COSDocument extends COSBase
* Each entry maps ObjectKeys to byte offsets in the file.
* @param xrefTableValues xref table entries to be added
*/
- public void addXRefTable( Map<COSObjectKey, Integer> xrefTableValues )
+ public void addXRefTable( Map<COSObjectKey, Long> xrefTableValues )
{
xrefTable.putAll( xrefTableValues );
}
@@ -628,7 +628,7 @@ public class COSDocument extends COSBase
* to byte offsets in the file.
* @return mapping of ObjectsKeys to byte offsets
*/
- public Map<COSObjectKey, Integer> getXrefTable()
+ public Map<COSObjectKey, Long> getXrefTable()
{
return xrefTable;
}
@@ -639,7 +639,7 @@ public class COSDocument extends COSBase
*
* @param startXrefValue the value for startXref
*/
- public void setStartXref(int startXrefValue)
+ public void setStartXref(long startXrefValue)
{
startXref = startXrefValue;
}
@@ -647,9 +647,9 @@ public class COSDocument extends COSBase
/**
* Return the startXref Position of the parsed document. This will only be needed for incremental updates.
*
- * @return a int with the old position of the startxref
+ * @return a long with the old position of the startxref
*/
- public int getStartXref()
+ public long getStartXref()
{
return startXref;
}
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/PushBackInputStream.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/PushBackInputStream.java?rev=1227249&r1=1227248&r2=1227249&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/PushBackInputStream.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/PushBackInputStream.java Wed Jan 4 18:09:16 2012
@@ -31,7 +31,7 @@ public class PushBackInputStream extends
/*
* The current position in the file.
*/
- private int offset = 0;
+ private long offset = 0;
/**
* Constructor.
@@ -71,7 +71,7 @@ public class PushBackInputStream extends
* Returns the current byte offset in the file.
* @return the int byte offset
*/
- public int getOffset()
+ public long getOffset()
{
return offset;
}
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFParser.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFParser.java?rev=1227249&r1=1227248&r2=1227249&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFParser.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFParser.java Wed Jan 4 18:09:16 2012
@@ -429,7 +429,7 @@ public class PDFParser extends BaseParse
*/
private boolean parseObject() throws IOException
{
- int currentObjByteOffset = pdfSource.getOffset();
+ long currentObjByteOffset = pdfSource.getOffset();
boolean isEndOfFile = false;
skipSpaces();
//peek at the next character to determine the type of object we are parsing
@@ -642,7 +642,7 @@ public class PDFParser extends BaseParse
* @param pb The COSBase of this conflictObj
* @throws IOException
*/
- private void addObjectToConflicts(int offset, COSObjectKey key, COSBase pb) throws IOException
+ private void addObjectToConflicts(long offset, COSObjectKey key, COSBase pb) throws IOException
{
COSObject obj = new COSObject(null);
obj.setObjectNumber( COSInteger.get( key.getNumber() ) );
@@ -686,7 +686,7 @@ public class PDFParser extends BaseParse
* @return false on parsing error
* @throws IOException If an IO error occurs.
*/
- private boolean parseXrefTable( int startByteOffset ) throws IOException
+ private boolean parseXrefTable( long startByteOffset ) throws IOException
{
if(pdfSource.peek() != 'x')
{
@@ -734,7 +734,7 @@ public class PDFParser extends BaseParse
{
try
{
- int currOffset = Integer.parseInt(splitString[0]);
+ long currOffset = Long.parseLong(splitString[0]);
int currGenID = Integer.parseInt(splitString[1]);
COSObjectKey objKey = new COSObjectKey(currObjID, currGenID);
xrefTrailerResolver.setXRef(objKey, currOffset);
@@ -839,7 +839,7 @@ public class PDFParser extends BaseParse
* @param objByteOffset the offset to start at
* @throws IOException if there is an error parsing the stream
*/
- public void parseXrefStream( COSStream stream, int objByteOffset ) throws IOException
+ public void parseXrefStream( COSStream stream, long objByteOffset ) throws IOException
{
xrefTrailerResolver.nextXrefObj( objByteOffset );
xrefTrailerResolver.setTrailer( stream );
@@ -860,11 +860,11 @@ public class PDFParser extends BaseParse
private static class ConflictObj
{
- private int offset;
+ private long offset;
private COSObjectKey objectKey;
private COSObject object;
- public ConflictObj(int offsetValue, COSObjectKey key, COSObject pdfObject)
+ public ConflictObj(long offsetValue, COSObjectKey key, COSObject pdfObject)
{
this.offset = offsetValue;
this.objectKey = key;
@@ -890,7 +890,7 @@ public class PDFParser extends BaseParse
while(conflicts.hasNext())
{
ConflictObj o = conflicts.next();
- Integer offset = new Integer(o.offset);
+ Long offset = new Long(o.offset);
if(document.getXrefTable().containsValue(offset))
{
COSObject pdfObject = document.getObjectFromPool(o.objectKey);
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/XrefTrailerResolver.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/XrefTrailerResolver.java?rev=1227249&r1=1227248&r2=1227249&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/XrefTrailerResolver.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/XrefTrailerResolver.java Wed Jan 4 18:09:16 2012
@@ -54,25 +54,32 @@ public class XrefTrailerResolver
/**
* A class which represents a xref/trailer object.
*/
- class XrefTrailerObj
+ private class XrefTrailerObj
{
private COSDictionary trailer = null;
- private final Map<COSObjectKey, Integer> xrefTable = new HashMap<COSObjectKey, Integer>();
+ private final Map<COSObjectKey, Long> xrefTable = new HashMap<COSObjectKey, Long>();
+
+ /**
+ * Default cosntructor.
+ */
+ private XrefTrailerObj()
+ {
+ }
}
- private final Map<Integer, XrefTrailerObj> bytePosToXrefMap = new HashMap<Integer, XrefTrailerObj>();
+ private final Map<Long, XrefTrailerObj> bytePosToXrefMap = new HashMap<Long, XrefTrailerObj>();
private XrefTrailerObj curXrefTrailerObj = null;
private XrefTrailerObj resolvedXrefTrailer = null;
/** Log instance. */
- private static final Log log = LogFactory.getLog( XrefTrailerResolver.class );
+ private static final Log LOG = LogFactory.getLog( XrefTrailerResolver.class );
/**
* Signals that a new XRef object (table or stream) starts.
* @param startBytePos the offset to start at
*
*/
- public void nextXrefObj( final int startBytePos )
+ public void nextXrefObj( final long startBytePos )
{
bytePosToXrefMap.put( startBytePos, curXrefTrailerObj = new XrefTrailerObj() );
}
@@ -83,12 +90,12 @@ public class XrefTrailerResolver
* @param objKey The objkey, with id and gen numbers
* @param offset The byte offset in this file
*/
- public void setXRef( COSObjectKey objKey, int offset )
+ public void setXRef( COSObjectKey objKey, long offset )
{
if ( curXrefTrailerObj == null )
{
// should not happen...
- log.warn( "Cannot add XRef entry for '" + objKey.getNumber() + "' because XRef start was not signalled." );
+ LOG.warn( "Cannot add XRef entry for '" + objKey.getNumber() + "' because XRef start was not signalled." );
return;
}
curXrefTrailerObj.xrefTable.put( objKey, offset );
@@ -104,7 +111,7 @@ public class XrefTrailerResolver
if ( curXrefTrailerObj == null )
{
// should not happen...
- log.warn( "Cannot add trailer because XRef start was not signalled." );
+ LOG.warn( "Cannot add trailer because XRef start was not signalled." );
return;
}
curXrefTrailerObj.trailer = trailer;
@@ -121,24 +128,24 @@ public class XrefTrailerResolver
* Thus for incomplete PDF documents with missing
* startxref one could call this method with parameter value -1.
*/
- public void setStartxref( int startxrefBytePos )
+ public void setStartxref( long startxrefBytePosValue )
{
if ( resolvedXrefTrailer != null )
{
- log.warn( "Method must be called only ones with last startxref value." );
+ LOG.warn( "Method must be called only ones with last startxref value." );
return;
}
resolvedXrefTrailer = new XrefTrailerObj();
resolvedXrefTrailer.trailer = new COSDictionary();
- XrefTrailerObj curObj = bytePosToXrefMap.get( startxrefBytePos );
- List<Integer> xrefSeqBytePos = new ArrayList<Integer>();
+ XrefTrailerObj curObj = bytePosToXrefMap.get( startxrefBytePosValue );
+ List<Long> xrefSeqBytePos = new ArrayList<Long>();
if ( curObj == null )
{
// no XRef at given position
- log.warn( "Did not found XRef object at specified startxref position " + startxrefBytePos );
+ LOG.warn( "Did not found XRef object at specified startxref position " + startxrefBytePosValue );
// use all objects in byte position order (last entries overwrite previous ones)
xrefSeqBytePos.addAll( bytePosToXrefMap.keySet() );
@@ -148,10 +155,10 @@ public class XrefTrailerResolver
{
// found starting Xref object
// add this and follow chain defined by 'Prev' keys
- xrefSeqBytePos.add( startxrefBytePos );
+ xrefSeqBytePos.add( startxrefBytePosValue );
while ( curObj.trailer != null )
{
- int prevBytePos = curObj.trailer.getInt( COSName.PREV, -1 );
+ long prevBytePos = curObj.trailer.getLong( COSName.PREV, -1L );
if ( prevBytePos == -1 )
{
break;
@@ -160,7 +167,7 @@ public class XrefTrailerResolver
curObj = bytePosToXrefMap.get( prevBytePos );
if ( curObj == null )
{
- log.warn( "Did not found XRef object pointed to by 'Prev' key at position " + prevBytePos );
+ LOG.warn( "Did not found XRef object pointed to by 'Prev' key at position " + prevBytePos );
break;
}
xrefSeqBytePos.add( prevBytePos );
@@ -176,7 +183,7 @@ public class XrefTrailerResolver
}
// merge used and sorted XRef/trailer
- for ( Integer bPos : xrefSeqBytePos )
+ for ( Long bPos : xrefSeqBytePos )
{
curObj = bytePosToXrefMap.get( bPos );
if ( curObj.trailer != null )
@@ -192,6 +199,7 @@ public class XrefTrailerResolver
* Gets the resolved trailer. Might return <code>null</code> in case
* {@link #setStartxref(int)} was not called before.
*
+ * @return the trailer if available
*/
public COSDictionary getTrailer()
{
@@ -202,8 +210,9 @@ public class XrefTrailerResolver
* Gets the resolved xref table. Might return <code>null</code> in case
* {@link #setStartxref(int)} was not called before.
*
+ * @return the xrefTable if available
*/
- public Map<COSObjectKey, Integer> getXrefTable()
+ public Map<COSObjectKey, Long> getXrefTable()
{
return ( resolvedXrefTrailer == null ) ? null : resolvedXrefTrailer.xrefTable;
}
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfwriter/COSWriter.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfwriter/COSWriter.java?rev=1227249&r1=1227248&r2=1227249&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfwriter/COSWriter.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfwriter/COSWriter.java Wed Jan 4 18:09:16 2012
@@ -249,7 +249,7 @@ public class COSWriter implements ICOSVi
{
COSDocument cosDoc = doc.getDocument();
- Map<COSObjectKey, Integer> xrefTable = cosDoc.getXrefTable();
+ Map<COSObjectKey, Long> xrefTable = cosDoc.getXrefTable();
Set<COSObjectKey> keySet = xrefTable.keySet();
long highestNumber=0;
for ( COSObjectKey cosObjectKey : keySet )
@@ -758,17 +758,17 @@ public class COSWriter implements ICOSVi
* that represent a cluster of the size 3. 5 is follow by three other
* related numbers and create a cluster of size 4. etc.
*
- * @param xRefEntries list with the xRef entries that was written
+ * @param xRefEntriesList list with the xRef entries that was written
* @return a integer array with the ranges
*/
- protected Integer[] getXRefRanges(List<COSWriterXRefEntry> xRefEntries)
+ protected Integer[] getXRefRanges(List<COSWriterXRefEntry> xRefEntriesList)
{
int nr = 0;
int last = -2;
int count = 1;
ArrayList<Integer> list = new ArrayList<Integer>();
- for( Object object : xRefEntries )
+ for( Object object : xRefEntriesList )
{
nr = (int)((COSWriterXRefEntry)object).getKey().getNumber();
if (nr == last + 1)
@@ -789,7 +789,7 @@ public class COSWriter implements ICOSVi
}
}
// If no new entry is found, we need to write out the last result
- if(xRefEntries.size() > 0)
+ if(xRefEntriesList.size() > 0)
{
list.add(last - count + 1);
list.add(count);