diff --git a/html_manual/pysplits/c00.tex b/html_manual/pysplits/c00.tex new file mode 100644 index 0000000..78fbb86 --- /dev/null +++ b/html_manual/pysplits/c00.tex @@ -0,0 +1,15 @@ +"""Pycpdflib: a python interface to cpdf. + +Before using the library, you must load the libpycpdf and libcpdf DLLs. This is +achieved with the pycpdflib.loadDLL function, given the filename or full path +of the libpycpdf DLL. On Windows, you may have to call os.add_dll_directory +first. On MacOS, you may need to give the full path, and you may need to +install libcpdf.so in a standard location /usr/local/lib/, or use the +install_name_tool command to tell libpycpdf.so where to find libcpdf.so. + +A 'range' is a list of integers specifying page numbers. + +Text arguments and results are in UTF8. + +Any function may raise the exception CPDFError, carrying a string describing +the error. """ diff --git a/html_manual/pysplits/c01.tex b/html_manual/pysplits/c01.tex new file mode 100644 index 0000000..c3a14ea --- /dev/null +++ b/html_manual/pysplits/c01.tex @@ -0,0 +1,129 @@ +Loading the libpypcdf and libcpdf DLLs +-------------------------------------- + +Before using the library, you must load the ``libpycpdf`` and ``libcpdf`` DLLs. +This is achieved with the ``pycpdflib.loadDLL`` function, given the filename or +full path of the ``libpycpdf`` DLL. + +On Windows, you may have to call ``os.add_dll_directory`` first. On MacOS, you +may need to give the full path, and you may need to install ``libcpdf.so`` in a +standard location ``/usr/local/lib/``, or use the ``install_name_tool`` command +to tell ``libpycpdf.so`` where to find ``libcpdf.so``. + +Conventions +----------- + +Any function may raise the exception ``CPDFError``, carrying a string describing +the error. + +A 'range' is a list of integers specifying page numbers. Page numbers start at +1. Range arguments are called `r`. + +Text arguments and results are in UTF8. + +Units are in PDF points (1/72 inch). + +Angles are in degrees. + + +Built-in values +--------------- + +Paper sizes: + +a0portrait a1portrait a2portrait a3portrait a4portrait a5portrait a0landscape +a1landscape a2landscape a3landscape a4landscape a5landscape usletterportrait +usletterlandscape uslegalportrait uslegallandscape + +Permissions: + +noEdit noPrint noCopy noAnnot noForms noExtract noAssemble noHqPrint + +Encryption methods: + +pdf40bit pdf128bit aes128bitfalse aes128bittrue aes256bitfalse aes256bittrue +aes256bitisofalse aes256bitisotrue + +Positions: + +Positions with two numbers in a tuple e.g (posLeft, 10.0, 20.0) + +posCentre posLeft posRight + +Positions with one number in a tuple e.g (top, 5.0) + +top topLeft topRight left bottomLeft bottomRight right + +Positions with no numbers e.g diagonal + +diagonal reverseDiagonal + +Fonts: + +timesRoman timesBold timesItalic timesBoldItalic helvetica helveticaBold +helveticaOblique helveticaBoldOblique courier courierBold courierOblique +courierBoldOblique + +Justification: + +leftJustify centreJustify rightJustify + +Page layouts: + +singlePage oneColumn twoColumnLeft twoColumnRight twoPageLeft twoPageRight + +Page modes: + +useNone useOutlines useThumbs useOC useAttachments + +Page label styles: + +decimalArabic uppercaseRoman lowercaseRoman uppercaseLetters lowercaseLetters + + +# CHAPTER 0. Preliminaries + +class Pdf: + """The type of PDF documents.""" + +def loadDLL(f): + """Load the libpycpdf DLL from a given file, and set up pycpdflib. Must be + called prior to using any other function in the library.""" + +class CPDFError(Exception): + """Any function may raise an exception CPDFError, carrying a string + describing what went wrong.""" + +def lastError(): + """Return the last error. Not usually used directly, since pycpdflib + functions raise exceptions.""" + +def lastErrorString(): + """Return the last error string. Not usually used directly, since pycpdflib + functions raise exceptions.""" + +def checkerror(): + """Raise an exception if the last function call resulted in an error. Not + used directly, since pycpdflib functions will raise the exception + directly.""" + +def version(): + """Return the version number of the pycpdflib library.""" + +def setFast(): + """ Set fast mode. Some operations have a fast mode. The default is 'slow' + mode, which works even on old-fashioned files. For more details, see + section 1.13 of the CPDF manual. This function sets the mode globally. """ + +def setSlow(): + """ Set slow mode. Some operations have a fast mode. The default is 'slow' + mode, which works even on old-fashioned files. For more details, see + section 1.13 of the CPDF manual. This function sets the mode globally. """ + +def clearError(): + """ Clear the current error state. """ + +def onExit(): + """ A debug function which prints some information about + resource usage. This can be used to detect if PDFs or ranges are being + deallocated properly.""" diff --git a/html_manual/pysplits/c02.tex b/html_manual/pysplits/c02.tex new file mode 100644 index 0000000..5928484 --- /dev/null +++ b/html_manual/pysplits/c02.tex @@ -0,0 +1,174 @@ +# CHAPTER 1. Basics + +def fromFile(filename, userpw): + """ Load 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): + """ 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): + """ Load a file from a byte array and the user password (blank if none).""" + +def fromMemoryLazy(data, userpw): + """ Load a file from from a byte array and the user password (blank if + none), but lazily like fromFileLazy.""" + +def blankDocument(w, h, pages): + """ Create a blank document + with pages of the given width (in points), height (in points), and number + of pages.""" + +def blankDocumentPaper(papersize, pages): + """Create a blank document with pages of the given paper size, 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): + """Parse a page specification such as "1-3,8-end" to a range 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): + """Validate a page specification, returning True or False, so far as is + possible in the absence of the actual document.""" + +def stringOfPagespec(pdf, r): + """Build 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(): + """Create a range with no pages in.""" + +def pageRange(f, t): + """ Nuild a range from one page to another inclusive. + For example, pageRange(3,7) gives the range 3,4,5,6,7. """ + +def all(pdf): + """The range containing all the pages in a given document.""" + +def even(r): + """A range which contains just the even pages of another + range.""" + +def odd(r): + """A range which contains just the odd pages of another + range.""" + +def rangeUnion(a, b): + """The union of two ranges giving a range containing + the pages in range a and range b.""" + +def difference(a, b): + """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): + """Deduplicates a range, returning a new one.""" + +def rangeLength(r): + """The number of pages in a range.""" + +def rangeGet(r, n): + """Get the page number at position n in a range, where + +def rangeAdd(r, p): + """Add the page to a range, if it is not already + there.""" + +def isInRange(r, p): + """Returns True if the page p is in the range r, False otherwise.""" + +def pages(pdf): + """Return the number of pages in a PDF.""" + r = libc.pycpdf_pages(pdf.pdf) + checkerror() + return r + +def pagesFast(userpw, filename): + """Return the number of pages in a given + PDF, with given user password. It tries to do this as fast as + possible, without loading the whole file.""" + +def toFile(pdf, filename, linearize, make_id): + """Write the file to a given filename. If linearize is True, it will be + linearized, if supported by libcpdf. 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): + """Write the file to a given filename. If linearize is True, it will be + linearized, if supported by libcpdf. 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): + """Write a file to memory, returning the buffer as a byte array of type + bytes.""" + +def isEncrypted(pdf): + """Returns True if a documented is encrypted, False otherwise.""" + r = libc.pycpdf_isEncrypted(pdf.pdf) + checkerror() + return r + +def toFileEncrypted(pdf, method, permissions, ownerpw, userpw, linearize, + makeid, filename): + """Write the file to a given filename encrypted with the given encryption + method, permissions list, and owener and user passwords. If linearize is + True, it will be linearized, if supported by libcpdf. If make_id is True, + it will be given a new ID.""" + +def toFileEncryptedExt(pdf, method, permissions, ownerpw, userpw, linearize, + makeid, preserve_objstm, generate_objstm, + compress_objstm, filename): + """Write the file to a given filename encrypted with the given encryption + method, permissions list, and owener and user passwords. If linearize is + True, it will be linearized, if supported by libcpdf. 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 decryptPdf(pdf, userpw): + """Attempts to decrypt a PDF using the given user password. An exception is + raised in the event of a bad password.""" + +def decryptPdfOwner(pdf, ownerpw): + """Attempts to decrypt a PDF using the given owner password. An exception + is raised in the event of a bad password.""" + +def hasPermission(pdf, perm): + """Returns True if the given permission (restriction) is present.""" + +def encryptionKind(pdf): + """Return the encryption method currently in use on a document.""" diff --git a/html_manual/pysplits/c03.tex b/html_manual/pysplits/c03.tex new file mode 100644 index 0000000..f09ac0c --- /dev/null +++ b/html_manual/pysplits/c03.tex @@ -0,0 +1,20 @@ +# CHAPTER 2. Merging and Splitting + +def mergeSimple(pdfs): + """Given a list of PDFs, merges the documents into a new PDF, which is + returned.""" + +def merge(pdfs, retain_numbering, remove_duplicate_fonts): + """Merges the list of PDFs. If retain_numbering is True page labels are not + rewritten. If remove_duplicate_fonts is True, duplicate fonts are merged. + This is useful when the source documents for merging originate from the + same source.""" + +def mergeSame(pdfs, retain_numbering, remove_duplicate_fonts, ranges): + """The same as merge, except that it has an additional argument + - a list of page ranges. This is used to select the pages to pick from + each PDF. This avoids duplication of information when multiple discrete + parts of a single source PDF are included.""" + +def selectPages(pdf, r): + """ Returns a new document which just those pages in the page range.""" diff --git a/html_manual/pysplits/c04.tex b/html_manual/pysplits/c04.tex new file mode 100644 index 0000000..cc6ef0d --- /dev/null +++ b/html_manual/pysplits/c04.tex @@ -0,0 +1,70 @@ +# CHAPTER 3. Pages + +def scalePages(pdf, r, sx, sy): + """Scale the page dimensions and content of the given range of pages by + the given scale (sx, sy), about (0, 0). Other boxes (crop etc. are altered + as appropriate).""" + +def scaleToFit(pdf, r, w, h, scale_to_fit_scale): + """Scales the pages in the range to fit new page dimensions (w and h) + multiplied by scale_to_fit_scale (typically 1.0). Other boxes (crop etc.) + are altered as appropriate.""" + +def scaleToFitPaper(pdf, r, papersize, scale_to_fit_scale): + """Scales the given pages to fit the given page size, possibly multiplied + by scale_to_fit_scale (typically 1.0)""" + +def scaleContents(pdf, r, pos, scale): + """Scales the contents of the pages in the range about the point given by + the position, by the scale given.""" + +def shiftContents(pdf, r, dx, dy): + """Shift the content of the pages in the range by (dx, dy).""" + +def rotate(pdf, r, rotation): + """Change the viewing rotation of the pages in the range to an + absolute value. Appropriate rotations are 0, 90, 180, 270.""" + +def rotateBy(pdf, r, rotation): + """Change the viewing rotation of the pages in the range by a + given number of degrees. Appropriate values are 90, 180, 270.""" + +def rotateContents(pdf, r, rotation): + """Rotate the content about the centre + of the page by the given number of degrees, in a clockwise direction.""" + +def upright(pdf, r): + """Change the viewing rotation of the pages in the range, counter-rotating + the dimensions and content such that there is no visual change.""" + +def hFlip(pdf, r): + """Flip horizontally the pages in the range.""" + +def vFlip(pdf, r): + """Flip vertically the pages in the range.""" + +def crop(pdf, r, x, y, w, h): + """Crop a page to the box defined by (x, y, w, h), replacing any existing + crop box.""" + +def removeCrop(pdf, r): + """Remove any crop box from pages in the range.""" + +def removeTrim(pdf, r): + """Remove any trim box from pages in the range.""" + +def removeArt(pdf, r): + """Remove any art box from pages in the range.""" + +def removeBleed(pdf, r): + """Remove any bleed box from pages in the range.""" + +def trimMarks(pdf, r): + """Add trim marks to the given pages, if the trimbox exists.""" + +def showBoxes(pdf, r): + """Show the boxes on the given pages, for debug.""" + +def hardBox(pdf, r, boxname): + """Make a given box a 'hard box' i.e clip it explicitly. Boxname could be, + for example "/TrimBox".""" diff --git a/html_manual/pysplits/c05.tex b/html_manual/pysplits/c05.tex new file mode 100644 index 0000000..4c6deaf --- /dev/null +++ b/html_manual/pysplits/c05.tex @@ -0,0 +1,3 @@ +# CHAPTER 4. Encryption + +# Encryption covered under Chapter 1 in pycpdflib diff --git a/html_manual/pysplits/c06.tex b/html_manual/pysplits/c06.tex new file mode 100644 index 0000000..9e93d36 --- /dev/null +++ b/html_manual/pysplits/c06.tex @@ -0,0 +1,13 @@ +# CHAPTER 5. Compression + +def compress(pdf): + """Compress any uncompressed streams in the given PDF using the Flate + algorithm.""" + +def decompress(pdf): + """Decompress any streams in the given PDF, so long as the compression + method is supported.""" + +def squeezeInMemory(pdf): + """squeezeToMemory(pdf) squeezes a pdf in memory. Squeezing is a lossless + compression method which works be rearrangement of a PDFs internal diff --git a/html_manual/pysplits/c07.tex b/html_manual/pysplits/c07.tex new file mode 100644 index 0000000..0ebc00f --- /dev/null +++ b/html_manual/pysplits/c07.tex @@ -0,0 +1,9 @@ +# CHAPTER 6. Bookmarks + +def getBookmarks(pdf): + """Get the bookmarks for a PDF as a list of tuples of the form: + (level : int, page : int, text : string, openstatus : bool)""" + +def setBookmarks(pdf, marks): + """Set the bookmarks for a PDF as a list of tuples of the form: + (level : int, page : int, text : string, openstatus : bool)""" diff --git a/html_manual/pysplits/c08.tex b/html_manual/pysplits/c08.tex new file mode 100644 index 0000000..391d347 --- /dev/null +++ b/html_manual/pysplits/c08.tex @@ -0,0 +1,3 @@ +# CHAPTER 7. Presentations + +# Not included in the library version diff --git a/html_manual/pysplits/c09.tex b/html_manual/pysplits/c09.tex new file mode 100644 index 0000000..1edf5b1 --- /dev/null +++ b/html_manual/pysplits/c09.tex @@ -0,0 +1,110 @@ +# CHAPTER 8. Logos, Watermarks and Stamps + +def stampOn(pdf, pdf2, r): + """Stamps pdf on top of all the pages in pdf2 which are in the range. The + stamp is placed with its origin at the origin of the target document.""" + +def stampUnder(pdf, pdf2, r): + """Stamps pdf under under all the pages in pdf2 which are in the range. The + stamp is placed with its origin at the origin of the target document.""" + +def stampExtended(pdf, pdf2, r, isover, scale_stamp_to_fit, pos, + relative_to_cropbox): + """A stamping function with extra features: + + - isover True, pdf goes over pdf2, isover False, pdf goes under pdf2 + - scale_stamp_to_fit scales the stamp to fit the page + - pos gives the position to put the stamp + - relative_to_cropbox: if True, pos is relative to crop box not media box""" + +def combinePages(pdf, pdf2): + """Combines the PDFs page-by-page, putting each page of pdf2 over each page + of pdf.""" + +def addText(metrics, pdf, r, text, p, line_spacing, bates, font, size, red, + green, blue, underneath, relative_to_cropbox, outline, opacity, + justification, midline, topline, filename, line_width, + embed_fonts): + """Adding text. Adds text to a PDF, if the characters exist in the font. + + * metrics: If True, don't actually add text but collect metrics. + * pdf: Document + * r: Page Range + * text: The text to add + * p: Position to add text at + * line_spacing: Linespacing, 1.0 = normal + * bates: Starting Bates number + * font: Font + * size: Font size in points + * red: Red component of colour, 0.0 - 1.0 + * green: Green component of colour, 0.0 - 1.0 + * blue: Blue component of colour, 0.0 - 1.0 + * underneath: If True, text is added underneath rather than on top + * relative_to_cropbox: If True, position is relative to crop box not + media box + * outline: If True, text is outline rather than filled + * opacity: Opacity, 1.0 = opaque, 0.0 = wholly transparent + * justification: Justification + * midline: If True, position is relative to midline of text, not + baseline + * topline: If True, position is relative to topline of text, not + baseline + * filename: filename that this document was read from (optional) + * line_width: line width + * embed_fonts: embed fonts + + Special codes + + * %Page Page number in arabic notation (1, 2, 3...) + * %roman Page number in lower-case roman notation (i, ii, iii...) + * %Roman Page number in upper-case roman notation (I, II, III...) + * %EndPage Last page of document in arabic notation + * %Label The page label of the page + * %EndLabel The page label of the last page + * %filename The full file name of the input document + * %a Abbreviated weekday name (Sun, Mon etc.) + * %A Full weekday name (Sunday, Monday etc.) + * %b Abbreviated month name (Jan, Feb etc.) + * %B Full month name (January, February etc.) + * %d Day of the month (01-31) + * %e Day of the month (1-31) + * %H Hour in 24-hour clock (00-23) + * %I Hour in 12-hour clock (01-12) + * %j Day of the year (001-366) + * %m Month of the year (01-12) + * %M Minute of the hour (00-59) + * %p "a.m" or "p.m" + * %S Second of the minute (00-61) + * %T Same as %H:%M:%S + * %u Weekday (1-7, 1 = Monday) + * %w Weekday (0-6, 0 = Monday) + * %Y Year (0000-9999) + * %% The % character""" + +def addTextSimple(pdf, r, text, p, font, size): + """like addText, but with most parameters default + + * pdf = the document + * r = the range + * text = the text + * p = the position + * font = the font + * size = the font size""" + +def removeText(pdf, r): + """Remove any text added by libcpdf from the given pages.""" + r = range_of_list(r) + +def textWidth(font, string): + """Return the width of a given string in the given font in thousandths of a + point.""" + +def addContent(content, before, pdf, r): + """Add page content before (if True) or after (if False) the existing + content to pages in the given range in the given PDF. Warning: this a low + level function requiring understanding of the PDF format.""" + +def stampAsXObject(pdf, r, stamp_pdf): + """Stamps stamp_pdf onto the pages in the given range in pdf as a shared + Form XObject. The name of the newly-created XObject is returned, for use + with addContent. """ diff --git a/html_manual/pysplits/c10.tex b/html_manual/pysplits/c10.tex new file mode 100644 index 0000000..d9875b3 --- /dev/null +++ b/html_manual/pysplits/c10.tex @@ -0,0 +1,26 @@ +# CHAPTER 9. Mulitpage facilities + +def twoUp(pdf): + """Impose a document two up by retaining the existing page + size, scaling pages down.""" + +def twoUpStack(pdf): + """Impose a document two up by doubling the page size, + to fit two pages on one.""" + +def padBefore(pdf, r): + """Adds a blank page before each page in the given range.""" + +def padAfter(pdf, r): + """Adds a blank page after each page in the given range.""" + +def padEvery(pdf, n): + """Adds a blank page after every n pages.""" + +def padMultiple(pdf, n): + """Adds pages at the end to pad the file to a multiple of n pages in + length.""" + +def padMultipleBefore(pdf, n): + """Adds pages at the beginning to pad the file to a + multiple of n pages in length.""" diff --git a/html_manual/pysplits/c11.tex b/html_manual/pysplits/c11.tex new file mode 100644 index 0000000..bbd8b54 --- /dev/null +++ b/html_manual/pysplits/c11.tex @@ -0,0 +1,3 @@ +# CHAPTER 10. Annotations + +# Not in the library version. diff --git a/html_manual/pysplits/c12.tex b/html_manual/pysplits/c12.tex new file mode 100644 index 0000000..d7b9605 --- /dev/null +++ b/html_manual/pysplits/c12.tex @@ -0,0 +1,265 @@ +# CHAPTER 11. Document Information and Metadata + +def isLinearized(filename): + """Finds out if a document is linearized as quickly + as possible without loading it.""" + +def getVersion(pdf): + """Return the minor version number of a document.""" + +def getMajorVersion(pdf): + """Return the minor version number of a document.""" + +def getTitle(pdf): + """Return the title of a document.""" + +def getAuthor(pdf): + """Return the subject of a document.""" + +def getSubject(pdf): + """Return the subject of a document.""" + +def getKeywords(pdf): + """Return the keywords of a document.""" + +def getCreator(pdf): + """Return the creator of a document.""" + +def getProducer(pdf): + """Return the producer of a document.""" + +def getCreationDate(pdf): + """Return the creation date of a document.""" + +def getModificationDate(pdf): + """Return the modification date of a document.""" + +def getTitleXMP(pdf): + """Return the XMP title of a document.""" + +def getAuthorXMP(pdf): + """Return the XMP author of a document.""" + +def getSubjectXMP(pdf): + """Return the XMP subject of a document.""" + +def getKeywordsXMP(pdf): + """Return the XMP keywords of a document.""" + +def getCreatorXMP(pdf): + """Returs the XMP creator of a document.""" + +def getProducerXMP(pdf): + """Return the XMP producer of a document.""" + +def getCreationDateXMP(pdf): + """Return the XMP creation date of a document.""" + +def getModificationDateXMP(pdf): + """Return the XMP modification date of a document.""" + +def setTitle(pdf, s): + """Set the title of a document.""" + +def setAuthor(pdf, s): + """Set the author of a document.""" + +def setSubject(pdf, s): + """Set the subject of a document.""" + +def setKeywords(pdf, s): + """Set the keywords of a document.""" + +def setCreator(pdf, s): + """Set the creator of a document.""" + +def setProducer(pdf, s): + """Set the producer of a document.""" + +def setCreationDate(pdf, s): + """Set the creation date of a document.""" + +def setModificationDate(pdf, s): + """Set the modifcation date of a document.""" + +def setTitleXMP(pdf, s): + """Set the XMP title of a document.""" + +def setAuthorXMP(pdf, s): + """Set the XMP author of a document.""" + +def setSubjectXMP(pdf, s): + """Set the XMP subject of a document.""" + +def setKeywordsXMP(pdf, s): + """Set the XMP keywords of a document.""" + +def setCreatorXMP(pdf, s): + """Set the XMP creator of a document.""" + +def setProducerXMP(pdf, s): + """Set the XMP producer of a document.""" + +def setCreationDateXMP(pdf, s): + """Set the XMP creation date of a document.""" + +def setModificationDateXMP(pdf, s): + """Set the XMP modification date of a document.""" + +def getDateComponents(string): + """Return the components (year, month, day, hour, minute, second, + hour_offset, minute_offset) from a PDF date string. + + Month 1-31, day 1-31, hours (0-23), minutes (0-59), seconds + (0-59), hour_offset is the offset from UT in hours (-23 to 23); + minute_offset is the offset from UT in minutes (-59 to 59).""" + +def dateStringOfComponents(cs): + """Build a PDF date string a (year, month, day, hour, minute, second, + hour_offset, minute_offset) tuple. + + Dates: Month 1-31, day 1-31, hours (0-23), minutes (0-59), seconds + (0-59), hour_offset is the offset from UT in hours (-23 to 23); + minute_offset is the offset from UT in minutes (-59 to 59).""" + +def getPageRotation(pdf, pagenumber): + """Get the viewing rotation for a given page.""" + +def hasBox(pdf, pagenumber, boxname): + """Returns True, if the page has the given box. E.g "/CropBox" """ + +def getMediaBox(pdf, pagenumber): + """Get a mediabox box given the document, page range, min x, max x, + min y, max y in points. Only suceeds if such a box exists, as checked by + hasBox""" + +def getCropBox(pdf, pagenumber): + """Get a crop box given the document, page range, min x, max x, + min y, max y in points. Only suceeds if such a box exists, as checked by + hasBox""" + +def getTrimBox(pdf, pagenumber): + """Get a trim box given the document, page range, min x, max x, + min y, max y in points. Only suceeds if such a box exists, as checked by + hasBox""" + +def getArtBox(pdf, pagenumber): + """Get an art box given the document, page range, min x, max x, + min y, max y in points. Only suceeds if such a box exists, as checked by + hasBox""" + +def getBleedBox(pdf, pagenumber): + """Get a bleed box given the document, page range, min x, max x, + min y, max y in points. Only suceeds if such a box exists, as checked by + hasBox""" + +def setMediaBox(pdf, r, minx, maxx, miny, maxy): + """Set the media box given the document, page range, min x, max x, + min y, max y in points.""" + +def setCropBox(pdf, r, minx, maxx, miny, maxy): + """Set the crop box given the document, page range, min x, max x, + min y, max y in points.""" + +def setTrimBox(pdf, r, minx, maxx, miny, maxy): + """Set the trim box given the document, page range, min x, max x, + min y, max y in points.""" + +def setArtBox(pdf, r, minx, maxx, miny, maxy): + """Set the art box given the document, page range, min x, max x, + min y, max y in points.""" + +def setBleedBox(pdf, r, minx, maxx, miny, maxy): + """Set the bleed box given the document, page range, min x, max x, + min y, max y in points.""" + +def markTrapped(pdf): + """Mark a document as trapped.""" + +def markUntrapped(pdf): + """Mark a document as untrapped.""" + +def markTrappedXMP(pdf): + """Mark a document as trapped in XMP metadata.""" + +def markUntrappedXMP(pdf): + """Mark a document as untrapped in XMP metadata.""" + +def setPageLayout(pdf, layout): + """Set the page layout for a document.""" + +def setPageMode(pdf, mode): + """Set the page mode for a document.""" + +def hideToolbar(pdf, flag): + """Sets the hide toolbar flag.""" + +def hideMenubar(pdf, flag): + """Set the hide menu bar flag.""" + +def hideWindowUi(pdf, flag): + """Set the hide window UI flag.""" + +def fitWindow(pdf, flag): + """Set the fit window flag.""" + +def centerWindow(pdf, flag): + """Set the center window flag.""" + +def displayDocTitle(pdf, flag): + """Set the display document title flag.""" + +def openAtPage(pdf, fitflag, pagenumber): + """Set the PDF to open, possibly with zoom-to-fit, at the given page + number. """ + +def setMetadataFromFile(pdf, filename): + """Set the XMP metadata of a document, given a file name.""" + +def setMetadataFromByteArray(pdf, data): + """Set the XMP metadata from an array of bytes.""" + +def getMetadata(pdf): + """Return the XMP metadata as a byte array of type bytes""" + +def removeMetadata(pdf): + """Remove the XMP metadata from a document""" + +def createMetadata(pdf): + """Builds fresh XMP metadata as good as possible from existing + metadata in the document.""" + +def setMetadataDate(pdf, date): + """Set the metadata date for a PDF. The date is given in PDF date format -- + cpdf will convert it to XMP format. The date 'now' means now.""" + +def getPageLabels(pdf): + """Get page labels as a list of tuples (style, prefix, offset, startvalue) + + For example, a document might have five pages of introduction with roman + numerals, followed by the rest of the pages in decimal arabic, numbered + from one. First label: + + * labelstyle = LowercaseRoman + * labelprefix = "" + * startpage = 1 + * startvalue = 1 + + Second label: + + * labelstyle = DecimalArabic + * labelprefix = "" + * startpage = 6 + * startvalue = 1 """ + +def addPageLabels(pdf, label, progress): + """Add one group of page labels from a tuple (style, prefix, offset, range). + + The prefix is prefix text for each label. The range is the page range the + labels apply to. Offset can be used to shift the numbering up or down.""" + +def removePageLabels(pdf): + """Removes all page labels from the document.""" + +def getPageLabelStringForPage(pdf, pagenumber): + """Calculate the full label string for a given page, and return it.""" diff --git a/html_manual/pysplits/c13.tex b/html_manual/pysplits/c13.tex new file mode 100644 index 0000000..b3cb864 --- /dev/null +++ b/html_manual/pysplits/c13.tex @@ -0,0 +1,23 @@ +# CHAPTER 12. File Attachments + +def attachFile(filename, pdf): + """Attach a file to the pdf. It is attached at document level.""" + +def attachFileToPage(filename, pdf, pagenumber): + """Attach a file, given its file name, pdf, and the page number to which + it should be attached.""" + +def attachFileFromMemory(data, filename, pdf): + """Attach a file from a byte array. It is attached at document level.""" + +def attachFileToPageFromMemory(data, filename, pdf, pagenumber): + """Attach a file to a given pag from a byte array. It is attached at + document level.""" + +def removeAttachedFiles(pdf): + """Remove all page- and document-level attachments from a document.""" + +def getAttachments(pdf): + """List information about attachements. Returns a list of tuples + (name, page number, byte array of data). Page 0 = document-level + attachment.""" diff --git a/html_manual/pysplits/c14.tex b/html_manual/pysplits/c14.tex new file mode 100644 index 0000000..ea5b752 --- /dev/null +++ b/html_manual/pysplits/c14.tex @@ -0,0 +1,6 @@ +# CHAPTER 13. Images + +def getImageResolution(pdf, min_required_resolution): + """Return a list of all uses of images in the PDF which do not meet the + minimum required resolution in dpi as tuples of: + (pagenumber, name, x pixels, y pixels, x resolution, y resolution)""" diff --git a/html_manual/pysplits/c15.tex b/html_manual/pysplits/c15.tex new file mode 100644 index 0000000..d164219 --- /dev/null +++ b/html_manual/pysplits/c15.tex @@ -0,0 +1,12 @@ +# CHAPTER 14. Fonts + +def getFontInfo(pdf): + """Get a list of (pagenumber, fontname, fonttype, fontencoding) tuples, + showing each font used on each page.""" + +def removeFonts(pdf): + """Remove all font data from a file.""" + +def copyFont(pdf, pdf2, r, pagenumber, fontname): + """Copy the given font from the given page in the pdf PDF to every page in + the pdf2 PDF. The new font is stored under its font name.""" diff --git a/html_manual/pysplits/c16.tex b/html_manual/pysplits/c16.tex new file mode 100644 index 0000000..3918d33 --- /dev/null +++ b/html_manual/pysplits/c16.tex @@ -0,0 +1,6 @@ +# CHAPTER 15. PDF and JSON + +def outputJSON(filename, parse_content, no_stream_data, pdf): + """Output a PDF in JSON format to the given filename. If parse_content is + True, page content is parsed. If no_stream_data is True, all stream data is + suppressed entirely.""" diff --git a/html_manual/pysplits/c17.tex b/html_manual/pysplits/c17.tex new file mode 100644 index 0000000..db76717 --- /dev/null +++ b/html_manual/pysplits/c17.tex @@ -0,0 +1,16 @@ +# CHAPTER 16. Optional Content Groups + +def getOCGList(pdf): + """Return a list of Optional Content Groups in the given pdf as strings.""" + +def OCGRename(pdf, n_from, n_to): + """Rename an optional content group.""" + +def OCGOrderAll(pdf): + """Ensure that every optional content group appears in the OCG order list.""" + +def OCGCoalesce(pdf): + """Coalesce optional content groups. For example, if we merge or stamp two + files both with an OCG called "Layer 1", we will have two different + optional content groups. This function will merge the two into a single + optional content group.""" diff --git a/html_manual/pysplits/c18.tex b/html_manual/pysplits/c18.tex new file mode 100644 index 0000000..08219b0 --- /dev/null +++ b/html_manual/pysplits/c18.tex @@ -0,0 +1,41 @@ +# CHAPTER 17. Miscellaneous + +def draft(pdf, r, boxes): + """Remove images on the given pages, replacing + them with crossed boxes if 'boxes' is True.""" + +def removeAllText(pdf, r): + """Remove all text from the given pages in a document.""" + +def blackText(pdf, r): + """Blacken all text on the given pages.""" + +def blackLines(pdf, r): + """Blacken all lines on the given pages.""" + +def blackFills(pdf, r): + """Blacken all fills on the given pages.""" + +def thinLines(pdf, r, linewidth): + """Thicken every line less than + linewidth to linewidth. Thickness given in points.""" + +def copyId(pdf, pdf2): + """Copy the /ID from one pdf to pdf2.""" + +def removeId(pdf): + """Remove a document's /ID""" + +def setVersion(pdf, version): + """Set the minor version number of a document.""" + +def setFullVersion(pdf, major, minor): + """Set the major and minor version number of + a document.""" + +def removeDictEntry(pdf, key): + """Remove any dictionary entry with the given + key anywhere in the document.""" + +def removeClipping(pdf, r): + """Remove all clipping from pages in the given range"""