PDF を暗号化する

Jython で PDF を暗号化するスクリプト. Jython 2.5.0 + iText 2.1.5 + Bouncy Castle 1.43 で動作確認.
Jython 2.5.0 リリース記念(嘘). Office 2007 SP2 リリース記念(本当).

from sys import argv
from java.io import FileOutputStream
from com.lowagie.text import Document
from com.lowagie.text.pdf import PdfReader, PdfWriter

def encrypt_pdf(src, dst, password):
    reader = None
    doc = None
    writer = None
    try:
        reader = PdfReader(src)
        doc = Document(reader.getPageSize(1))
        writer = PdfWriter.getInstance(doc, FileOutputStream(dst))
        writer.open()
        permissions = PdfWriter.AllowCopy or PdfWriter.AllowPrinting
        writer.setEncryption(PdfWriter.STRENGTH128BITS, password, None, permissions)
        doc.open()
        for i in range(reader.getNumberOfPages()):
            doc.newPage()
            writer.directContent.addTemplate(writer.getImportedPage(reader, i + 1), 0, 0)
        doc.addKeywords(reader.info['Keywords'] or '')
        doc.addAuthor(reader.info['Author'] or '')
        doc.addTitle(reader.info['Title'] or '')
        doc.addCreator(reader.info['Creator'] or '')
        doc.addSubject(reader.info['Subject'] or '')
    finally:
        if doc:
            doc.close()
        if writer:
            writer.close()
        if reader:
            reader.close()

encrypt_pdf(argv[1], argv[2], argv[3])