def drawBackground(self, canvas): underkant = 5.0/6.0 * inch # a4 format spec: # http://www.cl.cam.ac.uk/~mgk25/iso-paper.html # 210 x 297 # faktura spek: # Norsk Standard Skjema F60-1 # url: http://code.google.com/p/finfaktura/issues/detail?id=38 canvas.saveState() canvas.setFillColor(yellow) # Yellow bits; skipping the receipt area. # Lag de gule feltene #canvas.rect(0*mm, 101*mm, 210*mm, 21*mm, stroke=0, fill=1) canvas.rect(0*mm, 33*mm, 210*mm, 9*mm, stroke=0, fill=1) canvas.rect(0*mm, 14*mm, 210*mm, 2*mm, stroke=0, fill=1) canvas.setFillColor(white) # Legg de hvite feltene oppå for "gjennomsiktighet" canvas.rect(80*mm, 103*mm, 36*mm, 9*mm, stroke=0, fill=1) # beløp canvas.rect(126*mm, 103*mm, 40*mm, 9*mm, stroke=0, fill=1) # betalerens kontonummer canvas.rect(170*mm, 103*mm, 31*mm, 9*mm, stroke=0, fill=1) # blankettnummer canvas.restoreState() # skillelinjer for KID canvas.lines([(9*mm, 16*mm, 9*mm, 30*mm), (80*mm, 16*mm, 80*mm, 30*mm)]) # blankettnummer #canvas.setFont("Courier", 10) #blankettnr = "xxxxxxx" #canvas.drawString(173*mm, 105*mm, blankettnr) #canvas.drawString(173*mm, underkant, blankettnr) # Lag klammer for kontrollsiffer til sum. canvas.drawString(115*mm, underkant, "<") canvas.drawString(125*mm, underkant, ">") # Lag tekst som beskriver feltene. canvas.setFont("Helvetica-Bold", 6) canvas.drawString(15*mm, 98*mm, "Betalingsinformasjon") canvas.drawString(10*mm,30*mm,"Kundeidentifikasjon (KID)") canvas.drawString(82*mm,30*mm,"Kroner") canvas.drawString(107*mm,30*mm,"Øre") canvas.drawString(133*mm,30*mm,"Til konto") canvas.drawString(172*mm,30*mm,"Blankettnummer") canvas.drawString(150*mm,98*mm,"Betalings-") canvas.drawString(150*mm,95*mm,"frist") # Lag hjørneklammer rundt alle tekstfelt self.markField(canvas, 12*mm,64*mm, 86*mm, -21*mm, "Betalt av") self.markField(canvas, 110*mm,64*mm, 86*mm, -21*mm, "Betalt til") self.markField(canvas, 110*mm,89*mm, 86*mm, -19*mm, "Underskrift ved girering") self.markField(canvas, 166*mm,99*mm, 30*mm, -6*mm) # Betalingsfrist. # Add the all-important "GIRO" text. It seems to do wonders for the recognition. canvas.setFont('Helvetica-Bold', 14) canvas.drawString(110*mm, 98*mm, "GIRO")
def markField(self, canvas, punktX, punktY, deltaX, deltaY, tekst=None): """En fullstendig giro har hjørneklammer rundt hvert tekstfelt. PunktX og punktY setter øverste venstre hjørne i "boksen". deltaX og deltaY angir relativ avstand til nederste høyre hjørne.""" # Oppe i venstre hjørne P(12,65) canvas.setLineWidth(0.2*mm) canvas.lines([(punktX, punktY, punktX+2*mm, punktY), (punktX, punktY-2*mm, punktX, punktY)]) # oppe i høyre hjørne P(98,65) canvas.lines([(punktX+deltaX-2*mm, punktY, punktX+deltaX, punktY), (punktX+deltaX, punktY-2*mm, punktX+deltaX, punktY)]) # Nede i venstre hjørne P(12,43) canvas.lines([(punktX, punktY+deltaY, punktX+2*mm, punktY+deltaY), (punktX, punktY+deltaY, punktX, punktY+deltaY+2*mm)]) # Nede i høyre hjørne P(98,43) # deltaX = 86, deltaY = -22 canvas.lines([(punktX+deltaX-2*mm, punktY+deltaY, punktX+deltaX, punktY+deltaY), (punktX+deltaX, punktY+deltaY, punktX+deltaX, punktY+deltaY+2*mm)]) if isinstance(tekst, basestring): # skriv hjelpetekst til boksen canvas.setFont("Helvetica-Bold", 6) canvas.drawString(punktX+3*mm,punktY+1*mm, tekst)
from reportlab.lib.pagesizes import letter from reportlab.pdfgen import canvas canvas = canvas.Canvas("information.pdf", pagesize=letter) from reportlab.lib.units import inch import time canvas.setLineWidth(.3) canvas.setFont('Helvetica', 16) canvas.drawString(300, 750, "Sydney") canvas.line(300, 747, 355, 747) canvas.setFont('Helvetica', 12) canvas.drawString(450, 735, time.asctime(time.localtime())) canvas.drawString(30, 700, "System Details :") crosshairs = [(20, 0, 20, 10), (20, 30, 20, 40), (0, 20, 10, 20), (3, 20, 40, 20)] canvas.lines(crosshairs) canvas.save()
def drawFirstPage(canvas, doc): canvas.saveState() # Title text tobj = canvas.beginText() tobj.setTextOrigin(doc.leftMargin, doc.pagesize[1] - doc.topMargin - 24) tobj.setFont('Helvetica-Bold', 32) tobj.setLeading(22) tobj.textLine('NavPlot') tobj.setFont('Helvetica', 16) tobj.textLine('Navigation warnings for: %s' % doc.dateStr) canvas.drawText(tobj) # Small print canvas.setFont('Helvetica', 10) canvas.drawString(doc.leftMargin, doc.bottomMargin, "THIS IS AN UNOFFICAL BRIEFING. Use at your own risk.") #canvas.drawRightString(doc.pagesize[0] - doc.rightMargin, doc.bottomMargin, # "Data \N{COPYRIGHT SIGN} NATS Ltd.") # Clipping rectangle for the map path = canvas.beginPath() path.rect(doc.leftMargin, doc.bottomMargin + doc.bottomOffset, doc.mapwidth, doc.mapheight) canvas.clipPath(path) # Drawing style for the map canvas.setLineWidth(0.5) canvas.setFillColor(gray) # Draw the other map stuff. Coordinate file must be in mapinfo format. # Coast line from http://rimmer.ngdc.noaa.gov/mgg/coast/getcoast.html moveFlag = True path = canvas.beginPath() map_data = doc.map_data for lin in map_data.splitlines(): try: lon, lat = map(float, lin.split()) except: moveFlag = True continue x, y = doc.latlon2xy(lat, lon) if moveFlag: path.moveTo(x, y) moveFlag = False else: path.lineTo(x, y) canvas.setStrokeColor(darkgray) canvas.drawPath(path) # Draw some gliding sites canvas.setStrokeColor(gray) delta = 2.5 * mm for gs in GLIDING_SITES: x, y = doc.latlon2xy(*GLIDING_SITES[gs]) canvas.lines( ((x, y + delta, x, y - delta), (x - delta, y, x + delta, y))) canvas.drawString(x + mm, y + mm, gs) # Draw NOTAM areas canvas.setStrokeColor(blue) canvas.setFillColor(black) canvas.setLineWidth(0.5) for n, notam in enumerate(doc.notams): x, y = doc.latlon2xy(notam[0], notam[1]) radius = notam[2] / 60.0 * doc.scale canvas.circle(x, y, radius) if radius / mm < 3: x1 = x + radius / 1.41 + mm / 2 y1 = y + radius / 1.41 + mm / 2 canvas.line(x, y, x1, y1) canvas.drawString(x1, y1, str(n + 1)) else: canvas.drawCentredString(x, y - 3, str(n + 1)) canvas.restoreState()
def drawFirstPage(canvas, doc): canvas.saveState() # Title text tobj = canvas.beginText() tobj.setTextOrigin(doc.leftMargin, doc.pagesize[1] - doc.topMargin - 24) tobj.setFont('Helvetica-Bold', 32) tobj.setLeading(22) firstr = '/'.join(doc.firs) tobj.textLine('NavPlot') tobj.setFont('Helvetica', 16) tobj.textLine('%s Navigation warnings for: %s' % (firstr, doc.dateStr)) canvas.drawText(tobj) # Small print canvas.setFont('Helvetica', 10) canvas.drawString(doc.leftMargin, doc.bottomMargin, "IMPORTANT: Do not rely on this map - check NOTAM's from an official "\ "source. Data "+UTF8_COPYRIGHT_SIGN+' '+doc.copyright_holder) # Clipping rectangle for the map path = canvas.beginPath() path.rect(doc.leftMargin, doc.bottomMargin + doc.bottomOffset, doc.mapwidth, doc.mapheight) canvas.clipPath(path) # Drawing style for the map canvas.setLineWidth(0.5) canvas.setFillColor(gray) # Draw the other map stuff. Coordinate file must be in mapinfo format. # Coast line from http://rimmer.ngdc.noaa.gov/mgg/coast/getcoast.html moveFlag = True path = canvas.beginPath() map_data = doc.map_data for lin in map_data.splitlines(): if lin[0] != '#': lon, lat = map(float, lin.split('\t')) x, y = doc.latlon2xy(lat, lon) if moveFlag: path.moveTo(x, y) moveFlag = False else: path.lineTo(x, y) else: moveFlag = True canvas.setStrokeColor(darkgray) canvas.drawPath(path) # Draw some gliding sites canvas.setStrokeColor(gray) delta = 2.5 * mm for gs in GLIDING_SITES: x, y = doc.latlon2xy(*GLIDING_SITES[gs]) canvas.lines( ((x, y + delta, x, y - delta), (x - delta, y, x + delta, y))) canvas.drawString(x + mm, y + mm, gs) # Draw NOTAM areas canvas.setStrokeColor(blue) canvas.setFillColor(black) canvas.setLineWidth(0.5) for n, notam in enumerate(doc.notams): x, y = doc.latlon2xy(notam[0], notam[1]) radius = notam[2] / 60.0 * doc.scale canvas.circle(x, y, radius) if radius / mm < 3: x1 = x + radius / 1.41 + mm / 2 y1 = y + radius / 1.41 + mm / 2 canvas.line(x, y, x1, y1) canvas.drawString(x1, y1, str(n + 1)) else: canvas.drawCentredString(x, y - 3, str(n + 1)) canvas.restoreState()
def drawFirstPage(canvas, doc): canvas.saveState() # Title text tobj = canvas.beginText() tobj.setTextOrigin(doc.leftMargin, doc.pagesize[1]-doc.topMargin-24) tobj.setFont('Helvetica-Bold', 32) tobj.setLeading(22) firstr = '/'.join(doc.firs) tobj.textLine('NavPlot') tobj.setFont('Helvetica', 16) tobj.textLine('%s Navigation warnings for: %s' % (firstr, doc.dateStr)) canvas.drawText(tobj) # Small print canvas.setFont('Helvetica', 10) canvas.drawString(doc.leftMargin, doc.bottomMargin, "IMPORTANT: Do not rely on this map - check NOTAM's from an official "\ "source. Data "+UTF8_COPYRIGHT_SIGN+' '+doc.copyright_holder) # Clipping rectangle for the map path = canvas.beginPath() path.rect(doc.leftMargin, doc.bottomMargin+doc.bottomOffset, doc.mapwidth, doc.mapheight) canvas.clipPath(path) # Drawing style for the map canvas.setLineWidth(0.5) canvas.setFillColor(gray) # Draw the other map stuff. Coordinate file must be in mapinfo format. # Coast line from http://rimmer.ngdc.noaa.gov/mgg/coast/getcoast.html moveFlag = True path = canvas.beginPath() map_data = doc.map_data for lin in map_data.splitlines(): if lin[0] != '#': lon, lat = map(float, lin.split('\t')) x, y = doc.latlon2xy(lat, lon) if moveFlag: path.moveTo(x, y) moveFlag = False else: path.lineTo(x, y) else: moveFlag = True canvas.setStrokeColor(darkgray) canvas.drawPath(path) # Draw some gliding sites canvas.setStrokeColor(gray) delta = 2.5*mm for gs in GLIDING_SITES: x, y = doc.latlon2xy(*GLIDING_SITES[gs]) canvas.lines(((x, y+delta, x, y-delta), (x-delta, y, x+delta, y))) canvas.drawString(x+mm, y+mm, gs) # Draw NOTAM areas canvas.setStrokeColor(blue) canvas.setFillColor(black) canvas.setLineWidth(0.5) for n, notam in enumerate(doc.notams): x, y = doc.latlon2xy(notam[0], notam[1]) radius = notam[2]/60.0*doc.scale canvas.circle(x, y, radius) if radius/mm < 3: x1 = x + radius/1.41 + mm/2 y1 = y + radius/1.41 + mm/2 canvas.line(x, y, x1, y1) canvas.drawString(x1, y1, str(n+1)) else: canvas.drawCentredString(x, y-3, str(n+1)) canvas.restoreState()