Example usage for org.apache.pdfbox.pdmodel PDDocument isAllSecurityToBeRemoved

List of usage examples for org.apache.pdfbox.pdmodel PDDocument isAllSecurityToBeRemoved

Introduction

In this page you can find the example usage for org.apache.pdfbox.pdmodel PDDocument isAllSecurityToBeRemoved.

Prototype

public boolean isAllSecurityToBeRemoved() 

Source Link

Document

Indicates if all security is removed or not when writing the pdf.

Usage

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

License:Apache License

/**
 * This will write the pdf document./*  www . j a  v  a  2s  .  c  o  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);
}