Implementing the Frontend
Once the PIDDLE API was stable, it was fairly straightforward to
implement a PDFCanvas object to provide a simple
API. Let’s take a quick look at some of the methods of
the
PDFCanvas class and how they hook up with the
backend:
def __init__(self, filename):
Canvas.__init__(self)
self.filename = filename
self.code = [] # list of strings to join later
self.doc = pdfgen.PDFDocument()
self.pageNumber = 1 # keep a count
# various settings omittedWhen it starts up, the PDFCanvas instance creates
a PDFDocument instance. This is the class that
manages the overall document structure. It also creates an empty
list, self.code, to hold strings of page-marking
operators. The various drawing methods add the right operators to the
list in the same way the PostScript snippets did earlier. If you
compare the methods and output with the PostScript
PSCanvas, it’s easy to see the
correspondence.
When you ask for a new page with the
showPage()
method, this happens:
def showPage(self):
page = pdfgen.PDFPage()
stream = string.join([self.preamble] + self.code, '\n')
#print stream
page.setStream(stream)
self.doc.addPage(page)
self.pageNumber = self.pageNumber + 1
self.code = [] # ready for more...First, create a PDFgen
object called
PDFPage
, which is responsible for generating the output later. Then make a big string of page-marking operators by joining a standard preamble (which does some work to set up coordinate systems, default fonts, and so forth) and the list of accumulated ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access