Example usage for org.apache.pdfbox.cos COSName INFO

List of usage examples for org.apache.pdfbox.cos COSName INFO

Introduction

In this page you can find the example usage for org.apache.pdfbox.cos COSName INFO.

Prototype

COSName INFO

To view the source code for org.apache.pdfbox.cos COSName INFO.

Click Source Link

Usage

From source file:com.aaasec.sigserv.csspsupport.pdfbox.modifications.CsCOSWriter.java

License:Apache License

/**
 * This will write the body of the document.
 *
 * @param doc The document to write the body for.
 *
 * @throws IOException If there is an error writing the data.
 * @throws COSVisitorException If there is an error generating the data.
 *//*w w w .jav  a  2 s . co  m*/
protected void doWriteBody(COSDocument doc) throws IOException, COSVisitorException {
    COSDictionary trailer = doc.getTrailer();
    COSDictionary root = (COSDictionary) trailer.getDictionaryObject(COSName.ROOT);
    COSDictionary info = (COSDictionary) trailer.getDictionaryObject(COSName.INFO);
    COSDictionary encrypt = (COSDictionary) trailer.getDictionaryObject(COSName.ENCRYPT);
    if (root != null) {
        addObjectToWrite(root);
    }
    if (info != null) {
        addObjectToWrite(info);
    }

    while (objectsToWrite.size() > 0) {
        COSBase nextObject = objectsToWrite.removeFirst();
        objectsToWriteSet.remove(nextObject);
        doWriteObject(nextObject);
    }

    willEncrypt = false;

    if (encrypt != null) {
        addObjectToWrite(encrypt);
    }

    while (objectsToWrite.size() > 0) {
        COSBase nextObject = objectsToWrite.removeFirst();
        objectsToWriteSet.remove(nextObject);
        doWriteObject(nextObject);
    }
}

From source file:com.aaasec.sigserv.csspsupport.pdfbox.modifications.CsCOSWriter.java

License:Apache License

/**
 * This will write the pdf document.//from   w ww  .  j  a v  a  2 s. co  m
 *
 * @param doc The document to write.
 * @param idTime The time seed used to generate the id
 *
 * @throws COSVisitorException If an error occurs while generating the data.
 */
public void write(PDDocument doc, long idTime) throws COSVisitorException {
    document = doc;
    if (incrementalUpdate) {
        prepareIncrement(doc);
    }

    // if the document says we should remove encryption, then we shouldn't encrypt
    if (doc.isAllSecurityToBeRemoved()) {
        this.willEncrypt = false;
        // also need to get rid of the "Encrypt" in the trailer so readers 
        // don't try to decrypt a document which is not encrypted
        COSDocument cosDoc = doc.getDocument();
        COSDictionary trailer = cosDoc.getTrailer();
        trailer.removeItem(COSName.ENCRYPT);
    } else {
        SecurityHandler securityHandler = document.getSecurityHandler();
        if (securityHandler != null) {
            try {
                securityHandler.prepareDocumentForEncryption(document);
                this.willEncrypt = true;
            } catch (IOException e) {
                throw new COSVisitorException(e);
            } catch (CryptographyException e) {
                throw new COSVisitorException(e);
            }
        } else {
            this.willEncrypt = false;
        }
    }

    COSDocument cosDoc = document.getDocument();
    COSDictionary trailer = cosDoc.getTrailer();
    COSArray idArray = (COSArray) trailer.getDictionaryObject(COSName.ID);
    if (idArray == null || incrementalUpdate) {
        try {

            //algorithm says to use time/path/size/values in doc to generate
            //the id.  We don't have path or size, so do the best we can
            MessageDigest md = MessageDigest.getInstance("MD5");
            md.update(Long.toString(idTime).getBytes("ISO-8859-1"));
            COSDictionary info = (COSDictionary) trailer.getDictionaryObject(COSName.INFO);
            if (info != null) {
                Iterator<COSBase> values = info.getValues().iterator();
                while (values.hasNext()) {
                    md.update(values.next().toString().getBytes("ISO-8859-1"));
                }
            }
            idArray = new COSArray();
            COSString id = new COSString(md.digest());
            idArray.add(id);
            idArray.add(id);
            trailer.setItem(COSName.ID, idArray);
        } catch (NoSuchAlgorithmException e) {
            throw new COSVisitorException(e);
        } catch (UnsupportedEncodingException e) {
            throw new COSVisitorException(e);
        }
    }
    cosDoc.accept(this);
}