# CHAPTER 1. Basics def fromFile(filename, userpw): """ fromFile(filename, userpw) loads a PDF file from a given file. Supply a user password (possibly blank) in case the file is encypted. It won't be decrypted, but sometimes the password is needed just to load the file.""" def fromFileLazy(filename, userpw): """ fromFileLazy(pdf, userpw) loads a PDF from a file, doing only minimal parsing. The objects will be read and parsed when they are actually needed. Use this when the whole file won't be required. Also supply a user password (possibly blank) in case the file is encypted. It won't be decrypted, but sometimes the password is needed just to load the file.""" def fromMemory(data, userpw): """ fromMemory(data, length, userpw) loads a file from memory, given a pointer and a length, and the user password.""" def fromMemoryLazy(data, userpw): """ fromMemoryLazy(data, length, userpw) loads a file from memory, given a pointer and a length, and the user password, but lazily like fromFileLazy.""" def blankDocument(w, h, pages): """ blankDocument(width, height, num_pages) creates a blank document with pages of the given width (in points), height (in points), and number of pages.""" """Paper sizes.""" a0portrait a1portrait a2portrait a3portrait a4portrait a5portrait a0landscape a1landscape a2landscape a3landscape a4landscape a5landscape usletterportrait usletterlandscape uslegalportrait uslegallandscape def blankDocumentPaper(papersize, pages): """blankDocument(width, height, num_pages) creates a blank document with pages of the given width (in points), height (in points), and number of pages. """ def ptOfCm(i): """Convert a figure in centimetres to points (72 points to 1 inch)""" def ptOfMm(i): """Convert a figure in millimetres to points (72 points to 1 inch)""" def ptOfIn(i): """Convert a figure in inches to points (72 points to 1 inch)""" def cmOfPt(i): """Convert a figure in points to centimetres (72 points to 1 inch)""" def mmOfPt(i): """Convert a figure in points to millimetres (72 points to 1 inch)""" def inOfPt(i): """Convert a figure in points to inches (72 points to 1 inch)""" def parsePagespec(pdf, pagespec): """parsePagespec(pdf, pagespec) parses a page specification with reference to a given PDF (the PDF is supplied so that page ranges which reference pages which do not exist are rejected).""" def validatePagespec(pagespec): """validatePagespec(range) validates a page specification so far as is possible in the absence of the actual document.""" def stringOfPagespec(pdf, r): """stringOfPagespec(pdf, range) builds a page specification from a page range. For example, the range containing 1,2,3,6,7,8 in a document of 8 pages might yield "1-3,6-end" """ def blankRange(): """blankRange() creates a range with no pages in.""" def pageRange(f, t): """ pageRange(from, to) build a range from one page to another inclusive. For example, pageRange(3,7) gives the range 3,4,5,6,7 """ def all(pdf): """all(pdf) is the range containing all the pages in a given document.""" def even(r): """even(range) makes a range which contains just the even pages of another range""" def odd(r): """odd(range) makes a range which contains just the odd pages of another range""" def rangeUnion(a, b): """rangeUnion(a, b) makes the union of two ranges giving a range containing the pages in range a and range b.""" def difference(a, b): """difference(a, b) makes the difference of two ranges, giving a range containing all the pages in a except for those which are also in b.""" def removeDuplicates(r): """removeDuplicates(range) deduplicates a range, making a new one.""" def rangeLength(r): """rangeLength gives the number of pages in a range.""" def rangeGet(r, n): """rangeGet(range, n) gets the page number at position n in a range, where n runs from 0 to rangeLength - 1.""" def rangeAdd(r, p): """rangeAdd(range, page) adds the page to a range, if it is not already there.""" def isInRange(r, p): """isInRange(range, page) returns True if the page is in the range, False otherwise.""" def pages(pdf): """pages(pdf) returns the number of pages in a PDF.""" def pagesFast(userpw, filename): """pagesFast(password, filename) returns the number of pages in a given PDF, with given user encryption password. It tries to do this as fast as possible, without loading the whole file.""" def toFile(pdf, filename, linearize, make_id): """toFile (pdf, filename, linearize, make_id) writes the file to a given filename. If linearize is True, it will be linearized. If make_id is True, it will be given a new ID.""" def toFileExt(pdf, filename, linearize, make_id, preserve_objstm, generate_objstm, compress_objstm): """toFileExt (pdf, filename, linearize, make_id, preserve_objstm, generate_objstm, compress_objstm) writes the file to a given filename. If make_id is True, it will be given a new ID. If preserve_objstm is True, existing object streams will be preserved. If generate_objstm is True, object streams will be generated even if not originally present. If compress_objstm is True, object streams will be compressed (what we usually want). WARNING: the pdf argument will be invalid after this call and should not be used again.""" def toMemory(pdf, linearize, make_id): """Given a buffer of the correct size, toMemory (pdf, linearize, make_id) writes it and returns the buffer as a byte array of type bytes.""" def isEncrypted(pdf): """isEncrypted(pdf) returns True if a documented is encrypted, False otherwise.""" """Permissions.""" noEdit noPrint noCopy noAnnot noForms noExtract noAssemble noHqPrint """Encryption Methods.""" pdf40bit pdf128bit aes128bitfalse aes128bittrue aes256bitfalse aes256bittrue aes256bitisofalse aes256bitisotrue def toFileEncrypted(pdf, method, permissions, ownerpw, userpw, linearize, makeid, filename): """toFileEncrypted(pdf, encryption_method, permissions, permission_length, owner_password, user password, linearize, makeid, filename) writes a file as encrypted.""" def toFileEncryptedExt(pdf, method, permissions, ownerpw, userpw, linearize, makeid, preserve_objstm, generate_objstm, compress_objstm, filename): """toFileEncryptedExt(pdf, encryption_method, permissions, permission_length, owner_password, user_password, linearize, makeid, preserve_objstm, generate_objstm, compress_objstm, filename) WARNING: the pdf argument will be invalid after this call, and should be discarded.""" def decryptPdf(pdf, userpw): """decryptPdf(pdf, userpw) attempts to decrypt a PDF using the given user password.""" def decryptPdfOwner(pdf, ownerpw): """decryptPdfOwner(pdf, ownerpw) attempts to decrypt a PDF using the given owner password.""" def hasPermission(pdf, perm): """hasPermission(pdf, permission) returns True if the given permission (restriction) is present.""" def encryptionKind(pdf): """encryptionMethod(pdf) return the encryption method currently in use on a document."""