All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.pdfbox.pdmodel.common.filespecification.PDComplexFileSpecification Maven / Gradle / Ivy

Go to download

The Apache PDFBox library is an open source Java tool for working with PDF documents.

There is a newer version: 3.0.2
Show newest version
/*
 * 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 ); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy