docs/userguide/genuserguide.py
author andy_robinson
Mon, 03 Jul 2000 15:50:31 +0000
changeset 317 fce6dad947c3
parent 314 72c75740504b
child 318 03c9f114c621
permissions -rw-r--r--
Pushed down most existing lessons one level; added functions heading1..heading3 for building story unambiguously; spelled Hugh Hefner right!
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
273
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
     1
#!/bin/env python
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
     2
###############################################################################
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
     3
#
317
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
     4
#   ReportLab Public License Version 1.0
273
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
     5
#
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
     6
#   Except for the change of names the spirit and intention of this
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
     7
#   license is the same as that of Python
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
     8
#
317
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
     9
#   (C) Copyright ReportLab Inc. 1998-2000.
273
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
    10
#
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
    11
#
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
    12
# All Rights Reserved
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
    13
#
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
    14
# Permission to use, copy, modify, and distribute this software and its
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
    15
# documentation for any purpose and without fee is hereby granted, provided
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
    16
# that the above copyright notice appear in all copies and that both that
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
    17
# copyright notice and this permission notice appear in supporting
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
    18
# documentation, and that the name of ReportLab not be used
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
    19
# in advertising or publicity pertaining to distribution of the software
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
    20
# without specific, written prior permission. 
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
    21
# 
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
    22
#
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
    23
# Disclaimer
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
    24
#
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
    25
# ReportLab Inc. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
    26
# SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
    27
# IN NO EVENT SHALL ReportLab BE LIABLE FOR ANY SPECIAL, INDIRECT
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
    28
# OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
    29
# OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
    30
# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
    31
# PERFORMANCE OF THIS SOFTWARE. 
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
    32
#
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
    33
###############################################################################
317
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
    34
#   $Log: genuserguide.py,v $
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
    35
#   Revision 1.14  2000/07/03 15:50:31  andy_robinson
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
    36
#   Pushed down most existing lessons one level; added
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
    37
#   functions heading1..heading3 for building story
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
    38
#   unambiguously; spelled Hugh Hefner right!
314
72c75740504b abspath is 1.5.2 only
rgbecker
parents: 311
diff changeset
    39
#
317
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
    40
#   Revision 1.13  2000/07/03 09:51:38  rgbecker
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
    41
#   abspath is 1.5.2 only
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
    42
#   
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
    43
#   Revision 1.12  2000/06/28 16:10:00  rgbecker
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
    44
#   Fix unwanted 'i'
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
    45
#   
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
    46
#   Revision 1.11  2000/06/28 14:52:43  rgbecker
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
    47
#   Documentation changes
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
    48
#   
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
    49
#   Revision 1.10  2000/06/27 10:09:48  rgbecker
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
    50
#   Minor cosmetic changes
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
    51
#   
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
    52
#   Revision 1.9  2000/06/23 21:09:03  aaron_watters
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
    53
#   text text and more text
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
    54
#   
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
    55
#   Revision 1.8  2000/06/22 19:05:24  aaron_watters
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
    56
#   added quickhack for font changes in paragraphs and lots of new text
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
    57
#   
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
    58
#   Revision 1.7  2000/06/22 13:55:59  aaron_watters
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
    59
#   showPage resets all state parameters warning.
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
    60
#   
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
    61
#   Revision 1.6  2000/06/22 13:35:28  aaron_watters
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
    62
#   textobject and pathobject methods, among other things
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
    63
#   
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
    64
#   Revision 1.5  2000/06/21 21:19:29  aaron_watters
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
    65
#   colors, line styles, more examples
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
    66
#   
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
    67
#   Revision 1.4  2000/06/21 15:16:05  aaron_watters
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
    68
#   Lots of graphical examples added
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
    69
#   
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
    70
#   Revision 1.3  2000/06/20 20:31:42  aaron_watters
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
    71
#   typos and more examples
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
    72
#   
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
    73
#   Revision 1.2  2000/06/19 21:13:02  aaron_watters
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
    74
#   2nd try. more text
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
    75
#   
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
    76
#   Revision 1.1  2000/06/17 02:57:56  aaron_watters
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
    77
#   initial checkin. user guide generation framework.
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
    78
#   
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
    79
__version__=''' $Id: genuserguide.py,v 1.14 2000/07/03 15:50:31 andy_robinson Exp $ '''
273
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
    80
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
    81
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
    82
__doc__ = """
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
    83
This module contains the script for building the user guide.
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
    84
"""
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
    85
317
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
    86
_oldStyle=0     #change to 1 to get Aaron's original
310
cbec783cfb81 Documentation changes
rgbecker
parents: 308
diff changeset
    87
if _oldStyle:
317
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
    88
    from reportlab.lib.styles import getSampleStyleSheet
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
    89
    styleSheet = getSampleStyleSheet()
310
cbec783cfb81 Documentation changes
rgbecker
parents: 308
diff changeset
    90
else:
317
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
    91
    import os, sys
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
    92
    sys.path.insert(0,os.path.join(os.path.dirname(sys.argv[0]),'..','tools'))
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
    93
    from rltemplate import RLDocTemplate
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
    94
    from stylesheet import getStyleSheet
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
    95
    styleSheet = getStyleSheet()
310
cbec783cfb81 Documentation changes
rgbecker
parents: 308
diff changeset
    96
273
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
    97
from reportlab.platypus.doctemplate import SimpleDocTemplate
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
    98
from reportlab.platypus.flowables import Flowable
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
    99
from reportlab.lib.units import inch
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   100
from reportlab.lib.pagesizes import letter
308
a09abac33167 Minor cosmetic changes
rgbecker
parents: 304
diff changeset
   101
from reportlab.platypus import Paragraph, Spacer, Preformatted, PageBreak, CondPageBreak
310
cbec783cfb81 Documentation changes
rgbecker
parents: 308
diff changeset
   102
from reportlab.lib.styles import ParagraphStyle
273
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   103
from reportlab.lib import colors
317
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   104
from reportlab.lib.sequencer import getSequencer
273
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   105
import examples
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   106
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   107
from reportlab.lib.corp import ReportLabLogo
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   108
LOGO = ReportLabLogo(0.25*inch, 0.25*inch, inch, 0.75*inch)
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   109
301
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   110
from t_parse import Template
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   111
QFcodetemplate = Template("X$X$", "X")
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   112
QFreptemplate = Template("X^X^", "X")
310
cbec783cfb81 Documentation changes
rgbecker
parents: 308
diff changeset
   113
if _oldStyle:
317
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   114
    codesubst = "%s<font name=courier color=green>%s</font>"
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   115
    QFsubst = "%s<font name=Helvetica color=blue><i>%s</i></font>"
310
cbec783cfb81 Documentation changes
rgbecker
parents: 308
diff changeset
   116
else:
317
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   117
    codesubst = "%s<b><font name=courier></b>%s</font>"
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   118
    QFsubst = "%s<font name=Helvetica><i>%s</i></font>"
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   119
    
301
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   120
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   121
def quickfix(text):
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   122
    """inside text find any subsequence of form $subsequence$.
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   123
       Format the subsequence as code.  If similarly if text contains ^arg^
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   124
       format the arg as replaceable.  The escape sequence for literal
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   125
       $ is $\\$ (^ is ^\\^.
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   126
    """
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   127
    from string import join
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   128
    for (template,subst) in [(QFcodetemplate, codesubst), (QFreptemplate, QFsubst)]:
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   129
        fragment = text
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   130
        parts = []
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   131
        try:
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   132
            while fragment:
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   133
                try:
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   134
                    (matches, index) = template.PARSE(fragment)
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   135
                except: raise ValueError
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   136
                else:
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   137
                    [prefix, code] = matches
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   138
                    if code == "\\":
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   139
                        part = fragment[:index]
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   140
                    else:
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   141
                        part = subst % (prefix, code)
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   142
                    parts.append(part)
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   143
                    fragment = fragment[index:]
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   144
        except ValueError:
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   145
            parts.append(fragment)
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   146
        text = join(parts, "")
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   147
    return text
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   148
#print quickfix("$testing$ testing $one$ ^two^ $three(^four^)$")
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   149
310
cbec783cfb81 Documentation changes
rgbecker
parents: 308
diff changeset
   150
if _oldStyle:
317
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   151
    class PageAnnotations:
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   152
        """ "closure" containing onfirstpage, onnextpage actions
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   153
            and any data they might want to use.
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   154
        """
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   155
        pagesize = letter
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   156
        pagenumber = 1
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   157
        def onFirstPage(self, canvas, doc):
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   158
            (xsize, ysize) = self.pagesize
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   159
            LOGO.draw(canvas)
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   160
            #  width=6.25*inch,height=0.62*inch)
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   161
            canvas.setFont("Helvetica", 12)
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   162
            canvas.drawRightString(xsize-inch, ysize-0.8*inch, "ReportLab User Guide")
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   163
            self.pagenumber = self.pagenumber+1
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   164
        def onNextPage(self, canvas, doc):
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   165
            canvas.saveState()
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   166
            (xsize, ysize) = self.pagesize
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   167
            canvas.setFont("Helvetica", 12)
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   168
            canvas.drawString(inch, ysize-0.8*inch, "Page %s" % self.pagenumber)
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   169
            self.onFirstPage(canvas, doc)
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   170
            canvas.restoreState()
273
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   171
        
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   172
class Guide:
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   173
    def __init__(self):
310
cbec783cfb81 Documentation changes
rgbecker
parents: 308
diff changeset
   174
        if _oldStyle:
cbec783cfb81 Documentation changes
rgbecker
parents: 308
diff changeset
   175
            self.myannotations = PageAnnotations()
273
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   176
        self.story = story()
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   177
    def go(self, filename="userguide.pdf"):
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   178
        # generate the doc...
310
cbec783cfb81 Documentation changes
rgbecker
parents: 308
diff changeset
   179
        doc = RLDocTemplate(filename,pagesize = letter)
cbec783cfb81 Documentation changes
rgbecker
parents: 308
diff changeset
   180
        story = self.story
cbec783cfb81 Documentation changes
rgbecker
parents: 308
diff changeset
   181
        if _oldStyle:
cbec783cfb81 Documentation changes
rgbecker
parents: 308
diff changeset
   182
            doc.build(story, self.myannotations.onFirstPage, self.myannotations.onNextPage)
cbec783cfb81 Documentation changes
rgbecker
parents: 308
diff changeset
   183
        else:
cbec783cfb81 Documentation changes
rgbecker
parents: 308
diff changeset
   184
            doc.build(story)
317
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   185
seq = getSequencer()
273
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   186
310
cbec783cfb81 Documentation changes
rgbecker
parents: 308
diff changeset
   187
H1 = styleSheet['Heading1']
cbec783cfb81 Documentation changes
rgbecker
parents: 308
diff changeset
   188
H2 = styleSheet['Heading2']
317
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   189
H3 = styleSheet['Heading3']
273
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   190
B = styleSheet['BodyText']
317
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   191
Comment = styleSheet['Comment']
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   192
310
cbec783cfb81 Documentation changes
rgbecker
parents: 308
diff changeset
   193
if _oldStyle:
317
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   194
    lessonnamestyle = ParagraphStyle("lessonname", parent=H2)
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   195
    lessonnamestyle.fontName = 'Helvetica-Bold'
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   196
    discussiontextstyle = ParagraphStyle("discussiontext", parent=B)
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   197
    discussiontextstyle.fontName= 'Helvetica'
310
cbec783cfb81 Documentation changes
rgbecker
parents: 308
diff changeset
   198
else:
317
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   199
    lessonnamestyle = H2
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   200
    discussiontextstyle = B
273
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   201
exampletextstyle = styleSheet['Code']
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   202
# size for every example
283
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   203
examplefunctionxinches = 5.5
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   204
examplefunctionyinches = 3
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   205
examplefunctiondisplaysizes = (examplefunctionxinches*inch, examplefunctionyinches*inch)
273
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   206
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   207
# for testing
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   208
def NOP(*x,**y):
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   209
    return None
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   210
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   211
BODY = []
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   212
def story():
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   213
    return BODY
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   214
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   215
def disc(text, klass=Paragraph, style=discussiontextstyle):
301
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   216
    text = quickfix(text)
273
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   217
    P = klass(text, style)
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   218
    BODY.append(P)
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   219
    
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   220
def eg(text):
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   221
    BODY.append(Spacer(0.1*inch, 0.1*inch))
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   222
    disc(text, klass=Preformatted, style=exampletextstyle)
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   223
    
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   224
#eg("""
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   225
#this
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   226
#  is 
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   227
#    an 
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   228
#     example""")
317
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   229
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   230
##def head(text,style=lessonnamestyle):
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   231
##    BODY.append(CondPageBreak(inch))
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   232
##    disc(text, style=style)
273
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   233
    
310
cbec783cfb81 Documentation changes
rgbecker
parents: 308
diff changeset
   234
cbec783cfb81 Documentation changes
rgbecker
parents: 308
diff changeset
   235
def title(text):
317
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   236
    """Use this for the document title only"""
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   237
    disc(text,style=styleSheet['Title'])
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   238
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   239
##def lesson(text):
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   240
##    BODY.append(PageBreak())
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   241
##    heading3(text,style=H1)
273
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   242
    
317
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   243
#heading3("this is a header")
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   244
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   245
#AR 3/7/2000 - defining three new levels of headings; code
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   246
#should be swapped over to using them.
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   247
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   248
def heading1(text):
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   249
    """Use this for chapters.  Lessons within a big chapter
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   250
    should now use heading2 instead.  Chapters get numbered."""
273
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   251
    BODY.append(PageBreak())
317
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   252
    p = Paragraph('Chapter <seq id="Chapter"/> - ' + quickfix(text), H1)
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   253
    BODY.append(p)
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   254
    
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   255
def heading2(text):
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   256
    """Used to be 'lesson'"""
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   257
    BODY.append(CondPageBreak(inch))
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   258
    p = Paragraph('<seq template="%(Chapter)s.%(Section+)s - "/>' + quickfix(text), H2)
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   259
    BODY.append(p)
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   260
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   261
def heading3(text):
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   262
    """Used to be most of the plain old 'head' sections"""
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   263
    BODY.append(CondPageBreak(inch))
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   264
    p = Paragraph(quickfix(text), H3)
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   265
    BODY.append(p)
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   266
    
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   267
def todo(text):
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   268
    """Used for notes to ourselves"""
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   269
    BODY.append(Paragraph(quickfix(text), Comment))
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   270
    
273
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   271
    
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   272
def canvasdemo(function):
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   273
    BODY.append(Spacer(0.1*inch, 0.1*inch))
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   274
    BODY.append(OperationWrapper(function))
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   275
    
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   276
class OperationWrapper(Flowable):
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   277
    """wrap a drawing operation as a flowable.
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   278
       the operation should respect the examplefunctiondisplaysizes
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   279
       limitations.
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   280
       This example wraps a drawing operator f(pdfgen.canvas).
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   281
       Always enclosed in a rectangle.
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   282
    """
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   283
    def __init__(self, operation):
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   284
        self.operation = operation
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   285
        
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   286
    def wrap(self, aw, ah):
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   287
        return examplefunctiondisplaysizes # always the same
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   288
        
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   289
    def draw(self):
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   290
        canvas = self.canv
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   291
        canvas.saveState()
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   292
        (x,y) = examplefunctiondisplaysizes
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   293
        self.operation(canvas)
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   294
        canvas.restoreState()
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   295
        canvas.rect(0,0,x,y)
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   296
        
296
a5e584b6d61b Lots of graphical examples added
aaron_watters
parents: 293
diff changeset
   297
a5e584b6d61b Lots of graphical examples added
aaron_watters
parents: 293
diff changeset
   298
def pencilnote():
a5e584b6d61b Lots of graphical examples added
aaron_watters
parents: 293
diff changeset
   299
    BODY.append(examples.NoteAnnotation())
a5e584b6d61b Lots of graphical examples added
aaron_watters
parents: 293
diff changeset
   300
        
273
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   301
###### testing...
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   302
#canvasdemo(NOP)
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   303
317
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   304
#heading2("this is a new lesson")
273
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   305
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   306
#disc("this explains the example")
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   307
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   308
#eg("""
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   309
#this
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   310
#  is the
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   311
#    example
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   312
#      code""")
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   313
      
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   314
#disc("the execution of the example follows")
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   315
      
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   316
#canvasdemo(NOP) # execute some code
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   317
296
a5e584b6d61b Lots of graphical examples added
aaron_watters
parents: 293
diff changeset
   318
#pencilnote()
a5e584b6d61b Lots of graphical examples added
aaron_watters
parents: 293
diff changeset
   319
310
cbec783cfb81 Documentation changes
rgbecker
parents: 308
diff changeset
   320
title("ReportLab User Guide")
317
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   321
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   322
todo("""To-do items to authors, or points under discussion,
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   323
appear in italics like this.""")
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   324
todo("""The examples should go in slightly smaller boxes,
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   325
centred in the frame, with a 'Figure 1.2...' style caption
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   326
beneath them.  We can just scale things down a little.
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   327
A Figure widget can be found in platdemos.py; they should
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   328
draw inside that.""")
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   329
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   330
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   331
heading1("Introduction")
273
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   332
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   333
disc("""
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   334
This document is intended to be a conversational introduction
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   335
to the use of the ReportLab packages.  Some previous programming experience
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   336
is presumed and familiarity with the Python Programming language is
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   337
recommended.
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   338
""")
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   339
317
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   340
heading2("What is PDFgen all about")
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   341
todo("rationale - from Andy")
296
a5e584b6d61b Lots of graphical examples added
aaron_watters
parents: 293
diff changeset
   342
#canvasdemo(NOP) # execute some code
a5e584b6d61b Lots of graphical examples added
aaron_watters
parents: 293
diff changeset
   343
317
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   344
heading2("About Python")
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   345
todo("If they don't know Python, rave a little then tell them where to get it")
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   346
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   347
heading2("Installation and Setup")
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   348
todo("need notes on packages, Windows, PIL and zlib; how to test it works")
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   349
296
a5e584b6d61b Lots of graphical examples added
aaron_watters
parents: 293
diff changeset
   350
pencilnote()
a5e584b6d61b Lots of graphical examples added
aaron_watters
parents: 293
diff changeset
   351
283
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   352
disc("""
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   353
This document is in a <em>very</em> preliminary form.
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   354
""")
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   355
317
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   356
heading1("Graphics and Text with $pdfgen$")
273
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   357
317
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   358
heading2("Basic Concepts")
273
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   359
disc("""
301
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   360
The $pdfgen$ package is the lowest level interface for
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   361
generating PDF documents.  A $pdfgen$ program is essentially
273
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   362
a sequence of instructions for "painting" a document onto
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   363
a sequence of pages.  The interface object which provides the
301
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   364
painting operations is the $pdfgen$ canvas.  
273
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   365
""")
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   366
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   367
disc("""
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   368
The canvas should be thought of as a sheet of white paper
301
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   369
with points on the sheet identified using Cartesian ^(X,Y)^ coordinates
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   370
which by default have the ^(0,0)^ origin point at the lower
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   371
left corner of the page.  Furthermore the first coordinate ^x^
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   372
goes to the right and the second coordinate ^y^ goes up, by
273
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   373
default.""")
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   374
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   375
disc("""
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   376
A simple example
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   377
program that uses a canvas follows.
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   378
""")
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   379
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   380
eg("""
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   381
    from reportlab.pdfgen import canvas
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   382
    c = canvas.Canvas("hello.pdf")
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   383
    hello(c)
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   384
    c.showPage()
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   385
    c.save()
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   386
""")
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   387
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   388
disc("""
301
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   389
The above code creates a $canvas$ object which will generate
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   390
a PDF file named $hello.pdf$ in the current working directory.
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   391
It then calls the $hello$ function passing the $canvas$ as an argument.
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   392
Finally the $showPage$ method saves the current page of the canvas
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   393
and the $save$ method stores the file and closes the canvas.""")
273
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   394
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   395
disc("""
301
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   396
The $showPage$ method causes the $canvas$ to stop drawing on the
273
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   397
current page and any further operations will draw on a subsequent
293
84a2635a8c30 typos and more examples
aaron_watters
parents: 283
diff changeset
   398
page (if there are any further operations -- if not no
301
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   399
new page is created).  The $save$ method must be called after the
273
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   400
construction of the document is complete -- it generates the PDF
301
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   401
document, which is the whole purpose of the $canvas$ object.
273
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   402
""")
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   403
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   404
disc("""
301
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   405
Suppose the $hello$ function referenced above is implemented as
273
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   406
follows (we will not explain each of the operations in detail
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   407
yet).
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   408
""")
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   409
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   410
eg(examples.testhello)
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   411
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   412
disc("""
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   413
Examining this code notice that there are essentially two types
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   414
of operations performed using a canvas.  The first type draws something
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   415
on the page such as a text string or a rectangle or a line.  The second
283
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   416
type changes the state of the canvas such as
273
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   417
changing the current fill or stroke color or changing the current font
283
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   418
type and size.  
273
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   419
""")
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   420
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   421
disc("""
283
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   422
If we imagine the program as a painter working on
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   423
the canvas the "draw" operations apply paint to the canvas using
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   424
the current set of tools (colors, line styles, fonts, etcetera)
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   425
and the "state change" operations change one of the current tools
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   426
(changing the fill color from whatever it was to blue, or changing
301
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   427
the current font to $Times-Roman$ in 15 points, for example).
283
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   428
""")
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   429
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   430
disc("""
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   431
The document generated by the "hello world" program listed above would contain
273
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   432
the following graphics.
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   433
""")
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   434
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   435
canvasdemo(examples.hello)
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
   436
317
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   437
heading3("About the demos in this document")
283
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   438
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   439
disc("""
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   440
This document contains demonstrations of the code discussed like the one shown
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   441
in the rectangle above.  These demos are drawn on a "tiny page" embedded
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   442
within the real pages of the guide.  The tiny pages are %s inches wide
293
84a2635a8c30 typos and more examples
aaron_watters
parents: 283
diff changeset
   443
and %s inches tall.  The demo displays show the actual output of the demo
283
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   444
code.
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   445
""" % (examplefunctionxinches, examplefunctionyinches))
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   446
317
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   447
heading2('The tools: the "draw" operations')
283
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   448
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   449
disc("""
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   450
This section briefly lists the tools available to the program
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   451
for painting information onto a page using the canvas interface.
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   452
These will be discussed in detail in later sections.  They are listed
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   453
here for easy reference and for summary purposes.
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   454
""")
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   455
317
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   456
heading3("Line methods")
283
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   457
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   458
eg("""canvas.line(x1,y1,x2,y2)""")
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   459
eg("""canvas.lines(linelist)""")
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   460
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   461
disc("""
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   462
The line methods draw straight line segments on the canvas.
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   463
""")
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   464
317
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   465
heading3("Shape methods")
283
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   466
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   467
eg("""canvas.grid(xlist, ylist) """)
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   468
eg("""canvas.bezier(x1, y1, x2, y2, x3, y3, x4, y4)""")
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   469
eg("""canvas.arc(x1,y1,x2,y2) """)
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   470
eg("""canvas.rect(x, y, width, height, stroke=1, fill=0) """)
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   471
eg("""canvas.ellipse(x, y, width, height, stroke=1, fill=0)""")
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   472
eg("""canvas.wedge(x1,y1, x2,y2, startAng, extent, stroke=1, fill=0) """)
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   473
eg("""canvas.circle(x_cen, y_cen, r, stroke=1, fill=0)""")
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   474
eg("""canvas.roundRect(x, y, width, height, radius, stroke=1, fill=0) """)
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   475
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   476
disc("""
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   477
The shape methods draw common complex shapes on the canvas.
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   478
""")
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   479
317
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   480
heading3("String drawing methods")
283
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   481
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   482
eg("""canvas.drawString(x, y, text):""")
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   483
eg("""canvas.drawRightString(x, y, text) """)
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   484
eg("""canvas.drawCentredString(x, y, text)""")
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   485
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   486
disc("""
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   487
The draw string methods draw single lines of text on the canvas.
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   488
""")
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   489
317
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   490
heading3("The text object methods")
283
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   491
eg("""textobject = canvas.beginText(x, y) """)
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   492
eg("""canvas.drawText(textobject) """)
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   493
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   494
disc("""
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   495
Text objects are used to format text in ways that
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   496
are not supported directly by the canvas interface.
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   497
A program creates a text object from the canvas using beginText
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   498
and then formats text by invoking textobject methods.
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   499
Finally the textobject is drawn onto the canvas using
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   500
drawText.
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   501
""")
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   502
317
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   503
heading3("The path object methods")
283
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   504
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   505
eg("""path = canvas.beginPath() """)
293
84a2635a8c30 typos and more examples
aaron_watters
parents: 283
diff changeset
   506
eg("""canvas.drawPath(path, stroke=1, fill=0) """)
84a2635a8c30 typos and more examples
aaron_watters
parents: 283
diff changeset
   507
eg("""canvas.clipPath(path, stroke=1, fill=0) """)
283
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   508
317
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   509
heading3("Image methods")
283
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   510
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   511
eg("""canvas.drawInlineImage(self, image, x,y, width=None,height=None) """)
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   512
317
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   513
heading3("Ending a page")
283
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   514
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   515
eg("""canvas.showPage()""")
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   516
300
44c954f72e2b showPage resets all state parameters warning.
aaron_watters
parents: 299
diff changeset
   517
disc("""The showPage method finishes the current page.  All additional drawing will
44c954f72e2b showPage resets all state parameters warning.
aaron_watters
parents: 299
diff changeset
   518
be done on another page.""")
44c954f72e2b showPage resets all state parameters warning.
aaron_watters
parents: 299
diff changeset
   519
44c954f72e2b showPage resets all state parameters warning.
aaron_watters
parents: 299
diff changeset
   520
pencilnote()
44c954f72e2b showPage resets all state parameters warning.
aaron_watters
parents: 299
diff changeset
   521
44c954f72e2b showPage resets all state parameters warning.
aaron_watters
parents: 299
diff changeset
   522
disc("""Warning!  All state changes (font changes, color settings, geometry transforms, etcetera)
301
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   523
are FORGOTTEN when you advance to a new page in $pdfgen$.  Any state settings you wish to preserve
300
44c954f72e2b showPage resets all state parameters warning.
aaron_watters
parents: 299
diff changeset
   524
must be set up again before the program proceeds with drawing!""")
44c954f72e2b showPage resets all state parameters warning.
aaron_watters
parents: 299
diff changeset
   525
317
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   526
heading2('The toolbox: the "state change" operations')
283
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   527
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   528
disc("""
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   529
This section briefly lists the ways to switch the tools used by the
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   530
program
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   531
for painting information onto a page using the canvas interface.
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   532
These too will be discussed in detail in later sections.
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   533
""")
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   534
317
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   535
heading3("Changing Colors")
283
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   536
eg("""canvas.setFillColorCMYK(c, m, y, k) """)
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   537
eg("""canvas.setStrikeColorCMYK(c, m, y, k) """)
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   538
eg("""canvas.setFillColorRGB(r, g, b) """)
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   539
eg("""canvas.setStrokeColorRGB(r, g, b) """)
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   540
eg("""canvas.setFillColor(acolor) """)
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   541
eg("""canvas.setStrokeColor(acolor) """)
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   542
eg("""canvas.setFillGray(gray) """)
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   543
eg("""canvas.setStrokeGray(gray) """)
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   544
317
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   545
heading3("Changing Fonts")
283
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   546
eg("""canvas.setFont(psfontname, size, leading = None) """)
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   547
317
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   548
heading3("Changing Graphical Styles")
283
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   549
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   550
eg("""canvas.setLineWidth(width) """)
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   551
eg("""canvas.setLineCap(mode) """)
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   552
eg("""canvas.setLineJoin(mode) """)
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   553
eg("""canvas.setMiterLimit(limit) """)
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   554
eg("""canvas.setDash(self, array=[], phase=0) """)
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   555
317
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   556
heading3("Changing Geometry")
283
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   557
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   558
eg("""canvas.setPageSize(pair) """)
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   559
eg("""canvas.transform(a,b,c,d,e,f): """)
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   560
eg("""canvas.translate(dx, dy) """)
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   561
eg("""canvas.scale(x, y) """)
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   562
eg("""canvas.rotate(theta) """)
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   563
eg("""canvas.skew(alpha, beta) """)
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   564
317
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   565
heading3("State control")
283
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   566
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   567
eg("""canvas.saveState() """)
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   568
eg("""canvas.restoreState() """)
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   569
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   570
317
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   571
heading2("Other canvas methods.")
283
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   572
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   573
disc("""
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   574
Not all methods of the canvas object fit into the "tool" or "toolbox"
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   575
categories.  Below are some of the misfits, included here for completeness.
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   576
""")
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   577
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   578
eg("""
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   579
 canvas.setAuthor()
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   580
 canvas.addOutlineEntry(title, key, level=0, closed=None)
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   581
 canvas.setTitle(title)
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   582
 canvas.setSubject(subj)
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   583
 canvas.pageHasData()
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   584
 canvas.showOutline()
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   585
 canvas.bookmarkPage(name)
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   586
 canvas.bookmarkHorizontalAbsolute(name, yhorizontal)
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   587
 canvas.doForm()
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   588
 canvas.beginForm(name, lowerx=0, lowery=0, upperx=None, uppery=None)
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   589
 canvas.endForm()
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   590
 canvas.linkAbsolute(contents, destinationname, Rect=None, addtopage=1, name=None, **kw)
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   591
 canvas.getPageNumber()
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   592
 canvas.addLiteral()
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   593
 canvas.getAvailableFonts()
308
a09abac33167 Minor cosmetic changes
rgbecker
parents: 304
diff changeset
   594
 canvas.stringWidth(self, text, fontName, fontSize, encoding=None)
283
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   595
 canvas.setPageCompression(onoff=1)
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   596
 canvas.setPageTransition(self, effectname=None, duration=1, 
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   597
                        direction=0,dimension='H',motion='I')
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   598
""")
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   599
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   600
317
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   601
heading2('Coordinates (default user space)')
283
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   602
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   603
disc("""
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   604
By default locations on a page are identified by a pair of numbers.
301
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   605
For example the pair $(4.5*inch, 1*inch)$ identifies the location
283
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   606
found on the page by starting at the lower left corner and moving to
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   607
the right 4.5 inches and up one inch.
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   608
""")
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   609
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   610
disc("""For example, the following function draws
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   611
a number of elements on a canvas.""")
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   612
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   613
eg(examples.testcoords)
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   614
301
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   615
disc("""In the default user space the "origin" ^(0,0)^ point is at the lower
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   616
left corner.  Executing the $coords$ function in the default user space
283
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   617
(for the "demo minipage") we obtain the following.""")
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   618
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   619
canvasdemo(examples.coords)
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   620
317
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   621
heading3("Moving the origin: the $translate$ method")
283
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   622
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   623
disc("""Often it is useful to "move the origin" to a new point off
301
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   624
the lower left corner.  The $canvas.translate(^x,y^)$ method moves the origin
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   625
for the current page to the point currently identified by ^(x,y)^.""")
283
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   626
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   627
disc("""For example the following translate function first moves
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   628
the origin before drawing the same objects as shown above.""")
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   629
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   630
eg(examples.testtranslate)
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   631
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   632
disc("""This produces the following.""")
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   633
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   634
canvasdemo(examples.translate)
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   635
296
a5e584b6d61b Lots of graphical examples added
aaron_watters
parents: 293
diff changeset
   636
a5e584b6d61b Lots of graphical examples added
aaron_watters
parents: 293
diff changeset
   637
#canvasdemo(NOP) # execute some code
a5e584b6d61b Lots of graphical examples added
aaron_watters
parents: 293
diff changeset
   638
a5e584b6d61b Lots of graphical examples added
aaron_watters
parents: 293
diff changeset
   639
pencilnote()
a5e584b6d61b Lots of graphical examples added
aaron_watters
parents: 293
diff changeset
   640
a5e584b6d61b Lots of graphical examples added
aaron_watters
parents: 293
diff changeset
   641
283
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   642
disc("""
301
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   643
<i>Note:</i> As illustrated in the example it is perfectly possible to draw objects 
283
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   644
or parts of objects "off the page".
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   645
In particular a common confusing bug is a translation operation that translates the
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   646
entire drawing off the visible area of the page.  If a program produces a blank page
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   647
it is possible that all the drawn objects are off the page.
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   648
""")
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   649
317
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   650
heading3("Shrinking and growing: the scale operation")
283
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   651
301
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   652
disc("""Another important operation is scaling.  The scaling operation $canvas.scale(^dx,dy^)$
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   653
stretches or shrinks the ^x^ and ^y^ dimensions by the ^dx^, ^dy^ factors respectively.  Often
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   654
^dx^ and ^dy^ are the same -- for example to reduce a drawing by half in all dimensions use
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   655
$dx = dy = 0.5$.  However for the purposes of illustration we show an example where
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   656
$dx$ and $dy$ are different.
283
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   657
""")
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   658
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   659
eg(examples.testscale)
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   660
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   661
disc("""This produces a "short and fat" reduced version of the previously displayed operations.""")
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   662
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   663
canvasdemo(examples.scale)
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   664
296
a5e584b6d61b Lots of graphical examples added
aaron_watters
parents: 293
diff changeset
   665
a5e584b6d61b Lots of graphical examples added
aaron_watters
parents: 293
diff changeset
   666
#canvasdemo(NOP) # execute some code
a5e584b6d61b Lots of graphical examples added
aaron_watters
parents: 293
diff changeset
   667
a5e584b6d61b Lots of graphical examples added
aaron_watters
parents: 293
diff changeset
   668
pencilnote()
a5e584b6d61b Lots of graphical examples added
aaron_watters
parents: 293
diff changeset
   669
a5e584b6d61b Lots of graphical examples added
aaron_watters
parents: 293
diff changeset
   670
301
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   671
disc("""<i>Note:</i> scaling may also move objects or parts of objects off the page,
283
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   672
or may cause objects to "shrink to nothing." """)
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   673
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   674
disc("""Scaling and translation can be combined, but the order of the
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   675
operations are important.""")
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   676
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   677
eg(examples.testscaletranslate)
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   678
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   679
disc("""This example function first saves the current canvas state
301
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   680
and then does a $scale$ followed by a $translate$.  Afterward the function
283
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   681
restores the state (effectively removing the effects of the scaling and
301
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   682
translation) and then does the <i>same</i> operations in a different order.
283
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   683
Observe the effect below.""")
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   684
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   685
canvasdemo(examples.scaletranslate)
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   686
296
a5e584b6d61b Lots of graphical examples added
aaron_watters
parents: 293
diff changeset
   687
a5e584b6d61b Lots of graphical examples added
aaron_watters
parents: 293
diff changeset
   688
#canvasdemo(NOP) # execute some code
a5e584b6d61b Lots of graphical examples added
aaron_watters
parents: 293
diff changeset
   689
a5e584b6d61b Lots of graphical examples added
aaron_watters
parents: 293
diff changeset
   690
pencilnote()
a5e584b6d61b Lots of graphical examples added
aaron_watters
parents: 293
diff changeset
   691
a5e584b6d61b Lots of graphical examples added
aaron_watters
parents: 293
diff changeset
   692
283
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   693
disc("""<em>Note:</em> scaling shrinks or grows everything including line widths
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   694
so using the canvas.scale method to render a microscopic drawing in 
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   695
scaled microscopic units
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   696
may produce a blob (because all line widths will get expanded a huge amount).  
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   697
Also rendering an aircraft wing in meters scaled to centimeters may cause the lines
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   698
to shrink to the point where they disappear.  For engineering or scientific purposes
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   699
such as these scale and translate
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   700
the units externally before rendering them using the canvas.""")
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   701
317
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   702
heading3("Saving and restoring the canvas state: $saveState$ and $restoreState$")
283
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   703
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   704
disc("""
301
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   705
The $scaletranslate$ function used an important feature of the canvas object:
283
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   706
the ability to save and restore the current parameters of the canvas.
301
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   707
By enclosing a sequence of operations in a matching pair of $canvas.saveState()$
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   708
an $canvas.restoreState()$ operations all changes of font, color, line style,
283
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   709
scaling, translation, or other aspects of the canvas graphics state can be
301
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   710
restored to the state at the point of the $saveState()$.  Remember that the save/restore
283
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   711
calls must match: a stray save or restore operation may cause unexpected
301
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   712
and undesirable behavior.  Also, remember that <i>no</i> canvas state is
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   713
preserved across page breaks, and the save/restore mechanism does not work
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   714
across page breaks.
283
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   715
""")
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   716
317
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   717
heading3("Mirror image")
293
84a2635a8c30 typos and more examples
aaron_watters
parents: 283
diff changeset
   718
84a2635a8c30 typos and more examples
aaron_watters
parents: 283
diff changeset
   719
disc("""
84a2635a8c30 typos and more examples
aaron_watters
parents: 283
diff changeset
   720
It is interesting although perhaps not terribly useful to note that
84a2635a8c30 typos and more examples
aaron_watters
parents: 283
diff changeset
   721
scale factors can be negative.  For example the following function
84a2635a8c30 typos and more examples
aaron_watters
parents: 283
diff changeset
   722
""")
84a2635a8c30 typos and more examples
aaron_watters
parents: 283
diff changeset
   723
84a2635a8c30 typos and more examples
aaron_watters
parents: 283
diff changeset
   724
eg(examples.testmirror)
84a2635a8c30 typos and more examples
aaron_watters
parents: 283
diff changeset
   725
84a2635a8c30 typos and more examples
aaron_watters
parents: 283
diff changeset
   726
disc("""
301
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   727
creates a mirror image of the elements drawn by the $coord$ function.
293
84a2635a8c30 typos and more examples
aaron_watters
parents: 283
diff changeset
   728
""")
84a2635a8c30 typos and more examples
aaron_watters
parents: 283
diff changeset
   729
84a2635a8c30 typos and more examples
aaron_watters
parents: 283
diff changeset
   730
canvasdemo(examples.mirror)
84a2635a8c30 typos and more examples
aaron_watters
parents: 283
diff changeset
   731
84a2635a8c30 typos and more examples
aaron_watters
parents: 283
diff changeset
   732
disc("""
84a2635a8c30 typos and more examples
aaron_watters
parents: 283
diff changeset
   733
Notice that the text strings are painted backwards.
84a2635a8c30 typos and more examples
aaron_watters
parents: 283
diff changeset
   734
""")
84a2635a8c30 typos and more examples
aaron_watters
parents: 283
diff changeset
   735
317
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   736
heading2("Colors")
298
0e23c189f665 colors, line styles, more examples
aaron_watters
parents: 296
diff changeset
   737
301
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   738
disc("""
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   739
There are four way to specify colors in $pdfgen$: by name (using the $color$
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   740
module, by red/green/blue (additive, $RGB$) value,
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   741
by cyan/magenta/yellow/darkness (subtractive, $CMYK$), or by gray level.
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   742
The $colors$ function below exercises each of the four methods.
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   743
""")
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   744
298
0e23c189f665 colors, line styles, more examples
aaron_watters
parents: 296
diff changeset
   745
eg(examples.testcolors)
0e23c189f665 colors, line styles, more examples
aaron_watters
parents: 296
diff changeset
   746
301
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   747
disc("""
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   748
The $RGB$ or additive color specification follows the way a computer
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   749
screen adds different levels of the red, green, or blue light to make
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   750
any color, where white is formed by turning all three lights on full
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   751
$(1,1,1)$.""")
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   752
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   753
disc("""The $CMYK$ or subtractive method follows the way a printer
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   754
mixes three pigments (cyan, magenta, and yellow) to form colors.
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   755
Because mixing chemicals is more difficult than combining light there
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   756
is a fourth parameter for darkness.  For example a chemical
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   757
combination of the $CMY$ pigments generally never makes a perfect
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   758
black -- instead producing a muddy color -- so, to get black printers
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   759
don't use the $CMY$ pigments but use a direct black ink.  Because
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   760
$CMYK$ maps more directly to the way printer hardware works it may
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   761
be the case that colors specified in $CMYK$ will provide better fidelity
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   762
and better control when printed.
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   763
""")
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   764
298
0e23c189f665 colors, line styles, more examples
aaron_watters
parents: 296
diff changeset
   765
canvasdemo(examples.colors)
0e23c189f665 colors, line styles, more examples
aaron_watters
parents: 296
diff changeset
   766
317
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   767
heading2('Painting back to front')
283
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   768
301
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   769
disc("""
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   770
Objects may be painted over other objects to good effect in $pdfgen$.  As
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   771
in painting with oils the object painted last will show up on top.  For
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   772
example, the $spumoni$ function below paints up a base of colors and then
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   773
paints a white text over the base.
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   774
""")
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   775
283
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   776
eg(examples.testspumoni)
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   777
301
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   778
disc("""
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   779
The word "SPUMONI" is painted in white over the colored rectangles,
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   780
with the apparent effect of "removing" the color inside the body of
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   781
the word.
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   782
""")
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   783
283
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   784
canvasdemo(examples.spumoni)
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   785
301
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   786
disc("""
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   787
The last letters of the word are not visible because the default canvas
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   788
background is white and painting white letters over a white background
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   789
leaves no visible effect.
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   790
""")
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   791
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   792
disc("""
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   793
This method of building up complex paintings in layers can be done
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   794
in very many layers in $pdfgen$ -- there are fewer physical limitations
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   795
than there are when dealing with physical paints.
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   796
""")
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   797
283
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   798
eg(examples.testspumoni2)
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   799
301
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   800
disc("""
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   801
The $spumoni2$ function layers an ice cream cone over the
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   802
$spumoni$ drawing.  Note that different parts of the cone
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   803
and scoops layer over eachother as well.
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   804
""")
283
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   805
canvasdemo(examples.spumoni2)
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   806
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   807
317
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   808
heading2('Fonts and text objects')
283
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
   809
301
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   810
disc("""
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   811
Text may be drawn in many different colors, fonts, and sizes in $pdfgen$.
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   812
The $textsize$ function demonstrates how to change the color and font and
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   813
size of text and how to place text on the page.
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   814
""")
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   815
298
0e23c189f665 colors, line styles, more examples
aaron_watters
parents: 296
diff changeset
   816
eg(examples.testtextsize)
0e23c189f665 colors, line styles, more examples
aaron_watters
parents: 296
diff changeset
   817
301
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   818
disc("""
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   819
The $textsize$ function generates the following page.
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   820
""")
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   821
298
0e23c189f665 colors, line styles, more examples
aaron_watters
parents: 296
diff changeset
   822
canvasdemo(examples.textsize)
0e23c189f665 colors, line styles, more examples
aaron_watters
parents: 296
diff changeset
   823
301
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   824
disc("""
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   825
A number of different fonts are always available in $pdfgen$.
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   826
""")
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   827
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   828
eg(examples.testfonts)
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   829
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   830
disc("""
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   831
The $fonts$ function lists the fonts that are always available.
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   832
""")
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   833
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   834
canvasdemo(examples.fonts)
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   835
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   836
disc("""
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   837
Other fonts can be added to a PDF document as well.
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   838
""")
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   839
317
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   840
heading2("Text object methods")
298
0e23c189f665 colors, line styles, more examples
aaron_watters
parents: 296
diff changeset
   841
301
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   842
disc("""
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   843
For the dedicated presentation of text in a PDF document, use a text object.
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   844
The text object interface provides detailed control of text layout parameters
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   845
not available directly at the canvas level.
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   846
""")
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   847
299
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
   848
eg("""textobject.setTextOrigin(x,y)""")
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
   849
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
   850
eg("""textobject.setTextTransform(a,b,c,d,e,f)""")
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
   851
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
   852
eg("""textobject.moveCursor(dx, dy) # from start of current LINE""")
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
   853
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
   854
eg("""(x,y) = textobject.getCursor()""")
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
   855
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
   856
eg("""x = textobject.getX(); y = textobject.getY()""")
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
   857
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
   858
eg("""textobject.setFont(psfontname, size, leading = None)""")
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
   859
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
   860
eg("""textobject.textOut(text)""")
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
   861
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
   862
eg("""textobject.textLine(text='')""")
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
   863
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
   864
eg("""textobject.textLines(stuff, trim=1)""")
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
   865
301
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   866
disc("""
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   867
The text object methods shown above relate to basic text geometry.
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   868
""")
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   869
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   870
disc("""
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   871
A text object maintains a text cursor which moves about the page when 
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   872
text is drawn.  For example the $setTextOrigin$ places the cursor
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   873
in a known position and the $textLine$ and $textLines$ methods move
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   874
the text cursor down past the lines that have been missing.
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   875
""")
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   876
299
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
   877
eg(examples.testcursormoves1)
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
   878
301
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   879
disc("""
304
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
   880
The $cursormoves$ function relies on the automatic
301
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   881
movement of the text cursor for placing text after the origin
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   882
has been set.
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   883
""")
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   884
299
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
   885
canvasdemo(examples.cursormoves1)
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
   886
301
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   887
disc("""
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   888
It is also possible to control the movement of the cursor
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   889
more explicitly by using the $moveCursor$ method (which moves
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   890
the cursor as an offset from the start of the current <i>line</i>
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   891
NOT the current cursor, and which also has positive ^y^ offsets
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   892
move <i>down</i> (in contrast to the normal geometry where
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   893
positive ^y^ usually moves up.
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   894
""")
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   895
299
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
   896
eg(examples.testcursormoves2)
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
   897
301
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   898
disc("""
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   899
Here the $textOut$ does not move the down a line in contrast
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   900
to the $textLine$ function which does move down.
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   901
""")
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   902
299
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
   903
canvasdemo(examples.cursormoves2)
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
   904
317
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   905
heading3("Character Spacing")
301
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   906
299
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
   907
eg("""textobject.setCharSpace(charSpace)""")
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
   908
301
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   909
disc("""The $setCharSpace$ method adjusts one of the parameters of text -- the inter-character
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   910
spacing.""")
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   911
299
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
   912
eg(examples.testcharspace)
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
   913
301
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   914
disc("""The 
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   915
$charspace$ function exercises various spacing settings.
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   916
It produces the following page.""")
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   917
304
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
   918
canvasdemo(examples.charspace)
301
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
   919
317
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   920
heading3("Word Spacing")
299
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
   921
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
   922
eg("""textobject.setWordSpace(wordSpace)""")
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
   923
304
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
   924
disc("The $setWordSpace$ method adjusts the space between word.")
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
   925
299
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
   926
eg(examples.testwordspace)
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
   927
304
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
   928
disc("""The $wordspace$ function shows what various word space settings
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
   929
look like below.""")
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
   930
299
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
   931
canvasdemo(examples.wordspace)
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
   932
317
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   933
heading3("Horizontal Scaling")
304
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
   934
299
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
   935
eg("""textobject.setHorizScale(horizScale)""")
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
   936
304
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
   937
disc("""Lines of text can be stretched or shrunken horizontally by the 
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
   938
$setHorizScale$ method.""")
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
   939
299
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
   940
eg(examples.testhorizontalscale)
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
   941
304
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
   942
disc("""The horizontal scaling parameter ^horizScale^
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
   943
is given in percentages (with 100 as the default), so the 80 setting
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
   944
shown below looks skinny.
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
   945
""")
299
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
   946
canvasdemo(examples.horizontalscale)
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
   947
317
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   948
heading3("Interline spacing (Leading)")
304
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
   949
299
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
   950
eg("""textobject.setLeading(leading)""")
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
   951
304
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
   952
disc("""The vertical offset between the point at which one
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
   953
line starts and where the next starts is called the leading
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
   954
offset.  The $setLeading$ method adjusts the leading offset.
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
   955
""")
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
   956
299
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
   957
eg(examples.testleading)
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
   958
304
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
   959
disc("""As shown below if the leading offset is set too small
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
   960
characters of one line my write over the bottom parts of characters
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
   961
in the previous line.""")
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
   962
299
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
   963
canvasdemo(examples.leading)
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
   964
317
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   965
heading3("Other text object methods")
304
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
   966
299
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
   967
eg("""textobject.setTextRenderMode(mode)""")
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
   968
304
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
   969
disc("""The $setTextRenderMode$ method allows text to be used
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
   970
as a forground for clipping background drawings, for example.""")
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
   971
299
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
   972
eg("""textobject.setRise(rise)""")
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
   973
304
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
   974
disc("""
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
   975
The $setRise$ method <super>raises</super> or <sub>lowers</sub> text on the line
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
   976
(for creating superscripts or subscripts, for example).
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
   977
""")
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
   978
299
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
   979
eg("""textobject.setFillColor(aColor); 
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
   980
textobject.setStrokeColor(self, aColor) 
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
   981
# and similar""")
298
0e23c189f665 colors, line styles, more examples
aaron_watters
parents: 296
diff changeset
   982
304
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
   983
disc("""
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
   984
These color change operations change the <font color=darkviolet>color</font> of the text and are otherwise
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
   985
similar to the color methods for the canvas object.""")
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
   986
317
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
   987
heading2('Paths and Lines')
298
0e23c189f665 colors, line styles, more examples
aaron_watters
parents: 296
diff changeset
   988
304
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
   989
disc("""Just as textobjects are designed for the dedicated presentation
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
   990
of text, path objects are designed for the dedicated construction of
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
   991
graphical figures.  When path objects are drawn onto a canvas they are
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
   992
are drawn as one figure (like a rectangle) and the mode of drawing
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
   993
for the entire figure can be adjusted: the lines of the figure can
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
   994
be drawn (stroked) or not; the interior of the figure can be filled or
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
   995
not; and so forth.""")
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
   996
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
   997
disc("""
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
   998
For example the $star$ function uses a path object
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
   999
to draw a star
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1000
""")
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1001
298
0e23c189f665 colors, line styles, more examples
aaron_watters
parents: 296
diff changeset
  1002
eg(examples.teststar)
0e23c189f665 colors, line styles, more examples
aaron_watters
parents: 296
diff changeset
  1003
304
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1004
disc("""
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1005
The $star$ function has been designed to be useful in illustrating
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1006
various line style parameters supported by $pdfgen$.
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1007
""")
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1008
298
0e23c189f665 colors, line styles, more examples
aaron_watters
parents: 296
diff changeset
  1009
canvasdemo(examples.star)
0e23c189f665 colors, line styles, more examples
aaron_watters
parents: 296
diff changeset
  1010
317
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
  1011
heading3("Line join settings")
304
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1012
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1013
disc("""
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1014
The $setLineJoin$ method can adjust whether line segments meet in a point
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1015
a square or a rounded vertex.
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1016
""")
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1017
298
0e23c189f665 colors, line styles, more examples
aaron_watters
parents: 296
diff changeset
  1018
eg(examples.testjoins)
0e23c189f665 colors, line styles, more examples
aaron_watters
parents: 296
diff changeset
  1019
304
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1020
disc("""
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1021
The line join setting is only really of interest for thick lines because
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1022
it cannot be seen clearly for thin lines.
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1023
""")
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1024
298
0e23c189f665 colors, line styles, more examples
aaron_watters
parents: 296
diff changeset
  1025
canvasdemo(examples.joins)
0e23c189f665 colors, line styles, more examples
aaron_watters
parents: 296
diff changeset
  1026
317
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
  1027
heading3("Line cap settings")
304
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1028
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1029
disc("""The line cap setting, adjusted using the $setLineCap$ method,
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1030
determines whether a terminating line
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1031
ends in a square exactly at the vertex, a square over the vertex
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1032
or a half circle over the vertex.
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1033
""")
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1034
298
0e23c189f665 colors, line styles, more examples
aaron_watters
parents: 296
diff changeset
  1035
eg(examples.testcaps)
0e23c189f665 colors, line styles, more examples
aaron_watters
parents: 296
diff changeset
  1036
304
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1037
disc("""The line cap setting, like the line join setting, is only
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1038
visible when the lines are thick.""")
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1039
298
0e23c189f665 colors, line styles, more examples
aaron_watters
parents: 296
diff changeset
  1040
canvasdemo(examples.caps)
0e23c189f665 colors, line styles, more examples
aaron_watters
parents: 296
diff changeset
  1041
317
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
  1042
heading3("Dashes and broken lines")
304
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1043
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1044
disc("""
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1045
The $setDash$ method allows lines to be broken into dots or dashes.
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1046
""")
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1047
298
0e23c189f665 colors, line styles, more examples
aaron_watters
parents: 296
diff changeset
  1048
eg(examples.testdashes)
0e23c189f665 colors, line styles, more examples
aaron_watters
parents: 296
diff changeset
  1049
304
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1050
disc("""
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1051
The patterns for the dashes or dots can be in a simple on/off repeating pattern
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1052
or they can be specified in a complex repeating pattern.
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1053
""")
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1054
298
0e23c189f665 colors, line styles, more examples
aaron_watters
parents: 296
diff changeset
  1055
canvasdemo(examples.dashes)
283
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
  1056
317
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
  1057
heading3("Creating complex figures with path objects")
304
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1058
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1059
disc("""
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1060
Combinations of lines, curves, arcs and other figures
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1061
can be combined into a single figure using path objects.
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1062
For example the function shown below constructs two path
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1063
objects using lines and curves.  
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1064
This function will be used later on as part of a
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1065
pencil icon construction.
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1066
""")
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1067
296
a5e584b6d61b Lots of graphical examples added
aaron_watters
parents: 293
diff changeset
  1068
eg(examples.testpenciltip)
a5e584b6d61b Lots of graphical examples added
aaron_watters
parents: 293
diff changeset
  1069
304
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1070
disc("""
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1071
Note that the interior of the pencil tip is filled
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1072
as one object even though it is constructed from
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1073
several lines and curves.  The pencil lead is then
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1074
drawn over it using a new path object.
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1075
""")
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1076
296
a5e584b6d61b Lots of graphical examples added
aaron_watters
parents: 293
diff changeset
  1077
canvasdemo(examples.penciltip)
a5e584b6d61b Lots of graphical examples added
aaron_watters
parents: 293
diff changeset
  1078
317
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
  1079
heading2('Rectangles, circles, ellipses')
283
50f6c1be3e51 2nd try. more text
aaron_watters
parents: 273
diff changeset
  1080
304
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1081
disc("""
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1082
The $pdfgen$ module supports a number of generally useful shapes
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1083
such as rectangles, rounded rectangles, ellipses, and circles.
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1084
Each of these figures can be used in path objects or can be drawn
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1085
directly on a canvas.  For example the $pencil$ function below
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1086
draws a pencil icon using rectangles and rounded rectangles with
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1087
various fill colors and a few other annotations.
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1088
""")
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1089
296
a5e584b6d61b Lots of graphical examples added
aaron_watters
parents: 293
diff changeset
  1090
eg(examples.testpencil)
a5e584b6d61b Lots of graphical examples added
aaron_watters
parents: 293
diff changeset
  1091
304
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1092
pencilnote()
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1093
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1094
disc("""
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1095
Note that this function is used to create the "margin pencil" to the left.
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1096
Also note that the order in which the elements are drawn are important
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1097
because, for example, the white rectangles "erase" parts of a black rectangle
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1098
and the "tip" paints over part of the yellow rectangle.
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1099
""")
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1100
296
a5e584b6d61b Lots of graphical examples added
aaron_watters
parents: 293
diff changeset
  1101
canvasdemo(examples.pencil)
a5e584b6d61b Lots of graphical examples added
aaron_watters
parents: 293
diff changeset
  1102
317
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
  1103
heading2('Bezier curves')
273
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
  1104
304
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1105
disc("""
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1106
Programs that wish to construct figures with curving borders
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1107
generally use Bezier curves to form the borders.
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1108
""")
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1109
293
84a2635a8c30 typos and more examples
aaron_watters
parents: 283
diff changeset
  1110
eg(examples.testbezier)
84a2635a8c30 typos and more examples
aaron_watters
parents: 283
diff changeset
  1111
304
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1112
disc("""
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1113
A Bezier curve is specified by four control points 
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1114
$(x1,y1)$, $(x2,y2)$, $(x3,y3)$, $(x4,y4)$.
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1115
The curve starts at $(x1,y1)$ and ends at $(x4,y4)$
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1116
and the line segment from $(x1,y1)$ to $(x2,y2)$
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1117
and the line segment from $(x3,y3)$ to $(x4,y4)$
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1118
both form tangents to the curve.  Furthermore the
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1119
curve is entirely contained in the convex figure with vertices
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1120
at the control points.
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1121
""")
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1122
293
84a2635a8c30 typos and more examples
aaron_watters
parents: 283
diff changeset
  1123
canvasdemo(examples.bezier)
84a2635a8c30 typos and more examples
aaron_watters
parents: 283
diff changeset
  1124
304
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1125
disc("""
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1126
The drawing above (the output of $testbezier$) shows
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1127
a bezier curves, the tangent lines defined by the control points
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1128
and the convex figure with vertices at the control points.
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1129
""")
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1130
317
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
  1131
heading3("Smoothly joining bezier curve sequences")
304
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1132
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1133
disc("""
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1134
It is often useful to join several bezier curves to form a
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1135
single smooth curve.  To construct a larger smooth curve from
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1136
several bezier curves make sure that the tangent lines to adjacent
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1137
bezier curves that join at a control point lie on the same line.
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1138
""")
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1139
293
84a2635a8c30 typos and more examples
aaron_watters
parents: 283
diff changeset
  1140
eg(examples.testbezier2)
84a2635a8c30 typos and more examples
aaron_watters
parents: 283
diff changeset
  1141
304
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1142
disc("""
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1143
The figure created by $testbezier2$ describes a smooth
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1144
complex curve because adjacent tangent lines "line up" as
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1145
illustrated below.
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1146
""")
3d53a0b5d429 text text and more text
aaron_watters
parents: 301
diff changeset
  1147
293
84a2635a8c30 typos and more examples
aaron_watters
parents: 283
diff changeset
  1148
canvasdemo(examples.bezier2)
84a2635a8c30 typos and more examples
aaron_watters
parents: 283
diff changeset
  1149
317
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
  1150
heading2("Path object methods")
298
0e23c189f665 colors, line styles, more examples
aaron_watters
parents: 296
diff changeset
  1151
299
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
  1152
eg("""pathobject.moveTo(x,y)""")
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
  1153
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
  1154
eg("""pathobject.lineTo(x,y)""")
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
  1155
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
  1156
eg("""pathobject.curveTo(x1, y1, x2, y2, x3, y3) """)
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
  1157
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
  1158
eg("""pathobject.arc(x1,y1, x2,y2, startAng=0, extent=90) """)
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
  1159
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
  1160
eg("""pathobject.arcTo(x1,y1, x2,y2, startAng=0, extent=90) """)
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
  1161
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
  1162
eg("""pathobject.rect(x, y, width, height) """)
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
  1163
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
  1164
eg("""pathobject.ellipse(x, y, width, height)""")
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
  1165
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
  1166
eg("""pathobject.circle(x_cen, y_cen, r) """)
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
  1167
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
  1168
eg("""pathobject.close() """)
909b83ce750c textobject and pathobject methods, among other things
aaron_watters
parents: 298
diff changeset
  1169
301
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
  1170
eg(examples.testhand)
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
  1171
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
  1172
canvasdemo(examples.hand)
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
  1173
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
  1174
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
  1175
eg(examples.testhand2)
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
  1176
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
  1177
canvasdemo(examples.hand2)
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
  1178
5ad57f31ae75 added quickhack for font changes in paragraphs and lots of new text
aaron_watters
parents: 300
diff changeset
  1179
298
0e23c189f665 colors, line styles, more examples
aaron_watters
parents: 296
diff changeset
  1180
##### FILL THEM IN
0e23c189f665 colors, line styles, more examples
aaron_watters
parents: 296
diff changeset
  1181
317
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
  1182
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
  1183
heading1("Exposing PDF Special Capabilities")
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
  1184
disc("""PDF provides a number of features to make electronic
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
  1185
    document viewing more efficient and comfortable, and
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
  1186
    our library exposes a number of these.""")
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
  1187
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
  1188
heading2("Forms")
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
  1189
heading2("Links and Destinations")
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
  1190
heading2("Outline Trees")
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
  1191
heading2("Page Transition Effects")
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
  1192
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
  1193
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
  1194
296
a5e584b6d61b Lots of graphical examples added
aaron_watters
parents: 293
diff changeset
  1195
a5e584b6d61b Lots of graphical examples added
aaron_watters
parents: 293
diff changeset
  1196
#####################################################################################################3
a5e584b6d61b Lots of graphical examples added
aaron_watters
parents: 293
diff changeset
  1197
317
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
  1198
heading1("PLATYPUS - Page Layout and Typography Using Scripts")
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
  1199
heading2("Design Goals")
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
  1200
heading2("Frames and Flowables")
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
  1201
heading2("Paragraphs in detail")
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
  1202
heading2("Tables")
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
  1203
heading2("Custom Flowable Objects")
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
  1204
heading3("A very simple Flowable")
296
a5e584b6d61b Lots of graphical examples added
aaron_watters
parents: 293
diff changeset
  1205
a5e584b6d61b Lots of graphical examples added
aaron_watters
parents: 293
diff changeset
  1206
eg(examples.testnoteannotation)
317
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
  1207
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
  1208
heading2("Document Templates")
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
  1209
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
  1210
heading1("Future Directions")
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
  1211
fce6dad947c3 Pushed down most existing lessons one level; added
andy_robinson
parents: 314
diff changeset
  1212
273
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
  1213
    
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
  1214
if __name__=="__main__":
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
  1215
    g = Guide()
cd705b27b6a5 initial checkin. user guide generation framework.
aaron_watters
parents:
diff changeset
  1216
    g.go()
308
a09abac33167 Minor cosmetic changes
rgbecker
parents: 304
diff changeset
  1217