org.apache.pdfbox.pdmodel.common.filespecification.PDComplexFileSpecification 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.filespecification;
import org.apache.pdfbox.cos.COSBase;
import org.apache.pdfbox.cos.COSDictionary;
import org.apache.pdfbox.cos.COSName;
import org.apache.pdfbox.cos.COSStream;
/**
* This represents a file specification.
*
* @author Ben Litchfield
*
*/
public class PDComplexFileSpecification extends PDFileSpecification
{
private final COSDictionary fs;
private COSDictionary efDictionary;
/**
* Default Constructor.
*/
public PDComplexFileSpecification()
{
fs = new COSDictionary();
fs.setItem( COSName.TYPE, COSName.FILESPEC );
}
/**
* Constructor. Creates empty COSDictionary if dict is null.
*
* @param dict The dictionary that fulfils this file specification.
*/
public PDComplexFileSpecification( COSDictionary dict )
{
if (dict == null)
{
fs = new COSDictionary();
fs.setItem( COSName.TYPE, COSName.FILESPEC );
}
else
{
fs = dict;
}
}
/**
* Convert this standard java object to a COS object.
*
* @return The cos object that matches this Java object.
*/
@Override
public COSDictionary getCOSObject()
{
return fs;
}
private COSDictionary getEFDictionary()
{
if (efDictionary == null && fs != null)
{
efDictionary = (COSDictionary)fs.getDictionaryObject( COSName.EF );
}
return efDictionary;
}
private COSBase getObjectFromEFDictionary(COSName key)
{
COSDictionary ef = getEFDictionary();
if (ef != null)
{
return ef.getDictionaryObject(key);
}
return null;
}
/**
* Preferred method for getting the filename.
* It will determinate the recommended file name.
* First of all we try to get the unicode filename if it exist.
* If it doesn't exist we take a look at the DOS, MAC UNIX filenames.
* If no one exist the required F entry will be returned.
*
* @return The preferred file name.
*/
public String getFilename()
{
String filename = getFileUnicode();
if (filename == null)
{
filename = getFileDos();
}
if (filename == null)
{
filename = getFileMac();
}
if (filename == null)
{
filename = getFileUnix();
}
if (filename == null)
{
filename = getFile();
}
return filename;
}
/**
* This will get the unicode file name.
*
* @return The file name.
*/
public String getFileUnicode()
{
return fs.getString(COSName.UF);
}
/**
* This will set unicode file name.
*
* @param file The name of the file.
*/
public void setFileUnicode( String file )
{
fs.setString( COSName.UF, file );
}
/**
* This will get the file name.
*
* @return The file name.
*/
@Override
public String getFile()
{
return fs.getString( COSName.F );
}
/**
* This will set the file name.
*
* @param file The name of the file.
*/
@Override
public void setFile( String file )
{
fs.setString( COSName.F, file );
}
/**
* This will get the name representing a Dos file.
*
* @return The file name.
*/
public String getFileDos()
{
return fs.getString( COSName.DOS );
}
/**
* This will set name representing a dos file.
*
* @param file The name of the file.
*/
public void setFileDos( String file )
{
fs.setString( COSName.DOS, file );
}
/**
* This will get the name representing a Mac file.
*
* @return The file name.
*/
public String getFileMac()
{
return fs.getString( COSName.MAC );
}
/**
* This will set name representing a Mac file.
*
* @param file The name of the file.
*/
public void setFileMac( String file )
{
fs.setString( COSName.MAC, file );
}
/**
* This will get the name representing a Unix file.
*
* @return The file name.
*/
public String getFileUnix()
{
return fs.getString( COSName.UNIX );
}
/**
* This will set name representing a Unix file.
*
* @param file The name of the file.
*/
public void setFileUnix( String file )
{
fs.setString( COSName.UNIX, file );
}
/**
* Tell if the underlying file is volatile and should not be cached by the
* reader application. Default: false
*
* @param fileIsVolatile The new value for the volatility of the file.
*/
public void setVolatile( boolean fileIsVolatile )
{
fs.setBoolean( COSName.V, fileIsVolatile );
}
/**
* Get if the file is volatile. Default: false
*
* @return True if the file is volatile attribute is set.
*/
public boolean isVolatile()
{
return fs.getBoolean( COSName.V, false );
}
/**
* Get the embedded file.
*
* @return The embedded file for this file spec.
*/
public PDEmbeddedFile getEmbeddedFile()
{
PDEmbeddedFile file = null;
COSStream stream = (COSStream)getObjectFromEFDictionary(COSName.F);
if( stream != null )
{
file = new PDEmbeddedFile( stream );
}
return file;
}
/**
* Set the embedded file for this spec.
*
* @param file The file to be embedded.
*/
public void setEmbeddedFile( PDEmbeddedFile file )
{
COSDictionary ef = getEFDictionary();
if( ef == null && file != null )
{
ef = new COSDictionary();
fs.setItem( COSName.EF, ef );
}
if( ef != null )
{
ef.setItem( COSName.F, file );
}
}
/**
* Get the embedded dos file.
*
* @return The embedded dos file for this file spec.
*/
public PDEmbeddedFile getEmbeddedFileDos()
{
PDEmbeddedFile file = null;
COSStream stream = (COSStream)getObjectFromEFDictionary( COSName.DOS );
if( stream != null )
{
file = new PDEmbeddedFile( stream );
}
return file;
}
/**
* Set the embedded dos file for this spec.
*
* @param file The dos file to be embedded.
*/
public void setEmbeddedFileDos( PDEmbeddedFile file )
{
COSDictionary ef = getEFDictionary();
if( ef == null && file != null )
{
ef = new COSDictionary();
fs.setItem( COSName.EF, ef );
}
if( ef != null )
{
ef.setItem( COSName.DOS, file );
}
}
/**
* Get the embedded Mac file.
*
* @return The embedded Mac file for this file spec.
*/
public PDEmbeddedFile getEmbeddedFileMac()
{
PDEmbeddedFile file = null;
COSStream stream = (COSStream)getObjectFromEFDictionary( COSName.MAC );
if( stream != null )
{
file = new PDEmbeddedFile( stream );
}
return file;
}
/**
* Set the embedded Mac file for this spec.
*
* @param file The Mac file to be embedded.
*/
public void setEmbeddedFileMac( PDEmbeddedFile file )
{
COSDictionary ef = getEFDictionary();
if( ef == null && file != null )
{
ef = new COSDictionary();
fs.setItem( COSName.EF, ef );
}
if( ef != null )
{
ef.setItem( COSName.MAC, file );
}
}
/**
* Get the embedded Unix file.
*
* @return The embedded file for this file spec.
*/
public PDEmbeddedFile getEmbeddedFileUnix()
{
PDEmbeddedFile file = null;
COSStream stream = (COSStream)getObjectFromEFDictionary( COSName.UNIX );
if( stream != null )
{
file = new PDEmbeddedFile( stream );
}
return file;
}
/**
* Set the embedded Unix file for this spec.
*
* @param file The Unix file to be embedded.
*/
public void setEmbeddedFileUnix( PDEmbeddedFile file )
{
COSDictionary ef = getEFDictionary();
if( ef == null && file != null )
{
ef = new COSDictionary();
fs.setItem( COSName.EF, ef );
}
if( ef != null )
{
ef.setItem( COSName.UNIX, file );
}
}
/**
* Get the embedded unicode file.
*
* @return The embedded unicode file for this file spec.
*/
public PDEmbeddedFile getEmbeddedFileUnicode()
{
PDEmbeddedFile file = null;
COSStream stream = (COSStream)getObjectFromEFDictionary( COSName.UF );
if( stream != null )
{
file = new PDEmbeddedFile( stream );
}
return file;
}
/**
* Set the embedded Unicode file for this spec.
*
* @param file The Unicode file to be embedded.
*/
public void setEmbeddedFileUnicode( PDEmbeddedFile file )
{
COSDictionary ef = getEFDictionary();
if( ef == null && file != null )
{
ef = new COSDictionary();
fs.setItem( COSName.EF, ef );
}
if( ef != null )
{
ef.setItem( COSName.UF, file );
}
}
/**
* Set the file description.
*
* @param description The file description
*/
public void setFileDescription( String description )
{
fs.setString( COSName.DESC, description );
}
/**
* This will get the description.
*
* @return The file description.
*/
public String getFileDescription()
{
return fs.getString( COSName.DESC );
}
}