diff --git a/html_manual/pysplits/c00.tex b/html_manual/pysplits/c00.tex
index 78fbb86..94f191e 100644
--- a/html_manual/pysplits/c00.tex
+++ b/html_manual/pysplits/c00.tex
@@ -9,7 +9,7 @@ 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.
+Text arguments and results are in UTF8. Data is of type bytes.
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
index c3a14ea..fb3f372 100644
--- a/html_manual/pysplits/c01.tex
+++ b/html_manual/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/html_manual/pysplits/c02.tex b/html_manual/pysplits/c02.tex
index 5928484..49c75a5 100644
--- a/html_manual/pysplits/c02.tex
+++ b/html_manual/pysplits/c02.tex
@@ -20,15 +20,6 @@ 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)."""
@@ -48,9 +39,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 +86,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 +97,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 +118,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/html_manual/pysplits/c07.tex b/html_manual/pysplits/c07.tex
index 0ebc00f..6c662eb 100644
--- a/html_manual/pysplits/c07.tex
+++ b/html_manual/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/html_manual/pysplits/c09.tex b/html_manual/pysplits/c09.tex
index 1edf5b1..82c44a0 100644
--- a/html_manual/pysplits/c09.tex
+++ b/html_manual/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/html_manual/pysplits/c10.tex b/html_manual/pysplits/c10.tex
index d9875b3..48ddcaa 100644
--- a/html_manual/pysplits/c10.tex
+++ b/html_manual/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/html_manual/pysplits/c11.tex b/html_manual/pysplits/c11.tex
index bbd8b54..ec2d920 100644
--- a/html_manual/pysplits/c11.tex
+++ b/html_manual/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/html_manual/pysplits/c12.tex b/html_manual/pysplits/c12.tex
index d7b9605..85a8f63 100644
--- a/html_manual/pysplits/c12.tex
+++ b/html_manual/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/html_manual/pysplits/c16.tex b/html_manual/pysplits/c16.tex
index 3918d33..929d02c 100644
--- a/html_manual/pysplits/c16.tex
+++ b/html_manual/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/html_manual/pysplits/c18.tex b/html_manual/pysplits/c18.tex
index 08219b0..8c197b3 100644
--- a/html_manual/pysplits/c18.tex
+++ b/html_manual/pysplits/c18.tex
@@ -1,41 +1,20 @@
-# CHAPTER 17. Miscellaneous
+# CHAPTER 17. Creating New PDFs
-def draft(pdf, r, boxes):
- """Remove images on the given pages, replacing
- them with crossed boxes if 'boxes' is True."""
+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 removeAllText(pdf, r):
- """Remove all text from the given pages in a document."""
+def blankDocumentPaper(papersize, pages):
+ """Create a blank document with pages of the given paper size, and number
+ of pages. """
-def blackText(pdf, r):
- """Blacken all text on the given 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 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"""
+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."""
diff --git a/html_manual/pysplits/c19.tex b/html_manual/pysplits/c19.tex
new file mode 100644
index 0000000..f3839b2
--- /dev/null
+++ b/html_manual/pysplits/c19.tex
@@ -0,0 +1,57 @@
+# CHAPTER 18. 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 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"""
diff --git a/html_manual/splits/c02.tex b/html_manual/splits/c02.tex
index 037859b..edf329c 100644
--- a/html_manual/splits/c02.tex
+++ b/html_manual/splits/c02.tex
@@ -29,13 +29,6 @@ int cpdf_fromMemory(void *, int, const char[]);
*/
int cpdf_fromMemoryLazy(void *, int, const char[]);
-/*
- * cpdf_blankDocument(width, height, num_pages) creates a blank document with
- * pages of the given width (in points), height (in points), and number of
- * pages.
- */
-int cpdf_blankDocument(double, double, int);
-
/* Standard page sizes. */
enum cpdf_papersize {
cpdf_a0portrait, /* A0 portrait */
@@ -56,12 +49,6 @@ enum cpdf_papersize {
cpdf_uslegallandscape /* US Legal landscape */
};
-/*
- * cpdf_blankDocumentPaper(papersize, num_pages) makes a blank document given
- * a page size and number of pages.
- */
-int cpdf_blankDocumentPaper(enum cpdf_papersize, int);
-
/* Remove a PDF from memory, given its number. */
void cpdf_deletePdf(int);
@@ -233,7 +220,7 @@ int cpdf_pagesFast(const char[], const char[]);
void cpdf_toFile(int, const char[], int, int);
/*
- * cpdf_toFile (pdf, filename, linearize, make_id, preserve_objstm,
+ * cpdf_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,
@@ -245,9 +232,8 @@ void cpdf_toFile(int, const char[], int, int);
void cpdf_toFileExt(int, const char[], int, int, int, int, int);
/*
- * Given a buffer of the correct size, cpdf_toFileMemory (pdf, linearize,
- * make_id, &length) writes it and returns the buffer. The buffer length is
- * filled in &length.
+ * cpdf_toFileMemory (pdf, linearize, make_id, &length) writes a PDF file it
+ * and returns the buffer. The buffer length is filled in &length.
*/
void *cpdf_toMemory(int, int, int, int *);
diff --git a/html_manual/splits/c04.tex b/html_manual/splits/c04.tex
index 407db9f..4e48d87 100644
--- a/html_manual/splits/c04.tex
+++ b/html_manual/splits/c04.tex
@@ -8,7 +8,7 @@
void cpdf_scalePages(int, int, double, double);
/*
- * cpdf_scaleToFit(pdf, range, width height, scale) scales the content to fit
+ * cpdf_scaleToFit(pdf, range, width, height, scale) scales the content to fit
* new page dimensions (width x height) multiplied by scale (typically 1.0).
* Other boxed (crop etc. are altered as appropriate)
*/
diff --git a/html_manual/splits/c06.tex b/html_manual/splits/c06.tex
index 8790911..e871de5 100644
--- a/html_manual/splits/c06.tex
+++ b/html_manual/splits/c06.tex
@@ -7,7 +7,7 @@
void cpdf_compress(int);
/*
- * cpdf_uncompress(pdf) uncompresses any streams in the given PDF, so long as
+ * cpdf_decompress(pdf) decompresses any streams in the given PDF, so long as
* the compression method is supported.
*/
void cpdf_decompress(int);
diff --git a/html_manual/splits/c07.tex b/html_manual/splits/c07.tex
index a21159e..8ab01a7 100644
--- a/html_manual/splits/c07.tex
+++ b/html_manual/splits/c07.tex
@@ -68,3 +68,16 @@ void cpdf_setBookmarkText(int, const char[]);
*/
void cpdf_endSetBookmarkInfo(int);
+/* cpdf_getBookmarksJSON(pdf, length) returns the bookmark data and sets the
+ * length. */
+void *cpdf_getBookmarksJSON(int, int *);
+
+/* cpdf_setBookmarksJSON(pdf, data, datalength) sets the bookmarks from JSON
+ * bookmark data. */
+void cpdf_setBookmarksJSON(int, void *, int);
+
+/* cpdf_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. */
+void cpdf_tableOfContents(int, int, double, const char[], int);
+
diff --git a/html_manual/splits/c10.tex b/html_manual/splits/c10.tex
index 4daa0b9..1db9f30 100644
--- a/html_manual/splits/c10.tex
+++ b/html_manual/splits/c10.tex
@@ -1,5 +1,14 @@
/* CHAPTER 9. Multipage facilities */
+/* cpdf_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. */
+void cpdf_impose(int, double, double, int, int, int, int, int, double, double,
+ double);
+
/*
* Impose a document two up. cpdf_twoUp does so by retaining the existing
* page size, scaling pages down. cpdf_twoUpStack does so by doubling the
diff --git a/html_manual/splits/c11.tex b/html_manual/splits/c11.tex
index 831f9f8..365551b 100644
--- a/html_manual/splits/c11.tex
+++ b/html_manual/splits/c11.tex
@@ -1,4 +1,6 @@
/* CHAPTER 10. Annotations */
-/* Not in the library version */
+/* Return the annotations from a PDF in JSON format, returning also its length.
+ */
+void *cpdf_annotationsJSON(int, int *);
diff --git a/html_manual/splits/c12.tex b/html_manual/splits/c12.tex
index 8126a22..37013f8 100644
--- a/html_manual/splits/c12.tex
+++ b/html_manual/splits/c12.tex
@@ -147,7 +147,7 @@ int cpdf_getPageRotation(int, int);
int cpdf_hasBox(int, int, const char[]);
/*
- * These functions get a box given the document, page range, min x, max x,
+ * These functions get a box given the document, page number, min x, max x,
* min y, max y in points. Only succeeds if such a box exists, as checked by
* cpdf_hasBox.
*/
@@ -292,7 +292,21 @@ char *cpdf_getPageLabelStringForPage(int, int);
/*
* Get page label data. Call cpdf_startGetPageLabels to find out how many
* there are, then use these serial numbers to get the style, prefix, offset
- * and range. Call cpdf_endGetPageLabels to clean up.
+ * and start value (note not a range). Call cpdf_endGetPageLabels to clean up.
+ *
+ * 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:
+ *
+ * labelstyle = LowercaseRoman
+ * labelprefix = ""
+ * startpage = 1
+ * startvalue = 1
+ *
+ * labelstyle = DecimalArabic
+ * labelprefix = ""
+ * startpage = 6
+ * startvalue = 1
*/
int cpdf_startGetPageLabels(int);
enum cpdf_pageLabelStyle cpdf_getPageLabelStyle(int);
diff --git a/html_manual/splits/c15.tex b/html_manual/splits/c15.tex
index c54383d..eacffc4 100644
--- a/html_manual/splits/c15.tex
+++ b/html_manual/splits/c15.tex
@@ -21,7 +21,7 @@ void cpdf_removeFonts(int);
/*
* cpdf_copyFont(from, to, range, pagenumber, fontname) copies the given font
* from the given page in the 'from' PDF to every page in the 'to' PDF. The
- * new font is stored under it's font name.
+ * new font is stored under its font name.
*/
void cpdf_copyFont(int, int, int, int, const char[]);
diff --git a/html_manual/splits/c16.tex b/html_manual/splits/c16.tex
index 747ad8e..9fb3550 100644
--- a/html_manual/splits/c16.tex
+++ b/html_manual/splits/c16.tex
@@ -4,5 +4,15 @@
* 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.
* */
-void cpdf_outputJSON(const char[], int, int, int);
+void cpdf_outputJSON(const char[], int, int, int, int);
+
+/* cpdf_outputJSONMemory(parse_content, no_stream_data, pdf, &length) is like
+ * outputJSON, but it write to a buffer in memory. The length is filled in. */
+void *cpdf_outputJSONMemory(int, int, int, int, int *);
+
+/* Load a PDF from a JSON file given its filename */
+int cpdf_fromJSON(const char[]);
+
+/* Load a PDF from a JSON file in memory, given the buffer and its length */
+int cpdf_fromJSONMemory(void *, int);
diff --git a/html_manual/splits/c18.tex b/html_manual/splits/c18.tex
index e5e599d..12673af 100644
--- a/html_manual/splits/c18.tex
+++ b/html_manual/splits/c18.tex
@@ -1,54 +1,23 @@
-/* CHAPTER 17. Miscellaneous */
+/* CHAPTER 17. Creating New PDFs */
+
+/* cpdf_blankDocument(width, height, num_pages) creates a blank document with
+ * pages of the given width (in points), height (in points), and number of
+ * pages.
+ */
+int cpdf_blankDocument(double, double, int);
/*
- * cpdf_draft(pdf, range, boxes) removes images on the given pages, replacing
- * them with crossed boxes if 'boxes' is true
+ * cpdf_blankDocumentPaper(papersize, num_pages) makes a blank document given
+ * a page size and number of pages.
*/
-void cpdf_draft(int, int, int);
+int cpdf_blankDocumentPaper(enum cpdf_papersize, int);
-/*
- * cpdf_removeAllText(pdf, range) removes all text from the given pages in a
- * given document.
- */
-void cpdf_removeAllText(int, int);
+/* cpdf_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. */
+int cpdf_textToPDF(double, double, int, double, const char[]);
-/* cpdf_blackText(pdf, range) blackens all text on the given pages. */
-void cpdf_blackText(int, int);
-
-/* cpdf_blackLines(pdf, range) blackens all lines on the given pages. */
-void cpdf_blackLines(int, int);
-
-/* cpdf_blackFills(pdf, range) blackens all fills on the given pages. */
-void cpdf_blackFills(int, int);
-
-/*
- * cpdf_thinLines(pdf, range, min_thickness) thickens every line less than
- * min_thickness to min_thickness. Thickness given in points.
- */
-void cpdf_thinLines(int, int, double);
-
-/* cpdf_copyId(from, to) copies the /ID from one document to another. */
-void cpdf_copyId(int, int);
-
-/* cpdf_removeId(pdf) removes a document's /ID. */
-void cpdf_removeId(int);
-
-/* cpdf_setVersion(pdf, version) sets the minor version number of a document. */
-void cpdf_setVersion(int, int);
-
-/* cpdf_setFullVersion(pdf, major_version, minor_version) sets the full version
- * number of a document. */
-void cpdf_setFullVersion(int, int, int);
-
-/*
- * cpdf_removeDictEntry(pdf, key) removes any dictionary entry with the given
- * key anywhere in the document.
- */
-void cpdf_removeDictEntry(int, const char[]);
-
-/*
- * cpdf_removeClipping(pdf, range) removes all clipping from pages in the
- * given range.
- */
-void cpdf_removeClipping(int, int);
+/* cpdf_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. */
+int cpdf_textToPDFPaper(int, int, double, const char[]);
diff --git a/html_manual/splits/c19.tex b/html_manual/splits/c19.tex
index 41356ab..ac246d2 100644
--- a/html_manual/splits/c19.tex
+++ b/html_manual/splits/c19.tex
@@ -1,3 +1,74 @@
+/* CHAPTER 18. Miscellaneous */
+
+/*
+ * cpdf_draft(pdf, range, boxes) removes images on the given pages, replacing
+ * them with crossed boxes if 'boxes' is true
+ */
+void cpdf_draft(int, int, int);
+
+/*
+ * cpdf_removeAllText(pdf, range) removes all text from the given pages in a
+ * given document.
+ */
+void cpdf_removeAllText(int, int);
+
+/* cpdf_blackText(pdf, range) blackens all text on the given pages. */
+void cpdf_blackText(int, int);
+
+/* cpdf_blackLines(pdf, range) blackens all lines on the given pages. */
+void cpdf_blackLines(int, int);
+
+/* cpdf_blackFills(pdf, range) blackens all fills on the given pages. */
+void cpdf_blackFills(int, int);
+
+/*
+ * cpdf_thinLines(pdf, range, min_thickness) thickens every line less than
+ * min_thickness to min_thickness. Thickness given in points.
+ */
+void cpdf_thinLines(int, int, double);
+
+/* cpdf_copyId(from, to) copies the /ID from one document to another. */
+void cpdf_copyId(int, int);
+
+/* cpdf_removeId(pdf) removes a document's /ID. */
+void cpdf_removeId(int);
+
+/* cpdf_setVersion(pdf, version) sets the minor version number of a document. */
+void cpdf_setVersion(int, int);
+
+/* cpdf_setFullVersion(pdf, major_version, minor_version) sets the full version
+ * number of a document. */
+void cpdf_setFullVersion(int, int, int);
+
+/*
+ * cpdf_removeDictEntry(pdf, key) removes any dictionary entry with the given
+ * key anywhere in the document.
+ */
+void cpdf_removeDictEntry(int, const char[]);
+
+/* cpdf_removeDictEntrySearch(pdf, key, seachterm) removes any dictionary entry
+ * with the given key whose value matches the given search term. */
+void cpdf_removeDictEntrySearch(int, const char[], const char[]);
+
+/* cpdf_replaceDictEntry(pdf, key, newvalue) replaces the value associated with
+ * the given key */
+void cpdf_replaceDictEntry(int, const char[], const char[]);
+
+/* cpdf_replaceDictEntry(pdf, key, newvalue, searchterm) replaces the value
+ * associated with the given key if the existing value matches the search term.
+ */
+void cpdf_replaceDictEntrySearch(int, const char[], const char[], const char[]);
+
+/* cpdf_getDictEntries(pdf, key, length) returns a JSON array containing any
+ * and all values associated with the given key, and fills in its length. */
+void *cpdf_getDictEntries(int, const char[], int *retlen);
+
+/*
+ * cpdf_removeClipping(pdf, range) removes all clipping from pages in the
+ * given range.
+ */
+void cpdf_removeClipping(int, int);
+
/* CHAPTER X. Internal or undocumented. */
/* Internal. Used for demo versions of the commercial version of cpdflib. */