From 0f5236632810d35918c6ba7f45cfe29aa575068b Mon Sep 17 00:00:00 2001 From: John Whitington Date: Sun, 23 Jan 2022 13:06:53 +0000 Subject: [PATCH] update python splits --- pysplits/c01.tex | 4 +--- pysplits/c02.tex | 24 ++++++++++++++---------- pysplits/c07.tex | 11 +++++++++++ pysplits/c09.tex | 1 - pysplits/c10.tex | 10 +++++++++- pysplits/c11.tex | 3 ++- pysplits/c12.tex | 8 ++++---- pysplits/c16.tex | 17 ++++++++++++++--- pysplits/c18.tex | 16 ++++++++++++++++ 9 files changed, 71 insertions(+), 23 deletions(-) diff --git a/pysplits/c01.tex b/pysplits/c01.tex index c3a14ea..fb3f372 100644 --- a/pysplits/c01.tex +++ b/pysplits/c01.tex @@ -79,9 +79,7 @@ useNone useOutlines useThumbs useOC useAttachments Page label styles: decimalArabic uppercaseRoman lowercaseRoman uppercaseLetters lowercaseLetters - - -# CHAPTER 0. Preliminaries +""" class Pdf: """The type of PDF documents.""" diff --git a/pysplits/c02.tex b/pysplits/c02.tex index 5928484..e9ec64d 100644 --- a/pysplits/c02.tex +++ b/pysplits/c02.tex @@ -25,6 +25,16 @@ def blankDocument(w, h, pages): with pages of the given width (in points), height (in points), and number of pages.""" +def textToPDF(w, h, font, fontsize, filename): + """textToPDF(w, h, font, fontsize, filename) typesets a UTF8 text file + ragged right on a page of size w * h in points in the given font and font + size.""" + +def textToPDFPaper(papersize, font, fontsize, filename): + """textToPDF(papersize font, fontsize, filename) typesets a UTF8 text file + ragged right on a page of the given size in the given font and font + size.""" + def blankDocumentPaper(papersize, pages): """Create a blank document with pages of the given paper size, and number of pages. """ @@ -48,9 +58,9 @@ 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).""" + """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 @@ -95,6 +105,7 @@ def rangeLength(r): def rangeGet(r, n): """Get the page number at position n in a range, where + n runs from 0 to rangeLength - 1.""" def rangeAdd(r, p): """Add the page to a range, if it is not already @@ -105,9 +116,6 @@ def isInRange(r, p): 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 @@ -129,16 +137,12 @@ def toFileExt(pdf, filename, linearize, make_id, preserve_objstm, 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): diff --git a/pysplits/c07.tex b/pysplits/c07.tex index 0ebc00f..6c662eb 100644 --- a/pysplits/c07.tex +++ b/pysplits/c07.tex @@ -7,3 +7,14 @@ def getBookmarks(pdf): 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)""" + +def getBookmarksJSON(pdf): + """Get the bookmarks in JSON format.""" + +def setBookmarksJSON(pdf, data): + """setBookmarksJSON(pdf, data) sets the bookmarks from JSON bookmark data.""" + +def tableOfContents(pdf, font, fontsize, title, bookmark): + """tableOfContents(pdf, font, fontsize, title, bookmark) typesets a table + of contents from existing bookmarks and prepends it to the document. If + bookmark is set, the table of contents gets its own bookmark.""" diff --git a/pysplits/c09.tex b/pysplits/c09.tex index 1edf5b1..82c44a0 100644 --- a/pysplits/c09.tex +++ b/pysplits/c09.tex @@ -93,7 +93,6 @@ def addTextSimple(pdf, r, text, p, 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 diff --git a/pysplits/c10.tex b/pysplits/c10.tex index d9875b3..48ddcaa 100644 --- a/pysplits/c10.tex +++ b/pysplits/c10.tex @@ -1,4 +1,4 @@ -# CHAPTER 9. Mulitpage facilities +# CHAPTER 9. Multipage facilities def twoUp(pdf): """Impose a document two up by retaining the existing page @@ -8,6 +8,14 @@ def twoUpStack(pdf): """Impose a document two up by doubling the page size, to fit two pages on one.""" +def impose(pdf, x, y, fit, columns, rtl, btt, center, margin, spacing, linewidth): + """impose(pdf, x, y, fit, columns, rtl, btt, center, margin, spacing, + linewidth) imposes a PDF. There are two modes: imposing x * y, or imposing + to fit a page of size x * y. This is controlled by fit. Columns imposes by + columns rather than rows. rtl is right-to-left, btt bottom-to-top. Center + is unused for now. Margin is the margin around the output, spacing the + spacing between imposed inputs.""" + def padBefore(pdf, r): """Adds a blank page before each page in the given range.""" diff --git a/pysplits/c11.tex b/pysplits/c11.tex index bbd8b54..ec2d920 100644 --- a/pysplits/c11.tex +++ b/pysplits/c11.tex @@ -1,3 +1,4 @@ # CHAPTER 10. Annotations -# Not in the library version. +def annotationsJSON(pdf): + """Get the annotations in JSON format.""" diff --git a/pysplits/c12.tex b/pysplits/c12.tex index d7b9605..85a8f63 100644 --- a/pysplits/c12.tex +++ b/pysplits/c12.tex @@ -47,7 +47,7 @@ def getKeywordsXMP(pdf): """Return the XMP keywords of a document.""" def getCreatorXMP(pdf): - """Returs the XMP creator of a document.""" + """Return the XMP creator of a document.""" def getProducerXMP(pdf): """Return the XMP producer of a document.""" @@ -117,7 +117,7 @@ def getDateComponents(string): 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).""" @@ -210,8 +210,8 @@ 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. """ + """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.""" diff --git a/pysplits/c16.tex b/pysplits/c16.tex index 3918d33..929d02c 100644 --- a/pysplits/c16.tex +++ b/pysplits/c16.tex @@ -1,6 +1,17 @@ # CHAPTER 15. PDF and JSON -def outputJSON(filename, parse_content, no_stream_data, pdf): +def outputJSON(filename, parse_content, no_stream_data, decompress_streams, 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.""" + True, page content is parsed. If decompress_streams is True, streams are + decompressed. If no_stream_data is True, all stream data is suppressed + entirely.""" + +def outputJSONMemory(pdf, parse_content, no_stream_data, decompress_streams): + """outputJSONMemory(pdf, parse_content, no_stream_data, decompress_stream) + is like outputJSON, but it write to a buffer in memory).""" + +def fromJSON(filename): + """Load a PDF from a JSON file given its filename.""" + +def fromJSONMemory(data): + """ Load a PDF from JSON data in memory.""" diff --git a/pysplits/c18.tex b/pysplits/c18.tex index 08219b0..9ddcc95 100644 --- a/pysplits/c18.tex +++ b/pysplits/c18.tex @@ -37,5 +37,21 @@ def removeDictEntry(pdf, key): """Remove any dictionary entry with the given key anywhere in the document.""" +def removeDictEntrySearch(pdf, key, searchterm): + """Remove any dictionary entry with the given + key anywhere in the document, if its value matches the given search term.""" + +def replaceDictEntry(pdf, key, newvalue): + """Replace any dictionary entry with the given + key anywhere in the document using the new value given.""" + +def replaceDictEntrySearch(pdf, key, newvalue, searchterm): + """Replace any dictionary entry with the given key anywhere in the + document, if its value matches the given search term, with the new value + given.""" + +def getDictEntries(pdf, key): + """Return JSON of any dict entries with the given key.""" + def removeClipping(pdf, r): """Remove all clipping from pages in the given range"""