org.apache.pdfbox.pdmodel.common.COSStreamArray Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of pdfbox Show documentation
Show all versions of pdfbox Show documentation
The Apache PDFBox library is an open source Java tool for working with PDF documents.
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.pdfbox.pdmodel.common;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.SequenceInputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;
import org.apache.pdfbox.cos.COSArray;
import org.apache.pdfbox.cos.COSBase;
import org.apache.pdfbox.cos.COSDictionary;
import org.apache.pdfbox.cos.COSName;
import org.apache.pdfbox.cos.COSStream;
import org.apache.pdfbox.cos.ICOSVisitor;
import org.apache.pdfbox.exceptions.COSVisitorException;
import org.apache.pdfbox.io.RandomAccess;
import org.apache.pdfbox.pdfparser.PDFStreamParser;
/**
* This will take an array of streams and sequence them together.
*
* @author Ben Litchfield
* @version $Revision: 1.10 $
*/
public class COSStreamArray extends COSStream
{
private COSArray streams;
/**
* The first stream will be used to delegate some of the methods for this
* class.
*/
private COSStream firstStream;
/**
* Constructor.
*
* @param array The array of COSStreams to concatenate together.
*/
public COSStreamArray( COSArray array )
{
super( new COSDictionary(), null );
streams = array;
if( array.size() > 0 )
{
firstStream = (COSStream)array.getObject( 0 );
}
}
/**
* This will get a stream (or the reference to a stream) from the array.
*
* @param index The index of the requested stream
* @return The stream object or a reference to a stream
*/
public COSBase get( int index )
{
return streams.get( index );
}
/**
* This will get the number of streams in the array.
*
* @return the number of streams
*/
public int getStreamCount()
{
return streams.size();
}
/**
* This will get the scratch file associated with this stream.
*
* @return The scratch file where this stream is being stored.
*
*/
public RandomAccess getScratchFile()
{
return firstStream.getScratchFile();
}
/**
* This will get an object from this streams dictionary.
*
* @param key The key to the object.
*
* @return The dictionary object with the key or null if one does not exist.
*/
public COSBase getItem( COSName key )
{
return firstStream.getItem( key );
}
/**
* This will get an object from this streams dictionary and dereference it
* if necessary.
*
* @param key The key to the object.
*
* @return The dictionary object with the key or null if one does not exist.
*/
public COSBase getDictionaryObject( COSName key )
{
return firstStream.getDictionaryObject( key );
}
/**
* {@inheritDoc}
*/
public String toString()
{
return "COSStream{}";
}
/**
* This will get all the tokens in the stream.
*
* @return All of the tokens in the stream.
*
* @throws IOException If there is an error parsing the stream.
*/
public List getStreamTokens() throws IOException
{
List retval = null;
if( streams.size() > 0 )
{
PDFStreamParser parser = new PDFStreamParser( this );
parser.parse();
retval = parser.getTokens();
}
else
{
retval = new ArrayList();
}
return retval;
}
/**
* This will get the dictionary that is associated with this stream.
*
* @return the object that is associated with this stream.
*/
public COSDictionary getDictionary()
{
return firstStream;
}
/**
* This will get the stream with all of the filters applied.
*
* @return the bytes of the physical (endoced) stream
*
* @throws IOException when encoding/decoding causes an exception
*/
public InputStream getFilteredStream() throws IOException
{
throw new IOException( "Error: Not allowed to get filtered stream from array of streams." );
}
/**
* This will get the logical content stream with none of the filters.
*
* @return the bytes of the logical (decoded) stream
*
* @throws IOException when encoding/decoding causes an exception
*/
public InputStream getUnfilteredStream() throws IOException
{
Vector inputStreams = new Vector();
byte[] inbetweenStreamBytes = "\n".getBytes("ISO-8859-1");
for( int i=0;i