📄 cosdocument.java
字号:
encrypted = trailer.getDictionaryObject( "Encrypt" ) != null;
}
return encrypted;
}
/**
* This will get the encryption dictionary if the document is encrypted or null
* if the document is not encrypted.
*
* @return The encryption dictionary.
*/
public COSDictionary getEncryptionDictionary()
{
return (COSDictionary)trailer.getDictionaryObject( COSName.getPDFName( "Encrypt" ) );
}
/**
* This will set the encryption dictionary, this should only be called when
* encypting the document.
*
* @param encDictionary The encryption dictionary.
*/
public void setEncryptionDictionary( COSDictionary encDictionary )
{
trailer.setItem( COSName.getPDFName( "Encrypt" ), encDictionary );
}
/**
* This will get the document ID.
*
* @return The document id.
*/
public COSArray getDocumentID()
{
return (COSArray) getTrailer().getItem(COSName.getPDFName("ID"));
}
/**
* This will set the document ID.
*
* @param id The document id.
*/
public void setDocumentID( COSArray id )
{
getTrailer().setItem(COSName.getPDFName("ID"), id);
}
/**
* This will create an object for this document.
*
* Create an indirect object out of the direct type and include in the document
* for later lookup via document a map from direct object to indirect object
* is maintained. this provides better support for manual PDF construction.
*
* @param base the base object to wrap in an indirect object.
*
* @return The pdf object that wraps the base, or creates a new one.
*/
/**
public COSObject createObject( COSBase base )
{
COSObject obj = (COSObject)objectMap.get(base);
if (obj == null)
{
obj = new COSObject( base );
obj.addTo(this);
}
return obj;
}**/
/**
* This will get the document catalog.
*
* Maybe this should move to an object at PDFEdit level
*
* @return catalog is the root of all document activities
*
* @throws IOException If no catalog can be found.
*/
public COSObject getCatalog() throws IOException
{
COSObject catalog = getObjectByType( COSName.CATALOG );
if( catalog == null )
{
throw new IOException( "Catalog cannot be found" );
}
return catalog;
}
/**
* This will get a list of all available objects.
*
* @return A list of all objects.
*/
public List getObjects()
{
return new ArrayList(objects);
}
/**
* This will get the document trailer.
*
* @return the document trailer dict
*/
public COSDictionary getTrailer()
{
return trailer;
}
/**
* // MIT added, maybe this should not be supported as trailer is a persistence construct.
* This will set the document trailer.
*
* @param newTrailer the document trailer dictionary
*/
public void setTrailer(COSDictionary newTrailer)
{
trailer = newTrailer;
}
/**
* visitor pattern double dispatch method.
*
* @param visitor The object to notify when visiting this object.
* @return any object, depending on the visitor implementation, or null
* @throws COSVisitorException If an error occurs while visiting this object.
*/
public Object accept(ICOSVisitor visitor) throws COSVisitorException
{
return visitor.visitFromDocument( this );
}
/**
* This will close all storage and delete the tmp files.
*
* @throws IOException If there is an error close resources.
*/
public void close() throws IOException
{
if( scratchFile != null )
{
scratchFile.close();
scratchFile = null;
}
if( tmpFile != null )
{
tmpFile.delete();
tmpFile = null;
}
}
/**
* The sole purpose of this is to inform a client of PDFBox that they
* did not close the document.
*/
protected void finalize()
{
if( tmpFile != null || scratchFile != null )
{
Throwable t = new Throwable( "Warning: You did not close the PDF Document" );
t.printStackTrace();
}
}
/**
* @return Returns the headerString.
*/
public String getHeaderString()
{
return headerString;
}
/**
* @param header The headerString to set.
*/
public void setHeaderString(String header)
{
headerString = header;
}
/**
* This method will search the list of objects for types of ObjStm. If it finds
* them then it will parse out all of the objects from the stream that is contains.
*
* @throws IOException If there is an error parsing the stream.
*/
public void dereferenceObjectStreams() throws IOException
{
Iterator objStm = getObjectsByType( "ObjStm" ).iterator();
while( objStm.hasNext() )
{
COSObject objStream = (COSObject)objStm.next();
COSStream stream = (COSStream)objStream.getObject();
PDFObjectStreamParser parser = new PDFObjectStreamParser( stream, this );
parser.parse();
Iterator compressedObjects = parser.getObjects().iterator();
while( compressedObjects.hasNext() )
{
COSObject next = (COSObject)compressedObjects.next();
COSObjectKey key = new COSObjectKey( next );
COSObject obj = getObjectFromPool( key );
obj.setObject( next.getObject() );
}
}
}
/**
* This will add an object to this document.
* the method checks if obj is already present as there may be cyclic dependencies
*
* @param obj The object to add to the document.
* @return The object that was actually added to this document, if an object reference already
* existed then that will be returned.
*
* @throws IOException If there is an error adding the object.
*/
public COSObject addObject(COSObject obj) throws IOException
{
COSObjectKey key = null;
if( obj.getObjectNumber() != null )
{
key = new COSObjectKey( obj );
}
COSObject fromPool = getObjectFromPool( key );
fromPool.setObject( obj.getObject() );
return fromPool;
}
/**
* This will get an object from the pool.
*
* @param key The object key.
*
* @return The object in the pool or a new one if it has not been parsed yet.
*
* @throws IOException If there is an error getting the proxy object.
*/
public COSObject getObjectFromPool(COSObjectKey key) throws IOException
{
COSObject obj = null;
if( key != null )
{
obj = (COSObject) objectPool.get(key);
}
if (obj == null)
{
// this was a forward reference, make "proxy" object
obj = new COSObject(null);
if( key != null )
{
obj.setObjectNumber( new COSInteger( key.getNumber() ) );
obj.setGenerationNumber( new COSInteger( key.getGeneration() ) );
objectPool.put(key, obj);
}
objects.add( obj );
}
return obj;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -