On Jul 27, 4:16 pm, Chris Curvey <ccur...@gmail.com> wrote: > Has anyone out there been able to enforce print restrictions on a PDF > document by usingPyPDF? The documentation for "encrypt" states: > > # @param user_pwd The "user password", which allows for opening and > reading > # the PDF file with the restrictions provided. > > But there is no parameter for providing a restriction, and I can't > find a reference to any kind of restriction besides this comment in > the docs. > > Thanks in advance!
I found some (I think old-ish) documentation on encryption and permissions (of course, I've lost the link). I think there are additional permissions that have been implemented since the doc that I found, but this patch works for me. Index: C:/Documents and Settings/ccurvey/PyPDF/pyPdf/pdf.py =================================================================== --- C:/Documents and Settings/ccurvey/PyPDF/pyPdf/pdf.py (revision 1) +++ C:/Documents and Settings/ccurvey/PyPDF/pyPdf/pdf.py (revision 2) @@ -118,7 +118,10 @@ # @param use_128bit Boolean argument as to whether to use 128bit # encryption. When false, 40bit encryption will be used. By default, this # flag is on. - def encrypt(self, user_pwd, owner_pwd = None, use_128bit = True): + # @param perm_mask bitmask of the permissions that should be granted. + # Defaults to -1, which is "everything permitted" + def encrypt(self, user_pwd, owner_pwd = None, use_128bit = True, + perm_mask=-1): import md5, time, random if owner_pwd == None: owner_pwd = user_pwd @@ -130,8 +133,8 @@ V = 1 rev = 2 keylen = 40 / 8 - # permit everything: - P = -1 + + P = perm_mask O = ByteStringObject(_alg33(owner_pwd, user_pwd, rev, keylen)) ID_1 = md5.new(repr(time.time())).digest() ID_2 = md5.new(repr(random.random())).digest() Index: C:/Documents and Settings/ccurvey/PyPDF/pyPdf/__init__.py =================================================================== --- C:/Documents and Settings/ccurvey/PyPDF/pyPdf/__init__.py (revision 1) +++ C:/Documents and Settings/ccurvey/PyPDF/pyPdf/__init__.py (revision 2) @@ -1,2 +1,11 @@ from pdf import PdfFileReader, PdfFileWriter + +PERM_NONE = 0 +PERM_PRINT = 2 +PERM_MODIFY = 4 +PERM_COPY_TEXT = 8 +PERM_ANNOTATE = 16 + +PERM_ALL = PERM_PRINT | PERM_MODIFY | PERM_COPY_TEXT | PERM_ANNOTATE + __all__ = ["pdf"] -- http://mail.python.org/mailman/listinfo/python-list