docs/tools/rltemplate.py
author rgbecker
Wed, 25 Oct 2000 08:57:46 +0000
changeset 494 54257447cfe9
parent 355 3a8dd5f93921
child 498 7e689d773a49
permissions -rw-r--r--
Changed to indirect copyright
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
494
54257447cfe9 Changed to indirect copyright
rgbecker
parents: 355
diff changeset
     1
#copyright ReportLab Inc. 2000
54257447cfe9 Changed to indirect copyright
rgbecker
parents: 355
diff changeset
     2
#see license.txt for license details
54257447cfe9 Changed to indirect copyright
rgbecker
parents: 355
diff changeset
     3
#history http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/docs/tools/rltemplate.py?cvsroot=reportlab
54257447cfe9 Changed to indirect copyright
rgbecker
parents: 355
diff changeset
     4
#$Header: /tmp/reportlab/docs/tools/rltemplate.py,v 1.7 2000/10/25 08:57:45 rgbecker Exp $
278
1a14ccd29e70 Added a separate rltemplate.py file to contain
andy_robinson
parents:
diff changeset
     5
# doc template for RL manuals.  Currently YAML is hard-coded
1a14ccd29e70 Added a separate rltemplate.py file to contain
andy_robinson
parents:
diff changeset
     6
#to use this, which is wrong.
1a14ccd29e70 Added a separate rltemplate.py file to contain
andy_robinson
parents:
diff changeset
     7
1a14ccd29e70 Added a separate rltemplate.py file to contain
andy_robinson
parents:
diff changeset
     8
1a14ccd29e70 Added a separate rltemplate.py file to contain
andy_robinson
parents:
diff changeset
     9
from reportlab.platypus import PageTemplate, \
295
1f00bd112cb0 remove UserDocTemplate, but add Andy's hook methods
rgbecker
parents: 285
diff changeset
    10
     BaseDocTemplate, Frame, Paragraph
278
1a14ccd29e70 Added a separate rltemplate.py file to contain
andy_robinson
parents:
diff changeset
    11
from reportlab.lib.units import inch, cm
344
dd6e41c2b0ed Paragraphs chapter pretty much complete. Fancy cover.
andy_robinson
parents: 295
diff changeset
    12
from reportlab.lib.pagesizes import DEFAULT_PAGE_SIZE
278
1a14ccd29e70 Added a separate rltemplate.py file to contain
andy_robinson
parents:
diff changeset
    13
344
dd6e41c2b0ed Paragraphs chapter pretty much complete. Fancy cover.
andy_robinson
parents: 295
diff changeset
    14
dd6e41c2b0ed Paragraphs chapter pretty much complete. Fancy cover.
andy_robinson
parents: 295
diff changeset
    15
class FrontCoverTemplate(PageTemplate):
dd6e41c2b0ed Paragraphs chapter pretty much complete. Fancy cover.
andy_robinson
parents: 295
diff changeset
    16
    def __init__(self, id, pageSize=DEFAULT_PAGE_SIZE):
dd6e41c2b0ed Paragraphs chapter pretty much complete. Fancy cover.
andy_robinson
parents: 295
diff changeset
    17
        self.pageWidth = pageSize[0]
dd6e41c2b0ed Paragraphs chapter pretty much complete. Fancy cover.
andy_robinson
parents: 295
diff changeset
    18
        self.pageHeight = pageSize[1]
dd6e41c2b0ed Paragraphs chapter pretty much complete. Fancy cover.
andy_robinson
parents: 295
diff changeset
    19
        frame1 = Frame(inch,
dd6e41c2b0ed Paragraphs chapter pretty much complete. Fancy cover.
andy_robinson
parents: 295
diff changeset
    20
                       3*inch,
dd6e41c2b0ed Paragraphs chapter pretty much complete. Fancy cover.
andy_robinson
parents: 295
diff changeset
    21
                       self.pageWidth - 2*inch,
dd6e41c2b0ed Paragraphs chapter pretty much complete. Fancy cover.
andy_robinson
parents: 295
diff changeset
    22
                       4.5*inch, id='cover')
dd6e41c2b0ed Paragraphs chapter pretty much complete. Fancy cover.
andy_robinson
parents: 295
diff changeset
    23
        PageTemplate.__init__(self, id, [frame1])  # note lack of onPage
dd6e41c2b0ed Paragraphs chapter pretty much complete. Fancy cover.
andy_robinson
parents: 295
diff changeset
    24
dd6e41c2b0ed Paragraphs chapter pretty much complete. Fancy cover.
andy_robinson
parents: 295
diff changeset
    25
    def afterDrawPage(self, canvas, doc):
dd6e41c2b0ed Paragraphs chapter pretty much complete. Fancy cover.
andy_robinson
parents: 295
diff changeset
    26
        canvas.saveState()
345
d300076e7d68 Script was referring to the wrong copy of the logo.
andy_robinson
parents: 344
diff changeset
    27
        canvas.drawInlineImage('../images/replogo.gif',2*inch, 8*inch)
278
1a14ccd29e70 Added a separate rltemplate.py file to contain
andy_robinson
parents:
diff changeset
    28
285
61c0dc3c7fc0 rltemplate now simple, based on UserDocTemplate
andy_robinson
parents: 278
diff changeset
    29
344
dd6e41c2b0ed Paragraphs chapter pretty much complete. Fancy cover.
andy_robinson
parents: 295
diff changeset
    30
        canvas.setFont('Times-Roman', 10)
dd6e41c2b0ed Paragraphs chapter pretty much complete. Fancy cover.
andy_robinson
parents: 295
diff changeset
    31
        canvas.line(inch, 120, self.pageWidth - 2*inch, 120)
dd6e41c2b0ed Paragraphs chapter pretty much complete. Fancy cover.
andy_robinson
parents: 295
diff changeset
    32
dd6e41c2b0ed Paragraphs chapter pretty much complete. Fancy cover.
andy_robinson
parents: 295
diff changeset
    33
        canvas.drawString(inch, 100, 'Lombard Business Park')
dd6e41c2b0ed Paragraphs chapter pretty much complete. Fancy cover.
andy_robinson
parents: 295
diff changeset
    34
        canvas.drawString(inch, 88, '8 Lombard Road')
dd6e41c2b0ed Paragraphs chapter pretty much complete. Fancy cover.
andy_robinson
parents: 295
diff changeset
    35
        canvas.drawString(inch, 76, 'Wimbledon')
355
3a8dd5f93921 changed nj address
aaron_watters
parents: 345
diff changeset
    36
        canvas.drawString(inch, 64, 'London, ENGLAND SW19 3TZ')
344
dd6e41c2b0ed Paragraphs chapter pretty much complete. Fancy cover.
andy_robinson
parents: 295
diff changeset
    37
355
3a8dd5f93921 changed nj address
aaron_watters
parents: 345
diff changeset
    38
        canvas.drawRightString(self.pageWidth - inch, 100, '103 Bayard Street')
3a8dd5f93921 changed nj address
aaron_watters
parents: 345
diff changeset
    39
        canvas.drawRightString(self.pageWidth - inch, 88, 'New Brunswick')
3a8dd5f93921 changed nj address
aaron_watters
parents: 345
diff changeset
    40
        canvas.drawRightString(self.pageWidth - inch, 76, 'New Jersey, 08904)')
3a8dd5f93921 changed nj address
aaron_watters
parents: 345
diff changeset
    41
        canvas.drawRightString(self.pageWidth - inch, 64, 'USA')
344
dd6e41c2b0ed Paragraphs chapter pretty much complete. Fancy cover.
andy_robinson
parents: 295
diff changeset
    42
        
dd6e41c2b0ed Paragraphs chapter pretty much complete. Fancy cover.
andy_robinson
parents: 295
diff changeset
    43
        canvas.restoreState()
dd6e41c2b0ed Paragraphs chapter pretty much complete. Fancy cover.
andy_robinson
parents: 295
diff changeset
    44
    
dd6e41c2b0ed Paragraphs chapter pretty much complete. Fancy cover.
andy_robinson
parents: 295
diff changeset
    45
285
61c0dc3c7fc0 rltemplate now simple, based on UserDocTemplate
andy_robinson
parents: 278
diff changeset
    46
class OneColumnTemplate(PageTemplate):
344
dd6e41c2b0ed Paragraphs chapter pretty much complete. Fancy cover.
andy_robinson
parents: 295
diff changeset
    47
    def __init__(self, id, pageSize=DEFAULT_PAGE_SIZE):
dd6e41c2b0ed Paragraphs chapter pretty much complete. Fancy cover.
andy_robinson
parents: 295
diff changeset
    48
        self.pageWidth = pageSize[0]
dd6e41c2b0ed Paragraphs chapter pretty much complete. Fancy cover.
andy_robinson
parents: 295
diff changeset
    49
        self.pageHeight = pageSize[1]
dd6e41c2b0ed Paragraphs chapter pretty much complete. Fancy cover.
andy_robinson
parents: 295
diff changeset
    50
        frame1 = Frame(inch,
dd6e41c2b0ed Paragraphs chapter pretty much complete. Fancy cover.
andy_robinson
parents: 295
diff changeset
    51
                       inch,
dd6e41c2b0ed Paragraphs chapter pretty much complete. Fancy cover.
andy_robinson
parents: 295
diff changeset
    52
                       self.pageWidth - 2*inch,
dd6e41c2b0ed Paragraphs chapter pretty much complete. Fancy cover.
andy_robinson
parents: 295
diff changeset
    53
                       self.pageHeight - 2*inch,
dd6e41c2b0ed Paragraphs chapter pretty much complete. Fancy cover.
andy_robinson
parents: 295
diff changeset
    54
                       id='normal')
285
61c0dc3c7fc0 rltemplate now simple, based on UserDocTemplate
andy_robinson
parents: 278
diff changeset
    55
        PageTemplate.__init__(self, id, [frame1])  # note lack of onPage
278
1a14ccd29e70 Added a separate rltemplate.py file to contain
andy_robinson
parents:
diff changeset
    56
285
61c0dc3c7fc0 rltemplate now simple, based on UserDocTemplate
andy_robinson
parents: 278
diff changeset
    57
    def afterDrawPage(self, canvas, doc):
278
1a14ccd29e70 Added a separate rltemplate.py file to contain
andy_robinson
parents:
diff changeset
    58
        canvas.saveState()
1a14ccd29e70 Added a separate rltemplate.py file to contain
andy_robinson
parents:
diff changeset
    59
        canvas.setFont('Times-Roman', 10)
285
61c0dc3c7fc0 rltemplate now simple, based on UserDocTemplate
andy_robinson
parents: 278
diff changeset
    60
        canvas.drawString(inch, 11.1*inch, doc.title)
61c0dc3c7fc0 rltemplate now simple, based on UserDocTemplate
andy_robinson
parents: 278
diff changeset
    61
        canvas.drawRightString(7*inch, 11.1*inch, doc.chapter)
61c0dc3c7fc0 rltemplate now simple, based on UserDocTemplate
andy_robinson
parents: 278
diff changeset
    62
        canvas.line(inch, 11*inch, 7*inch, 11*inch)
61c0dc3c7fc0 rltemplate now simple, based on UserDocTemplate
andy_robinson
parents: 278
diff changeset
    63
        canvas.drawCentredString(doc.pagesize[0] / 2, 0.75*inch, 'Page %d' % canvas.getPageNumber())
61c0dc3c7fc0 rltemplate now simple, based on UserDocTemplate
andy_robinson
parents: 278
diff changeset
    64
        canvas.restoreState()
61c0dc3c7fc0 rltemplate now simple, based on UserDocTemplate
andy_robinson
parents: 278
diff changeset
    65
61c0dc3c7fc0 rltemplate now simple, based on UserDocTemplate
andy_robinson
parents: 278
diff changeset
    66
class TwoColumnTemplate(PageTemplate):
344
dd6e41c2b0ed Paragraphs chapter pretty much complete. Fancy cover.
andy_robinson
parents: 295
diff changeset
    67
    def __init__(self, id, pageSize=DEFAULT_PAGE_SIZE):
dd6e41c2b0ed Paragraphs chapter pretty much complete. Fancy cover.
andy_robinson
parents: 295
diff changeset
    68
        self.pageWidth = pageSize[0]
dd6e41c2b0ed Paragraphs chapter pretty much complete. Fancy cover.
andy_robinson
parents: 295
diff changeset
    69
        self.pageHeight = pageSize[1]
dd6e41c2b0ed Paragraphs chapter pretty much complete. Fancy cover.
andy_robinson
parents: 295
diff changeset
    70
        colWidth = 0.5 * (self.pageWidth - 2.25*inch)
dd6e41c2b0ed Paragraphs chapter pretty much complete. Fancy cover.
andy_robinson
parents: 295
diff changeset
    71
        frame1 = Frame(inch,
dd6e41c2b0ed Paragraphs chapter pretty much complete. Fancy cover.
andy_robinson
parents: 295
diff changeset
    72
                       inch,
dd6e41c2b0ed Paragraphs chapter pretty much complete. Fancy cover.
andy_robinson
parents: 295
diff changeset
    73
                       colWidth,
dd6e41c2b0ed Paragraphs chapter pretty much complete. Fancy cover.
andy_robinson
parents: 295
diff changeset
    74
                       self.pageHeight - 2*inch,
dd6e41c2b0ed Paragraphs chapter pretty much complete. Fancy cover.
andy_robinson
parents: 295
diff changeset
    75
                       id='leftCol')
dd6e41c2b0ed Paragraphs chapter pretty much complete. Fancy cover.
andy_robinson
parents: 295
diff changeset
    76
        frame2 = Frame(0.5 * self.pageWidth + 0.125,
dd6e41c2b0ed Paragraphs chapter pretty much complete. Fancy cover.
andy_robinson
parents: 295
diff changeset
    77
                       inch,
dd6e41c2b0ed Paragraphs chapter pretty much complete. Fancy cover.
andy_robinson
parents: 295
diff changeset
    78
                       colWidth,
dd6e41c2b0ed Paragraphs chapter pretty much complete. Fancy cover.
andy_robinson
parents: 295
diff changeset
    79
                       self.pageHeight - 2*inch,
dd6e41c2b0ed Paragraphs chapter pretty much complete. Fancy cover.
andy_robinson
parents: 295
diff changeset
    80
                       id='rightCol')
285
61c0dc3c7fc0 rltemplate now simple, based on UserDocTemplate
andy_robinson
parents: 278
diff changeset
    81
        PageTemplate.__init__(self, id, [frame1, frame2])  # note lack of onPage
61c0dc3c7fc0 rltemplate now simple, based on UserDocTemplate
andy_robinson
parents: 278
diff changeset
    82
61c0dc3c7fc0 rltemplate now simple, based on UserDocTemplate
andy_robinson
parents: 278
diff changeset
    83
    def afterDrawPage(self, canvas, doc):
61c0dc3c7fc0 rltemplate now simple, based on UserDocTemplate
andy_robinson
parents: 278
diff changeset
    84
        canvas.saveState()
61c0dc3c7fc0 rltemplate now simple, based on UserDocTemplate
andy_robinson
parents: 278
diff changeset
    85
        canvas.setFont('Times-Roman', 10)
61c0dc3c7fc0 rltemplate now simple, based on UserDocTemplate
andy_robinson
parents: 278
diff changeset
    86
        canvas.drawString(inch, 11.1*inch, doc.title)
278
1a14ccd29e70 Added a separate rltemplate.py file to contain
andy_robinson
parents:
diff changeset
    87
        canvas.drawRightString(7*inch, 11.1*inch, doc.chapter)
1a14ccd29e70 Added a separate rltemplate.py file to contain
andy_robinson
parents:
diff changeset
    88
        canvas.line(inch, 11*inch, 7*inch, 11*inch)
1a14ccd29e70 Added a separate rltemplate.py file to contain
andy_robinson
parents:
diff changeset
    89
        canvas.drawCentredString(doc.pagesize[0] / 2, 0.75*inch, 'Page %d' % canvas.getPageNumber())
1a14ccd29e70 Added a separate rltemplate.py file to contain
andy_robinson
parents:
diff changeset
    90
        canvas.restoreState()
1a14ccd29e70 Added a separate rltemplate.py file to contain
andy_robinson
parents:
diff changeset
    91
1a14ccd29e70 Added a separate rltemplate.py file to contain
andy_robinson
parents:
diff changeset
    92
295
1f00bd112cb0 remove UserDocTemplate, but add Andy's hook methods
rgbecker
parents: 285
diff changeset
    93
class RLDocTemplate(BaseDocTemplate):
285
61c0dc3c7fc0 rltemplate now simple, based on UserDocTemplate
andy_robinson
parents: 278
diff changeset
    94
    def afterInit(self):
344
dd6e41c2b0ed Paragraphs chapter pretty much complete. Fancy cover.
andy_robinson
parents: 295
diff changeset
    95
        self.addPageTemplates(FrontCoverTemplate('Cover'))
285
61c0dc3c7fc0 rltemplate now simple, based on UserDocTemplate
andy_robinson
parents: 278
diff changeset
    96
        self.addPageTemplates(OneColumnTemplate('Normal'))
61c0dc3c7fc0 rltemplate now simple, based on UserDocTemplate
andy_robinson
parents: 278
diff changeset
    97
        self.addPageTemplates(TwoColumnTemplate('TwoColumn'))
344
dd6e41c2b0ed Paragraphs chapter pretty much complete. Fancy cover.
andy_robinson
parents: 295
diff changeset
    98
        
278
1a14ccd29e70 Added a separate rltemplate.py file to contain
andy_robinson
parents:
diff changeset
    99
        #just playing
285
61c0dc3c7fc0 rltemplate now simple, based on UserDocTemplate
andy_robinson
parents: 278
diff changeset
   100
        self.title = "(Document Title Goes Here)"
278
1a14ccd29e70 Added a separate rltemplate.py file to contain
andy_robinson
parents:
diff changeset
   101
        self.chapter = "(No chapter yet)"
285
61c0dc3c7fc0 rltemplate now simple, based on UserDocTemplate
andy_robinson
parents: 278
diff changeset
   102
        self.chapterNo = 1 #unique keys
61c0dc3c7fc0 rltemplate now simple, based on UserDocTemplate
andy_robinson
parents: 278
diff changeset
   103
        self.sectionNo = 1 # uniqque keys
295
1f00bd112cb0 remove UserDocTemplate, but add Andy's hook methods
rgbecker
parents: 285
diff changeset
   104
285
61c0dc3c7fc0 rltemplate now simple, based on UserDocTemplate
andy_robinson
parents: 278
diff changeset
   105
    def beforeDocument(self):
61c0dc3c7fc0 rltemplate now simple, based on UserDocTemplate
andy_robinson
parents: 278
diff changeset
   106
        self.canv.showOutline()
295
1f00bd112cb0 remove UserDocTemplate, but add Andy's hook methods
rgbecker
parents: 285
diff changeset
   107
285
61c0dc3c7fc0 rltemplate now simple, based on UserDocTemplate
andy_robinson
parents: 278
diff changeset
   108
    def afterFlowable(self, flowable):
61c0dc3c7fc0 rltemplate now simple, based on UserDocTemplate
andy_robinson
parents: 278
diff changeset
   109
        """Detect Level 1 and 2 headings, build outline,
61c0dc3c7fc0 rltemplate now simple, based on UserDocTemplate
andy_robinson
parents: 278
diff changeset
   110
        and track chapter title."""
61c0dc3c7fc0 rltemplate now simple, based on UserDocTemplate
andy_robinson
parents: 278
diff changeset
   111
        if isinstance(flowable, Paragraph):
61c0dc3c7fc0 rltemplate now simple, based on UserDocTemplate
andy_robinson
parents: 278
diff changeset
   112
            style = flowable.style.name
61c0dc3c7fc0 rltemplate now simple, based on UserDocTemplate
andy_robinson
parents: 278
diff changeset
   113
            if style == 'Title':
61c0dc3c7fc0 rltemplate now simple, based on UserDocTemplate
andy_robinson
parents: 278
diff changeset
   114
                self.title = flowable.getPlainText()
61c0dc3c7fc0 rltemplate now simple, based on UserDocTemplate
andy_robinson
parents: 278
diff changeset
   115
            elif style == 'Heading1':
61c0dc3c7fc0 rltemplate now simple, based on UserDocTemplate
andy_robinson
parents: 278
diff changeset
   116
                self.chapter = flowable.getPlainText()
61c0dc3c7fc0 rltemplate now simple, based on UserDocTemplate
andy_robinson
parents: 278
diff changeset
   117
                key = 'ch%d' % self.chapterNo
61c0dc3c7fc0 rltemplate now simple, based on UserDocTemplate
andy_robinson
parents: 278
diff changeset
   118
                self.canv.bookmarkPage(key)
61c0dc3c7fc0 rltemplate now simple, based on UserDocTemplate
andy_robinson
parents: 278
diff changeset
   119
                self.canv.addOutlineEntry(flowable.getPlainText(),
61c0dc3c7fc0 rltemplate now simple, based on UserDocTemplate
andy_robinson
parents: 278
diff changeset
   120
                                            key, 0, 0)
61c0dc3c7fc0 rltemplate now simple, based on UserDocTemplate
andy_robinson
parents: 278
diff changeset
   121
                self.chapterNo = self.chapterNo + 1
61c0dc3c7fc0 rltemplate now simple, based on UserDocTemplate
andy_robinson
parents: 278
diff changeset
   122
                self.sectionNo = 1
61c0dc3c7fc0 rltemplate now simple, based on UserDocTemplate
andy_robinson
parents: 278
diff changeset
   123
            elif style == 'Heading2':
61c0dc3c7fc0 rltemplate now simple, based on UserDocTemplate
andy_robinson
parents: 278
diff changeset
   124
                self.section = flowable.text
61c0dc3c7fc0 rltemplate now simple, based on UserDocTemplate
andy_robinson
parents: 278
diff changeset
   125
                key = 'ch%ds%d' % (self.chapterNo, self.sectionNo)
61c0dc3c7fc0 rltemplate now simple, based on UserDocTemplate
andy_robinson
parents: 278
diff changeset
   126
                self.canv.bookmarkPage(key)
61c0dc3c7fc0 rltemplate now simple, based on UserDocTemplate
andy_robinson
parents: 278
diff changeset
   127
                self.canv.addOutlineEntry(flowable.getPlainText(),
61c0dc3c7fc0 rltemplate now simple, based on UserDocTemplate
andy_robinson
parents: 278
diff changeset
   128
                                             key, 1, 0)
61c0dc3c7fc0 rltemplate now simple, based on UserDocTemplate
andy_robinson
parents: 278
diff changeset
   129
                self.sectionNo = self.sectionNo + 1