docs/userguide/platdemos.py
changeset 256 0dedfa161b21
child 320 7a4ca2b5bb89
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/docs/userguide/platdemos.py	Mon Jun 05 16:38:53 2000 +0000
@@ -0,0 +1,133 @@
+#platdemos.py
+"""This includes some demos of platypus for use in the API proposal"""
+from reportlab.lib import colors
+from reportlab.pdfgen.canvas import Canvas
+from reportlab.lib.styles import ParagraphStyle
+from reportlab.platypus import Frame
+from reportlab.platypus import Flowable
+from reportlab.platypus import Paragraph
+from reportlab.lib.units import inch
+from reportlab.lib.enums import TA_LEFT, TA_RIGHT, TA_CENTER
+
+captionStyle = ParagraphStyle('Caption',
+                       fontName='Times-Italic',
+                       fontSize=10,
+                       alignment=TA_CENTER)
+
+
+class Figure(Flowable):
+    def __init__(self, width, height):
+        Flowable.__init__(self)
+        self.width = width
+        self.figureHeight = height
+        self.captionHeight = 0  # work out later
+        self.caption = None
+        self.captionStyle = ParagraphStyle('Default')
+        self.spaceBefore = 12
+        self.spaceAfter = 12
+
+    def wrap(self, availWidth, availHeight):
+        # try to get the caption aligned
+        self.captionPara = Paragraph(self.caption, self.captionStyle)
+        (w, h) = self.captionPara.wrap(self.width, availHeight - self.figureHeight)
+        self.captionHeight = h
+        self.height = self.captionHeight + self.figureHeight
+        self.dx = 0.5 * (availWidth - self.width)
+        return (self.width, self.height)
+
+    def draw(self):
+        self.canv.translate(self.dx, 0)
+        self.drawCaption()
+        self.canv.translate(0, self.captionHeight)
+        self.drawBorder()
+        self.drawFigure()
+        
+    def drawBorder(self):
+        self.canv.rect(0, 0, self.width, self.figureHeight)
+
+    def drawCaption(self):
+        self.captionPara.drawOn(self.canv, 0, 0)
+
+    def drawFigure(self):
+        pass
+
+def drawPage(canvas,x, y, width, height):
+    #draws something which looks like a page
+    pth = canvas.beginPath()
+    corner = 0.05*width
+
+    # shaded backdrop offset a little    
+    canvas.setFillColorRGB(0.5,0.5,0.5)
+    canvas.rect(x + corner, y - corner, width, height, stroke=0, fill=1)
+
+    #'sheet of paper' in light yellow
+    canvas.setFillColorRGB(1,1,0.9)
+    canvas.setLineWidth(0)
+    canvas.rect(x, y, width, height, stroke=1, fill=1)
+
+    #reset    
+    canvas.setFillColorRGB(0,0,0)
+    canvas.setStrokeColorRGB(0,0,0)
+    
+
+
+class PageFigure(Figure):
+    """Shows a blank page in a frame, and draws on that.  Used in
+    illustrations."""
+    def __init__(self):
+        Figure.__init__(self, 3*inch, 3*inch)
+        self.caption = 'Figure 1 - a blank page'
+        self.captionStyle = captionStyle
+
+    def drawVirtualPage(self):
+        pass
+
+    def drawFigure(self):
+        drawPage(self.canv, 0.625*inch, 0.25*inch, 1.75*inch, 2.5*inch)
+        self.canv.translate(0.625*inch, 0.25*inch)
+        self.canv.scale(1.75/8.27, 2.5/11.69)
+        self.drawVirtualPage()
+
+class PlatPropFigure1(PageFigure):
+    """This shows a page with a frame on it"""
+    def __init__(self):
+        PageFigure.__init__(self)
+        self.caption = "Figure 1 - a page with a simple frame"
+    def drawVirtualPage(self):
+        demo1(self.canv)
+
+
+def demo1(canvas):
+    frame = Frame(
+                    2*inch,     # x
+                    4*inch,     # y at bottom
+                    4*inch,     # width
+                    5*inch,     # height
+                    showBoundary = 1  # helps us see what's going on
+                    )
+
+    bodyStyle = ParagraphStyle('Body',
+                       fontName='Times-Roman',
+                       fontSize=24,
+                       leading=28,
+                       spaceBefore=6)
+
+    para1 = Paragraph('Spam spam spam spam. ' * 5, bodyStyle)
+    para2 = Paragraph('Eggs eggs eggs. ' * 5, bodyStyle)
+
+    mydata = [para1, para2]
+
+    #this does the packing and drawing.  The frame will consume
+    #items from the front of the list as it prints them
+    frame.addFromList(mydata,canvas)
+
+
+def test1():
+    c  = Canvas('platdemos.pdf')
+    f = Frame(inch, inch, 6*inch, 9*inch, showBoundary=1)
+    v = PlatPropFigure1()
+    f.addFromList([v],c)
+    c.save()
+    
+if __name__ == '__main__':
+    test1()