CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-org-apache-pdfbox--pdfbox

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

Pending
Overview
Eval results
Files

security-encryption.mddocs/

Security and Encryption

Comprehensive PDF security features including encryption, decryption, access permissions, password protection, and digital signatures for document integrity and confidentiality.

Document Encryption

Encrypt PDF documents with password protection and access control.

// Encryption methods in org.apache.pdfbox.pdmodel.PDDocument
public void encrypt(AccessPermission ap, StandardProtectionPolicy spp) throws IOException;
public boolean isEncrypted();
public void decrypt(String password) throws IOException;
public AccessPermission getCurrentAccessPermission();

Access Permissions

Control what operations are allowed on encrypted PDF documents.

// Constructor and methods in org.apache.pdfbox.pdmodel.encryption.AccessPermission
public AccessPermission();
public AccessPermission(int permissions);

// Permission queries
public boolean canPrint();
public boolean canPrintDegraded();
public boolean canModify();
public boolean canModifyAnnotations();
public boolean canFillInForm();
public boolean canExtractContent();
public boolean canExtractForAccessibility();
public boolean canAssembleDocument();

// Permission setters
public void setCanPrint(boolean canPrint);
public void setCanPrintDegraded(boolean canPrintDegraded);
public void setCanModify(boolean canModify);
public void setCanModifyAnnotations(boolean canModifyAnnotations);
public void setCanFillInForm(boolean canFillInForm);
public void setCanExtractContent(boolean canExtractContent);
public void setCanExtractForAccessibility(boolean canExtractForAccessibility);
public void setCanAssembleDocument(boolean canAssembleDocument);

// Permission value
public int getPermissionBytes();
public void setPermissionBytes(int permissions);

Protection Policies

Configure encryption settings and password policies.

// Constructor and methods in org.apache.pdfbox.pdmodel.encryption.StandardProtectionPolicy
public StandardProtectionPolicy(String ownerPassword, String userPassword, AccessPermission permissions);

// Password management
public String getOwnerPassword();
public String getUserPassword();
public AccessPermission getPermissions();

// Encryption configuration
public void setEncryptionKeyLength(int encryptionKeyLength);
public int getEncryptionKeyLength();
public void setPreferAES(boolean preferAES);
public boolean isPreferAES();

Digital Signatures

Add and verify digital signatures for document authenticity and integrity.

// Constructor and methods in org.apache.pdfbox.pdmodel.interactive.digitalsignature.PDSignature
public PDSignature();
public PDSignature(COSDictionary dict);

// Signature information
public String getName();
public void setName(String name);
public Calendar getSignDate();
public void setSignDate(Calendar signDate);
public String getLocation();
public void setLocation(String location);
public String getReason();
public void setReason(String reason);
public String getContactInfo();
public void setContactInfo(String contactInfo);

// Signature data
public byte[] getContents();
public void setContents(byte[] contents);
public int[] getByteRange();
public void setByteRange(int[] byteRange);

// Signature properties
public COSName getFilter();
public void setFilter(COSName filter);
public COSName getSubFilter();
public void setSubFilter(COSName subFilter);

Signature Management

Manage document signatures and verification.

// Signature access in PDDocument
public List<PDSignature> getSignatureDictionaries();
public void addSignature(PDSignature signature) throws IOException;
public void addSignature(PDSignature signature, SignatureInterface signatureInterface) throws IOException;
public void addSignature(PDSignature signature, SignatureInterface signatureInterface, SignatureOptions signatureOptions) throws IOException;

// Signature validation
public boolean verifySignature(PDSignature signature) throws IOException;
public byte[] getSignedContent(PDSignature signature) throws IOException;

Signature Interfaces

Define signature creation behavior.

// Interface in org.apache.pdfbox.pdmodel.interactive.digitalsignature.SignatureInterface
public byte[] sign(InputStream content) throws IOException;

Signature Options

Configure signature appearance and behavior.

// Constructor and methods in org.apache.pdfbox.pdmodel.interactive.digitalsignature.SignatureOptions
public SignatureOptions();

// Page and positioning
public void setPage(int page);
public int getPage();
public void setVisualSignature(PDFormXObject visualSignature);
public PDFormXObject getVisualSignature();

// Signature field configuration
public void setPrefferredSignatureSize(int size);
public int getPreferredSignatureSize();

Security Handlers

Access low-level security implementations.

// Methods in org.apache.pdfbox.pdmodel.encryption.SecurityHandler
public void prepareDocumentForEncryption(PDDocument doc) throws IOException;
public void decryptDocument(PDDocument doc, DecryptionMaterial decryptionMaterial) throws IOException;
public AccessPermission getCurrentAccessPermission();
public boolean hasProtectionPolicy();

Usage Examples

Encrypting a PDF Document

PDDocument document = Loader.loadPDF(new File("document.pdf"));

// Create access permissions
AccessPermission permissions = new AccessPermission();
permissions.setCanPrint(true);
permissions.setCanModify(false);
permissions.setCanExtractContent(false);
permissions.setCanModifyAnnotations(false);

// Create protection policy
String ownerPassword = "owner123";
String userPassword = "user123";
StandardProtectionPolicy policy = new StandardProtectionPolicy(ownerPassword, userPassword, permissions);

// Configure encryption
policy.setEncryptionKeyLength(256); // AES-256
policy.setPreferAES(true);

// Apply encryption
document.encrypt(permissions, policy);

document.save("encrypted-document.pdf");
document.close();

Opening Encrypted PDF

File file = new File("encrypted-document.pdf");
String password = "user123";

// Load encrypted document with password
PDDocument document = Loader.loadPDF(file, password);

// Check if document is encrypted
if (document.isEncrypted()) {
    System.out.println("Document is encrypted");
    
    // Get current permissions
    AccessPermission permissions = document.getCurrentAccessPermission();
    System.out.println("Can print: " + permissions.canPrint());
    System.out.println("Can modify: " + permissions.canModify());
    System.out.println("Can extract: " + permissions.canExtractContent());
}

// Work with decrypted document
// ...

document.close();

Creating Fine-grained Permissions

PDDocument document = new PDDocument();
// ... add content to document

// Create restrictive permissions
AccessPermission permissions = new AccessPermission();
permissions.setCanPrint(true);                    // Allow printing
permissions.setCanPrintDegraded(false);           // No degraded printing
permissions.setCanModify(false);                  // No modifications
permissions.setCanModifyAnnotations(true);        // Allow annotation changes
permissions.setCanFillInForm(true);               // Allow form filling
permissions.setCanExtractContent(false);          // No content extraction
permissions.setCanExtractForAccessibility(true);  // Allow accessibility tools
permissions.setCanAssembleDocument(false);        // No page manipulation

// Apply with different user/owner passwords
StandardProtectionPolicy policy = new StandardProtectionPolicy("secret_owner", "public_user", permissions);
document.encrypt(permissions, policy);

document.save("restricted-document.pdf");
document.close();

Adding Digital Signatures

PDDocument document = Loader.loadPDF(new File("document.pdf"));

// Create signature dictionary
PDSignature signature = new PDSignature();
signature.setName("John Doe");
signature.setLocation("New York, NY");
signature.setReason("I approve this document");
signature.setSignDate(Calendar.getInstance());
signature.setFilter(COSName.getPDFName("Adobe.PPKLite"));
signature.setSubFilter(COSName.getPDFName("adbe.pkcs7.detached"));

// Implement signature interface
SignatureInterface signatureInterface = new SignatureInterface() {
    @Override
    public byte[] sign(InputStream content) throws IOException {
        // Implement actual signing logic here
        // This would typically involve:
        // 1. Reading the content to be signed
        // 2. Creating a digital signature using private key
        // 3. Returning the signature bytes
        return new byte[0]; // Placeholder
    }
};

// Configure signature options
SignatureOptions signatureOptions = new SignatureOptions();
signatureOptions.setPage(0); // Sign on first page

// Add signature to document
document.addSignature(signature, signatureInterface, signatureOptions);

document.save("signed-document.pdf");
document.close();

Verifying Signatures

PDDocument document = Loader.loadPDF(new File("signed-document.pdf"));

// Get all signatures
List<PDSignature> signatures = document.getSignatureDictionaries();

for (PDSignature signature : signatures) {
    System.out.println("Signature by: " + signature.getName());
    System.out.println("Date: " + signature.getSignDate().getTime());
    System.out.println("Location: " + signature.getLocation());
    System.out.println("Reason: " + signature.getReason());
    
    // Get signed content for verification
    byte[] signedContent = document.getSignedContent(signature);
    
    // Verify signature (implementation depends on your security provider)
    boolean isValid = verifySignature(signature, signedContent);
    System.out.println("Signature valid: " + isValid);
}

document.close();

Working with Security Handlers

PDDocument document = Loader.loadPDF(new File("encrypted-document.pdf"));

if (document.isEncrypted()) {
    // Access security handler for advanced operations
    SecurityHandler securityHandler = document.getEncryption().getSecurityHandler();
    
    if (securityHandler.hasProtectionPolicy()) {
        System.out.println("Document has protection policy");
        
        // Get current access permissions
        AccessPermission currentPermissions = securityHandler.getCurrentAccessPermission();
        
        // Check specific permissions
        if (!currentPermissions.canExtractContent()) {
            System.out.println("Content extraction is restricted");
        }
    }
}

document.close();

Install with Tessl CLI

npx tessl i tessl/maven-org-apache-pdfbox--pdfbox

docs

content-stream-processing.md

cos-operations.md

document-operations.md

index.md

interactive-forms.md

multi-pdf-operations.md

rendering-graphics.md

security-encryption.md

text-operations.md

tile.json