def show(self, canvas, showframe=None): if self._border_width > 0.0: canvas.saveState() canvas.setStrokeColor(self._border_color) canvas.setLineWidth(self._border_width) if self._border_fill_color.lower() != 'none': canvas.setFillColor(self._border_fill_color) canvas.rect(self.x, self.y, self.width, self.height, stroke=self._border_type, fill=self._fill_border_rect) canvas.restoreState() if self.flowable is not None: self.flowable.width = self.width-(2.0*self._padding[0]) self.flowable.height = self.height-(2.0*self._padding[1]) self.flowable.drawOn(canvas, self.x+self._padding[0], self.y-self._padding[1]) if showframe is not None: canvas.saveState() canvas.setLineWidth(showframe[0]) canvas.rect(self.x, self.y, self.width, self.height, stroke=1, fill=showframe[1]) canvas.restoreState() return self
def archive_watermark_page(archive_date): """Return PDF object with archiving watermark. Args: archive_date (datetime.datetime): Date of archiving. Returns: PyPDF2.pdf.PageObject: Page with just the archive watermark. """ size = {"width": 20 * pagesizes.inch, "height": 18 * pagesizes.inch} font = { "name": "Helvetica", "size": 256, "color": colors.red.clone(alpha=0.20), "start_x": size["width"] * 0.50, "start_y": size["height"] * 0.45, } text_lines = ["ARCHIVED", archive_date.strftime("%Y-%m-%d")] packet = io.BytesIO() canvas = reportlab.pdfgen.canvas.Canvas( filename=packet, pagesize=(size["width"], size["height"]), bottomup=0 ) canvas.setFillColor(font["color"]) canvas.setFont(psfontname=font["name"], size=font["size"]) for i, line in enumerate(text_lines): canvas.drawCentredString( x=font["start_x"], y=(font["start_y"] + canvas._leading * i), text=line ) canvas.save() packet.seek(0) watermark_page = PyPDF2.PdfFileReader(packet).getPage(0) return watermark_page
def draw(self): if not self._at_top(): canvas = self.canv canvas.setFillColor(self.fill_color) canvas.setFillColor("red") canvas.rect(self.xoffset, 0, self.width, self.line_height, stroke=0, fill=1)
def draw_half_star (self, inner_length=1*inch, outer_length=2*inch, points=5, origin=None): canvas = self.canv canvas.setLineWidth(0) if not origin: canvas.translate(self.size*0.5,self.size*0.5) else: canvas.translate(*origin) canvas.setFillColor(self.fillcolor) canvas.setStrokeColor(self.strokecolor) p = canvas.beginPath() inner = False # Start on top is_origin = True #print 'Drawing star with radius',outer_length,'(moving origin ',origin,')' for theta in range(0,360,360/(points*2)): if 0 < theta < 180: continue if inner: r = inner_length else: r = outer_length x = (math.sin(math.radians(theta)) * r) y = (math.cos(math.radians(theta)) * r) #print 'POINT:',x,y if is_origin: p.moveTo(x,y) is_origin = False else: p.lineTo(x,y) inner = not inner p.close() canvas.drawPath(p,fill=1)
def later_pages(canvas, document): canvas.saveState() #вывести внизу QR-code (ФИО, (номера направлений)) qr_code = qr.QrCodeWidget(qr_value) qr_code.barWidth = 70 qr_code.barHeight = 70 qr_code.qrVersion = 1 bounds = qr_code.getBounds() width = bounds[2] - bounds[0] height = bounds[3] - bounds[1] d = Drawing() d.add(qr_code) renderPDF.draw(d, canvas, 90 * mm, 7) #вывести атрибуты для подписей canvas.setFont('PTAstraSerifReg', 10) canvas.drawString(40 * mm, 10 * mm, '____________________________') canvas.drawString(115 * mm, 10 * mm, '/{}/____________________________'.format(npf)) canvas.setFont('Symbola', 18) canvas.drawString(195 * mm, 10 * mm, '\u2713') canvas.setFont('PTAstraSerifReg', 8) canvas.drawString(50 * mm, 7 * mm, '(подпись сотрудника)') canvas.drawString(160 * mm, 7 * mm, '(подпись плательщика)') canvas.rotate(90) canvas.setFillColor(HexColor(0x4f4b4b)) canvas.setFont('PTAstraSerifReg', 5.2) canvas.drawString(10 * mm, -12 * mm, '{}'.format(6 * left_size_str)) canvas.restoreState()
def orf_eus(canvas, featL, coords, color_hex, shape): """Draw CDS and write count.""" xs, xe, xn, y0, yt, yb, ynt, ynb = coords canvas.setLineWidth(1) # initialize path pORF = canvas.beginPath() if shape == 'square': pORF.moveTo(xs,ynt) pORF.lineTo(xe,ynt) pORF.lineTo(xe,ynb) pORF.lineTo(xs,ynb) pORF.lineTo(xs,ynt) # draw triangle-shaped ORFS elif featL <= minL: pORF.moveTo(xs,yt) pORF.lineTo(xe,y0) pORF.lineTo(xs,yb) pORF.lineTo(xs,yt) # draw arrow-shaped ORFS else: pORF.moveTo(xs,ynt) pORF.lineTo(xn,ynt) pORF.lineTo(xn,yt) pORF.lineTo(xe,y0) pORF.lineTo(xn,yb) pORF.lineTo(xn,ynb) pORF.lineTo(xs,ynb) pORF.lineTo(xs,ynt) # evaluate function category and set fill color canvas.setFillColor(color_hex) # finalize object path canvas.drawPath(pORF, stroke=1, fill=1) pORF.close() canvas.setFillColor(black)
def printColors(canvas): canvas.setFont("Helvetica",10) y = x = 0; dy=inch*1/2.0; dx=1*inch; w=h=dy/2 rdx=(dx-w)/2; rdy=h/5.0 available_paper = 10*inch for name, color in colors.getAllNamedColors().iteritems(): # for [namedcolor, name] in ( # 'darkseagreen', 'darkslateblue', # [colors.darkblue, 'darkblue'], # [colors.darkcyan, 'darkcyan'], # [colors.darkolivegreen, 'darkolivegreen'], # [colors.cornflower, 'cornflower'], # [colors.orchid, 'orchid'], # [colors.lavenderblush, "lavenderblush"], # [colors.lawngreen, "lawngreen"], # [colors.lemonchiffon, "lemonchiffon"], # [colors.lightblue, "lightblue"], # [colors.lightcoral, "lightcoral"]): canvas.setFillColor(color) canvas.rect(x+rdx, y+rdy, w, h, fill=1) canvas.setFillColor(colors.black) canvas.drawString(x+dx/4 + 1*inch, y+rdy, name) rdy += .2*inch available_paper -= (y+rdy) if available_paper < 1*inch: c.showPage() y = x = 0; dy=inch*1/2.0; dx=1*inch; w=h=dy/2 rdx=(dx-w)/2; rdy=h/5.0 available_paper = 10*inch
def title(canvas, doc): canvas.saveState() lemma_img = 'L:/resources/code/models/accuracy_assessment/report/images/' lemma_img += 'lemma_logo.gif' # Page background canvas.setStrokeColor(colors.black) canvas.setLineWidth(1) canvas.setFillColor('#e6ded5') canvas.roundRect(0.5 * u.inch, 0.5 * u.inch, 7.5 * u.inch, 10.0 * u.inch, 0.15 * u.inch, stroke=1, fill=1) # Page banner - image canvas.drawImage(lemma_img, 0.5 * u.inch, 7.5 * u.inch, width=7.5 * u.inch, height=3 * u.inch, mask='auto') canvas.restoreState()
def write_tile(i, pos=None, canvas=None): styles = getSampleStyleSheet() styleN = styles['Normal'] styleN.spaceBefore = 10 styleN.spaceAfter = 10 styleN.textColor = white styleH = styles['Heading1'] styleH.textColor = white styleH.alignment = 1 styleN.alignment = 1 canvas.saveState() canvas.setFillColor(red) canvas.rect(spacer + pos[0] * 40 * mm, 5 * mm + pos[1] * 80 * mm, 40 * mm, 80 * mm, fill=1, stroke=1) f = Frame(spacer + pos[0] * 40 * mm, pos[1] * 80 * mm - 5 * mm, 40 * mm, 40 * mm, showBoundary=0) f.addFromList([Paragraph('%i' % i, styleH)], canvas) f = Frame(spacer + pos[0] * 40 * mm, pos[1] * 80 * mm + 35 * mm, 40 * mm, 40 * mm, showBoundary=0) f.addFromList([Paragraph('%i' % i, styleH)], canvas) canvas.restoreState() if pos == (3, 2): canvas.showPage() pos = (0, 0) else: if pos[1] == 2: pos = (pos[0] + 1, 0) else: pos = (pos[0], pos[1] + 1) return pos
def __applyCanvasOptions(self, canvas, opts): for opt in opts: if opt == 'fillColor': canvas.setFillColor(opts[opt]) if opt == 'fontSize': canvas.setFontSize(opts[opt]) return canvas
def draw_star(self, inner_length=1 * inch, outer_length=2 * inch, points=5, origin=None): canvas = self.canv canvas.setLineWidth(0) if not origin: canvas.translate(self.size * 0.5, self.size * 0.5) else: canvas.translate(*origin) canvas.setFillColor(self.fillcolor) canvas.setStrokeColor(self.strokecolor) p = canvas.beginPath() inner = False # Start on top is_origin = True #print 'Drawing star with radius',outer_length,'(moving origin ',origin,')' for theta in range(0, 360, 360 / (points * 2)): if inner: r = inner_length else: r = outer_length x = (math.sin(math.radians(theta)) * r) y = (math.cos(math.radians(theta)) * r) #print 'POINT:',x,y if is_origin: p.moveTo(x, y) is_origin = False else: p.lineTo(x, y) inner = not inner p.close() canvas.drawPath(p, fill=1)
def get_canvas(self, packet): canvas = super(AnswerSheetMask, self).get_canvas(packet) canvas.setStrokeColor(colors.black) canvas.setFillColor(colors.white) canvas.setLineWidth(0.2 * mm) canvas.setFont('Helvetica', 8) return canvas
def show(self, canvas, showframe=None): if self._border_width > 0.0: canvas.saveState() canvas.setStrokeColor(self._border_color) canvas.setLineWidth(self._border_width) if self._border_fill_color.lower() != 'none': canvas.setFillColor(self._border_fill_color) canvas.rect(self.x, self.y, self.width, self.height, stroke=self._border_type, fill=self._fill_border_rect) canvas.restoreState() if self.flowable is not None: self.flowable.width = self.width - (2.0 * self._padding[0]) self.flowable.height = self.height - (2.0 * self._padding[1]) self.flowable.drawOn(canvas, self.x + self._padding[0], self.y - self._padding[1]) if showframe is not None: canvas.saveState() canvas.setLineWidth(showframe[0]) canvas.rect(self.x, self.y, self.width, self.height, stroke=1, fill=showframe[1]) canvas.restoreState() return self
def draw_text_bottom(canvas, text, fontsize=60): def get_center_x_coord(text, fontName, fontsize): strwidth = stringWidth(text, fontName, fontsize) x = (width - strwidth) / 2 return x fontName = "Helvetica-Bold" maxWidth = 0.8 * width canvas.setFillColor(black) canvas.setStrokeColor(black) canvas.setFont(fontName, fontsize) lines = simpleSplit(text, fontName, fontsize, maxWidth) if (len(lines) > 1): draw_text_bottom(canvas, text, fontsize * 0.9) else: y = 170 canvas.drawString(get_center_x_coord(text, fontName, fontsize), y, text) # Smaller text fontName = "Helvetica" fontsize = 20 canvas.setFont(fontName, fontsize) text = "Asp-lunch Tisdag Lv1" y = y - 30 canvas.drawString(get_center_x_coord(text, fontName, fontsize), y, text) text = "12:00 i FB" y = y - fontsize - 5 canvas.drawString(get_center_x_coord(text, fontName, fontsize), y, text) text = "Tas ned den 11/12" y = fontsize canvas.drawString(get_center_x_coord(text, fontName, fontsize), y, text)
def _draw_front(self, canvas): canvas.saveState() # Set card orientation if self.front_orientation == Orientation.TURN90: canvas.rotate(90) canvas.translate(0, -self.WIDTH) width = self.HEIGHT height = self.WIDTH else: width = self.WIDTH height = self.HEIGHT # Draw red border self._draw_single_border(canvas, 0, width, height) # Parchment background self._draw_single_background(canvas, 0, self.BORDER_FRONT, width, height) # D&D logo dnd_logo = svg2rlg("logo.svg") if dnd_logo is not None: factor = self.LOGO_WIDTH/dnd_logo.width dnd_logo.width *= factor dnd_logo.height *= factor dnd_logo.scale(factor, factor) logo_margin = (self.BORDER_FRONT[Border.TOP]-dnd_logo.height)/2 renderPDF.draw(dnd_logo, canvas, (width-self.LOGO_WIDTH)/2, height - self.BORDER_FRONT[Border.TOP] + logo_margin, ) # Titles canvas.setFillColor("black") title_height = self.fonts.set_font(canvas, "title") canvas.drawCentredString(width * 0.5, self.FRONT_MARGINS[Border.BOTTOM], self.title.upper()) # Artist if self.artist: canvas.setFillColor("white") artist_font_height = self.fonts.set_font(canvas, "artist") canvas.drawCentredString(width/2, self.BORDER_FRONT[Border.BOTTOM] - artist_font_height - 1*mm, "Artist: {}".format(self.artist)) # Image image_bottom = self.FRONT_MARGINS[Border.BOTTOM] + title_height + 1*mm canvas.drawImage(self.front_image_path, self.FRONT_MARGINS[Border.LEFT], image_bottom, width=width \ - self.FRONT_MARGINS[Border.LEFT] \ - self.FRONT_MARGINS[Border.RIGHT], height=height \ - image_bottom \ - self.FRONT_MARGINS[Border.TOP], preserveAspectRatio=True, mask='auto') canvas.restoreState()
def drawShape(self, canvas, controls, color): """Utlity to draw a closed shape through a list of control points; extends the previous proc""" canvas.setFillColor(color) p = canvas.beginPath() self.curveThrough(p, controls) p.close() canvas.drawPath(p, stroke=1, fill=1)
def canvasBackground(canvas,colour): canvas.setFillColor(colour) path = canvas.beginPath() path.moveTo(0*cm,0*cm) path.lineTo(0*cm,30*cm) path.lineTo(25*cm,30*cm) path.lineTo(25*cm,0*cm) canvas.drawPath(path,True,True)
def drawPage(canvas, data, reverse=False): pageWidth, pageHeight = A4 #canvas.drawString(100,pageHeight - 100,"Hello World") canvas.setFillColor(black) # rect (x,y, width,height, fill, stroke) print('Page width %s data length %s' % (pageWidth / cm, len(data))) print('Page height %s ' % (pageHeight / cm)) leftX = 0.0 rightX = 10.5 Y = 1.45 name = [] guideWidth = 0.1 for i in range(math.ceil(len(data) / 2)): # left if len(data) >= i * 2 + 2 or not reverse: if reverse: name = data[i * 2 + 1] else: name = data[i * 2] drawCard(canvas, leftX, Y, name) # right if len(data) >= i * 2 + 2 or reverse: if reverse: name = data[i * 2] else: name = data[i * 2 + 1] drawCard(canvas, rightX, Y, name) # draw cutting line canvas.setLineWidth(0.3) canvas.setDash(1, 2) canvas.line((0) * cm, Y * cm, (guideWidth) * cm, Y * cm) canvas.line((10.5 - guideWidth) * cm, Y * cm, (10.5 + guideWidth) * cm, Y * cm) canvas.line(((pageWidth / cm) - guideWidth) * cm, Y * cm, pageWidth, Y * cm) Y += 6.7 # Card height canvas.setLineWidth(0.3) canvas.setDash(1, 2) canvas.line((0) * cm, Y * cm, (guideWidth) * cm, Y * cm) canvas.line((10.5 - guideWidth) * cm, Y * cm, (10.5 + guideWidth) * cm, Y * cm) canvas.line(((pageWidth / cm) - guideWidth) * cm, Y * cm, pageWidth, Y * cm) canvas.setLineWidth(1) canvas.setDash(1) # draw vertical lines canvas.line((0) * cm, 0, (0) * cm, 1 * cm) canvas.line((0) * cm, pageHeight - (1 * cm), (0) * cm, pageHeight) canvas.line((10.5) * cm, 0, (10.5) * cm, 1 * cm) canvas.line((10.5) * cm, pageHeight - (1 * cm), (10.5) * cm, pageHeight) canvas.line((21) * cm, 0, (21) * cm, 1 * cm) canvas.line((21) * cm, pageHeight - (1 * cm), (21) * cm, pageHeight)
def addText(canvas,element,styles): for run in element.getElementsByTagName("sn:r"): if(len(run.getElementsByTagName("sn:t")) > 0): ##TODO: support italic, bold and underlined text charStyle = styles["Character" + run.getAttributeNode("sn:rStyle").value] text=run.getElementsByTagName("sn:t")[0].firstChild.nodeValue canvas.setFont("Helvetica",charStyle.size) canvas.setFillColor(charStyle.color) canvas.drawString(40,810-charStyle.size,text)
def draw(self, canvas): super().draw(canvas) canvas.setFillColor(self.BORDER_COLOR) canvas.rect(self.WIDTH * 1.5 - self.STANDARD_BORDER / 2, 0, self.STANDARD_BORDER, self.HEIGHT, stroke=0, fill=1)
def func(canvas, doc): width, height = letter margin = 0.66 * 72 canvas.saveState() canvas.setFillColor("gray") canvas.drawString(margin, height - margin, "CONFIDENTIAL") canvas.drawRightString(width - margin, height - margin, str(timezone.now())) canvas.restoreState()
def piePagina(canvas, doc): canvas.saveState() canvas.setFillColor('#666666') canvas.setFont('Helvetica', 8) canvas.setStrokeColor('#ABAAAB') canvas.line(A4[0] - 800, A4[1] - 818, A4[0] - 0, A4[1] - 818) canvas.drawString(275, A4[1] - 835, "Pag. %d" % doc.page) # canvas.drawString( 20, A4[1]-835, 'Codigo: '+form['data']['header']['code']) canvas.restoreState()
def detailsBackground(canvas,colour): canvas.setFillColor(colour) path = canvas.beginPath() path.moveTo(0.7*cm,16.5*cm) path.lineTo(0.7*cm,24*cm) path.lineTo(20*cm,24*cm) path.lineTo(20*cm,16.5*cm) path.lineTo(0.7*cm,16.5*cm) canvas.drawPath(path,True,True)
def pdf_head(canvas, headtext): canvas.setFont("Helvetica-Bold", 16) canvas.drawString(25, 8 * inch, headtext) canvas.setFillColor(colors.orange) canvas.rect(25, 7.8 * inch, 7.5 * inch, 0.12 * inch, fill=1, stroke=0)
def draw_circle(self, x, y, r): # Test... canvas = self.canv canvas.setLineWidth(0) canvas.setStrokeColor(colors.grey) canvas.setFillColor(colors.grey) p = canvas.beginPath() p.circle(x, y, r) p.close() canvas.drawPath(p, fill=1)
def draw_circle (self, x, y, r): # Test... canvas = self.canv canvas.setLineWidth(0) canvas.setStrokeColor(colors.grey) canvas.setFillColor(colors.grey) p = canvas.beginPath() p.circle(x,y,r) p.close() canvas.drawPath(p,fill=1)
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 _draw_front(self, canvas): canvas.saveState() # Draw red border self._draw_single_border(canvas, 0, self.width, self.height) # Parchment background self._draw_single_background( canvas, 0, self.border_front, self.width, self.height, self.front_orientation, ) # Set card orientation if self.front_orientation == Orientation.TURN90: canvas.rotate(90) canvas.translate(0, -self.width) width = self.height height = self.width else: width = self.width height = self.height # D&D logo dnd_logo = svg2rlg(ASSET_DIR / "logo.svg") if dnd_logo is not None: factor = self.LOGO_WIDTH / dnd_logo.width dnd_logo.width *= factor dnd_logo.height *= factor dnd_logo.scale(factor, factor) logo_margin = (self.border_front[Border.TOP] - self.bleed - dnd_logo.height) / 2 renderPDF.draw( dnd_logo, canvas, (width - self.LOGO_WIDTH) / 2, height - self.border_front[Border.TOP] + logo_margin, ) self._draw_front_frame(canvas, width, height) # Artist if self.artist: canvas.setFillColor("white") artist_font_height = self.fonts.set_font(canvas, "artist") canvas.drawCentredString( width / 2, self.border_front[Border.BOTTOM] - artist_font_height - 1 * mm, "Artist: {}".format(self.artist), ) canvas.restoreState()
def render(self, canvas): if len(self.words) == 1: canvas.setFillColor(self.words[0]['color']) canvas.drawString(self.coords[0], self.coords[1], self.words[0]['txt']) elif len(self.words)>1: txt = canvas.beginText() txt.setTextOrigin(self.coords[0], self.coords[1]) for elt in self.words: txt.setFillColor(elt['color']) txt.textOut(elt['txt']) canvas.drawText(txt)
def draw(self, canvas, split): super().draw(canvas, split) canvas.setFillColor(self.border_color) canvas.rect( self.width * 1.5 - self.STANDARD_BORDER / 2, 0, self.STANDARD_BORDER, self.height, stroke=0, fill=1, )
def _add_registration_details(self, canvas): start_posn = self.start_posn reg_detail_dict = {t[0]: t[1] for t in REG_STATUS_OPTIONS} canvas.setFillColor(colors.blue) canvas.setFont('Helvetica', 10) canvas.drawString(0.5 * inch, start_posn, 'Section D: Registration Details') canvas.setLineWidth(1) canvas.setFillColor(colors.black) canvas.rect(0.5 * inch, start_posn - 1.3 * inch, PAGE_WIDTH - inch, 1.2 * inch) canvas.line(2.5 * inch, start_posn - 1.3 * inch, 2.5 * inch, start_posn - 0.1 * inch) canvas.drawString(0.7 * inch, start_posn - 0.3 * inch, 'Registration Status:') canvas.drawString(2.7 * inch, start_posn - 0.3 * inch, reg_detail_dict[self.details['registration_status']]) canvas.line(0.5 * inch, start_posn - 0.4 * inch, PAGE_WIDTH - 0.5 * inch, start_posn - 0.4 * inch) canvas.drawString(0.7 * inch, start_posn - 0.6 * inch, 'Pre-Tax Price:') try: price = float(self.details['pre_tax_price']) gst, hst, qst, inv_total = self._calculate_tax_total(price) price = '${:0,.2f}'.format(price) except ValueError: if self.details['pre_tax_price'] == '': price = gst = hst = qst = inv_total = '$0.00' else: price = 'ERROR: Price Entered Incorrectly' gst = hst = qst = inv_total = '?????' canvas.drawString(2.7 * inch, start_posn - 0.6 * inch, price) canvas.line(0.5 * inch, start_posn - 0.7 * inch, PAGE_WIDTH - 0.5 * inch, start_posn - 0.7 * inch) canvas.drawString(0.7 * inch, start_posn - 0.9 * inch, 'Taxes:') tax_info = '' if self.event.gst_charged: tax_info += 'GST: ' + gst + ' / ' if self.event.hst_charged: tax_info += 'HST: ' + hst + ' / ' if self.event.qst_charged: tax_info += 'QST: ' + qst + ' / ' if len(tax_info) > 0: tax_info = tax_info[:-3] else: tax_info = 'No tax charged' canvas.drawString(2.7 * inch, start_posn - 0.9 * inch, tax_info) canvas.line(0.5 * inch, start_posn - 1.0 * inch, PAGE_WIDTH - 0.5 * inch, start_posn - 1.0 * inch) canvas.setFont('Helvetica-Bold', 10) canvas.drawString(0.7 * inch, start_posn - 1.2 * inch, 'Total Invoice:') canvas.drawString(2.7 * inch, start_posn - 1.2 * inch, inv_total) self.start_posn = start_posn - 1.55 * inch
def func(canvas, doc): width, height = letter margin = 0.66 * 72 canvas.saveState() canvas.setFillColor('gray') #canvas.setFont('OpenSans',12) canvas.drawString(margin, height - margin, "CONFIDENTIAL") canvas.drawRightString(width - margin, height - margin, localtime(timezone.now()).strftime(date_format)) if recipient: canvas.drawString(margin, margin, "Intended for: Title IX Coordinator %s" % recipient) canvas.restoreState()
def encabezado(canvas, doc): canvas.saveState() #canvas.drawImage(app_home + 'logo1.png', 15, 800, width=140, height=29, mask='auto') # canvas.drawImage(current_app.config["APP_PATH"] + '/src/etc/img/' + 'logo2.png', 430, 800, width=140, height=25, mask='auto') canvas.setStrokeColor('#ABAAAB') canvas.line(A4[0] - 700, A4[1] - 53, A4[0] - 0, A4[1] - 53) canvas.setFillColor('#666666') canvas.setFont('Helvetica', 20) # canvas.drawString(10, A4[1] - 77, form['data']['header']['name']) canvas.line(A4[0] - 700, A4[1] - 90, A4[0] - 0, A4[1] - 90) canvas.restoreState()
def _totals_rect(self, canvas, doc): canvas.saveState() top = 3.8 * cm left = self.page_width - self.margins['right'] - self.block_width width = self.block_width height = self.block_height - 1 * cm canvas.setStrokeColor(red) canvas.setLineWidth(.5) canvas.rect(left, top, width, height, stroke=1) canvas.setFillColor(red) canvas.rect(left, top, width - self.column_width * 2, height, fill=1) canvas.restoreState()
def labeller(cName, cLen, canvas, Y_map) : """Label baselines with genome/contig name and size.""" canvas.setFillColor(black) y0 = Y_map x0 = -pNsize # retreat into the left margin to write out name and size y1 = y0 + ck_vsp/10 # bump name up a bit from BL level y2 = y0 - ck_vsp # bump size down a bit from BL level pLenStr = str(float(cLen)/1000) # converts number to suitable form canvas.setFont(bFont,LfSize) canvas.drawString(x0,y1,cName) canvas.setFont(rFont,NfSize) canvas.drawString(x0,y2,pLenStr+' kb')
def render(self, canvas): if len(self.words) == 1: canvas.setFillColor(self.words[0]['color']) canvas.drawString(self.coords[0], self.coords[1], self.words[0]['txt']) elif len(self.words) > 1: txt = canvas.beginText() txt.setTextOrigin(self.coords[0], self.coords[1]) for elt in self.words: txt.setFillColor(elt['color']) txt.textOut(elt['txt']) canvas.drawText(txt)
def first_pages(canvas, document): canvas.saveState() canvas.setFont("PTAstraSerifReg", 9) # вывести интерактивную форму "текст" form = canvas.acroForm # canvas.drawString(25, 780, '') form.textfield(name='comment', tooltip='comment', fontName='Times-Roman', fontSize=10, x=57, y=750, borderStyle='underlined', borderColor=black, fillColor=white, width=515, height=13, textColor=black, forceBorder=False) # Вывести на первой странице код-номер договора barcode128.drawOn(canvas, 120 * mm, 283 * mm) #вывести внизу QR-code (ФИО, (номера направлений)) qr_code = qr.QrCodeWidget(qr_value) qr_code.barWidth = 70 qr_code.barHeight = 70 qr_code.qrVersion = 1 bounds = qr_code.getBounds() width = bounds[2] - bounds[0] height = bounds[3] - bounds[1] d = Drawing() d.add(qr_code) renderPDF.draw(d, canvas, 90 * mm, 7) #вывести атрибуты для подписей canvas.setFont('PTAstraSerifReg', 10) canvas.drawString(40 * mm, 10 * mm, '____________________________') canvas.drawString(115 * mm, 10 * mm, '/{}/____________________________'.format(npf)) canvas.setFont('Symbola', 18) canvas.drawString(195 * mm, 10 * mm, '\u2713') canvas.setFont('PTAstraSerifReg', 8) canvas.drawString(50 * mm, 7 * mm, '(подпись сотрудника)') canvas.drawString(160 * mm, 7 * mm, '(подпись плательщика)') #вывестии защитны вертикальный мелкий текст canvas.rotate(90) canvas.setFillColor(HexColor(0x4f4b4b)) canvas.setFont('PTAstraSerifReg', 5.2) canvas.drawString(10 * mm, -12 * mm, '{}'.format(6 * left_size_str)) canvas.restoreState()
def render(self, canvas, context): canvas.rect(self.left_margin, self.bottom_margin, self.box_width, self.box_height, stroke=0, fill=1) canvas.setFillColor(colors.black) canvas.drawString( self.left_margin + 2 * mm, self.bottom_margin + 2 * mm, 'ID: {}'.format(context['student']['id'])) canvas.drawRightString( self.left_margin + self.box_width - 2 * mm, self.bottom_margin + 2 * mm, '(Seite {})'.format(context['page_num']))
def _add_registration_details(self, canvas): start_posn = self.start_posn reg_detail_dict = {t[0]:t[1] for t in REG_STATUS_OPTIONS} canvas.setFillColor(colors.blue) canvas.setFont('Helvetica', 10) canvas.drawString(0.5*inch, start_posn, 'Section D: Registration Details') canvas.setLineWidth(1) canvas.setFillColor(colors.black) canvas.rect(0.5*inch, start_posn-1.3*inch, PAGE_WIDTH-inch, 1.2*inch) canvas.line(2.5*inch, start_posn-1.3*inch, 2.5*inch, start_posn-0.1*inch) canvas.drawString(0.7*inch, start_posn-0.3*inch, 'Registration Status:') canvas.drawString(2.7*inch, start_posn-0.3*inch, reg_detail_dict[self.details['registration_status']]) canvas.line(0.5*inch, start_posn-0.4*inch, PAGE_WIDTH-0.5*inch, start_posn-0.4*inch) canvas.drawString(0.7*inch, start_posn-0.6*inch, 'Pre-Tax Price:') try: price = float(self.details['pre_tax_price']) gst, hst, qst, inv_total = self._calculate_tax_total(price) price = '${:0,.2f}'.format(price) except ValueError: if self.details['pre_tax_price'] == '': price = gst = hst = qst = inv_total = '$0.00' else: price = 'ERROR: Price Entered Incorrectly' gst = hst = qst = inv_total = '?????' canvas.drawString(2.7*inch, start_posn-0.6*inch, price) canvas.line(0.5*inch, start_posn-0.7*inch, PAGE_WIDTH-0.5*inch, start_posn-0.7*inch) canvas.drawString(0.7*inch, start_posn-0.9*inch, 'Taxes:') tax_info = '' if self.event.gst_charged: tax_info += 'GST: ' + gst + ' / ' if self.event.hst_charged: tax_info += 'HST: ' + hst + ' / ' if self.event.qst_charged: tax_info += 'QST: ' + qst + ' / ' if len(tax_info) > 0: tax_info = tax_info[:-3] else: tax_info = 'No tax charged' canvas.drawString(2.7*inch, start_posn-0.9*inch, tax_info) canvas.line(0.5*inch, start_posn-1.0*inch, PAGE_WIDTH-0.5*inch, start_posn-1.0*inch) canvas.setFont('Helvetica-Bold', 10) canvas.drawString(0.7*inch, start_posn-1.2*inch, 'Total Invoice:') canvas.drawString(2.7*inch, start_posn-1.2*inch, inv_total) self.start_posn = start_posn - 1.55 * inch
def printBandOutline(self, canvas, text): """ Draw a dotted rectangle around the entire band, and type a small faded caption at the origin of the band. """ canvas.saveState() canvas.setLineWidth(0.1) canvas.setStrokeColorRGB(0.8, 0.5, 0.7) canvas.setDash(1, 2) canvas.rect(self.x, self.y, self.width, self.height) canvas.setFont("Helvetica", 8) canvas.setFillColor((0.6, 0.8, 0.7)) canvas.drawString(self.x, self.y, text) canvas.restoreState()
def func(canvas, doc): width, height = letter margin = 0.66 * 72 canvas.saveState() canvas.setFillColor('gray') canvas.drawString(margin, height - margin, "CONFIDENTIAL") canvas.drawRightString( width - margin, height - margin, str(timezone.now())) canvas.drawString( margin, margin, f"Intended for: Title IX Coordinator {recipient}", ) canvas.restoreState()
def drawCode(canvas, code): """Draws a block of text at current point, indented and in Courier""" canvas.addLiteral("36 0 Td") canvas.setFillColor(colors.blue) canvas.setFont("Courier", 10) t = canvas.beginText() t.textLines(code) c.drawText(t) canvas.setFillColor(colors.black) canvas.addLiteral("-36 0 Td") canvas.setFont("Times-Roman", 10)
def colorsRGB(canvas): from reportlab.lib import colors from reportlab.lib.units import inch black = colors.black y = x = 0; dy=inch*3/4.0; dx=inch*5.5/5; w=h=dy/2; rdx=(dx-w)/2 rdy=h/5.0; texty=h+2*rdy canvas.setFont("Helvetica",10) for [namedcolor, name] in ( [colors.lavenderblush, "lavenderblush"], [colors.lawngreen, "lawngreen"], [colors.lemonchiffon, "lemonchiffon"], [colors.lightblue, "lightblue"], [colors.lightcoral, "lightcoral"]): canvas.setFillColor(namedcolor) canvas.rect(x+rdx, y+rdy, w, h, fill=1) canvas.setFillColor(black) canvas.drawCentredString(x+dx/2, y+texty, name) x = x+dx y = y + dy; x = 0 for rgb in [(1,0,0), (0,1,0), (0,0,1), (0.5,0.3,0.1), (0.4,0.5,0.3)]: r,g,b = rgb canvas.setFillColorRGB(r,g,b) canvas.rect(x+rdx, y+rdy, w, h, fill=1) canvas.setFillColor(black) canvas.drawCentredString(x+dx/2, y+texty, "r%s g%s b%s"%rgb) x = x+dx y = y + dy; x = 0 for gray in (0.0, 0.25, 0.50, 0.75, 1.0): canvas.setFillGray(gray) canvas.rect(x+rdx, y+rdy, w, h, fill=1) canvas.setFillColor(black) canvas.drawCentredString(x+dx/2, y+texty, "gray: %s"%gray) x = x+dx
def encabezado(canvas,nro,copia=False): from reportlab.lib.colors import white, darkblue,black x=740 canvas.setFillColor(darkblue) canvas.rect(30,x,85,60,fill=True,stroke=False) canvas.setFillColor(white) canvas.setStrokeColor(white) canvas.setFont("Helvetica-Bold", 35) canvas.drawString(40, x+25, "MIS") canvas.setFillColor(white) canvas.setStrokeColor(white) canvas.setFont("Helvetica-Bold", 12) canvas.drawString(37,x+10, "PARAGUAY") canvas.setFillColor(black) canvas.setStrokeColor(black) canvas.setFont("Helvetica-Bold", 11) canvas.drawString(130, x+47, "MIS Implants Paraguay") canvas.drawString(130, x+31, "América 192 c/ Mcal. López") canvas.drawString(130, x+15, "Tel.: +59521 21 213193") canvas.drawString(130, x+2, "www.misimplants.com.py") canvas.setFont("Helvetica-Bold", 18) canvas.drawString(350, x+17, "Nro. "+str(nro))
def textsize(canvas): from reportlab.lib.units import inch from reportlab.lib.colors import magenta, red canvas.setFont("Times-Roman", 20) canvas.setFillColor(red) canvas.drawCentredString(2.75*inch, 2.5*inch, "Font size examples") canvas.setFillColor(magenta) size = 7 y = 2.3*inch x = 1.3*inch for line in lyrics: canvas.setFont("Helvetica", size) canvas.drawRightString(x,y,"%s points: " % size) canvas.drawString(x,y, line) y = y-size*1.2 size = size+1.5
def seq_scale(canvas, scX, scY, incrT, incrN, dip, dop) : """Draws the sequence scale bar.""" canvas.setLineWidth(1.2) canvas.setFillColor(black) incrCNT = 0 # initialize count of increments psc = canvas.beginPath() psc.moveTo(scX, scY+dip-dop) # start at beginning (duh!) psc.lineTo(scX+incrT*incrN, scY+dip-dop) # draw the scale baseline # draw ticks until the max number of increments is reached while incrCNT <= incrN : psc.moveTo(scX+incrT*incrCNT, scY+dip-dop) psc.lineTo(scX+incrT*incrCNT, scY+dip) incrCNT += 1 canvas.drawPath(psc, stroke=1, fill=0) psc.close() # write out scale extremities values (needs hand-fix if not using kbs) canvas.setFont(rFont,NfSize) canvas.drawRightString(scX, scY+dip+dop, '0') canvas.drawString(scX+incrT*incrN, scY+dip+dop, str(incrN)+' kb')
def _add_notes(self, canvas): """ This is designed to be the last element on the page. Don't move it or stuff will break """ start_posn = self.start_posn start_posn = self.start_posn canvas.setFillColor(colors.blue) canvas.setFont('Helvetica', 10) canvas.drawString(0.5*inch, start_posn, 'Section E - Registration Notes') canvas.setFillColor(colors.black) canvas.rect(0.5*inch, 0.75*inch, PAGE_WIDTH-inch, start_posn-0.85*inch) style_sheet = getSampleStyleSheet() style = style_sheet['BodyText'] para = Paragraph(self.details['registration_notes'], style) h=para.wrap(7.1 * inch, start_posn-0.65*inch)[1] para.drawOn(canvas, 0.7 * inch, start_posn-h-0.2*inch)
def pdf_format(canvas, count): """to write details in pdf file format""" canvas.setFont("Helvetica", 14) canvas.setLineWidth(0.3) canvas.drawString(20, 750, "Aliens details:") canvas.drawString(20, 720, "CodeName | BloodColor |" "Number.of antenas |Number.of legs| HomePlanet:") canvas.setFillColor(black) y = 650 for i in range(count): # iterate over the number of records x = 0 # vertical tab alien_list = [] alien_data = Alien() alien_data.read_input() alien_list = alien_data.save_records_pdf() for item in alien_list: x = x + 70 # moving next word canvas.setFont("Helvetica", 13) canvas.drawString(x, y, item) y = y - 30 # formating the next record horizontal tab space
def render(self, pagemgr): rendered = [] frame = None canvas = None if pagemgr is not None: frame = pagemgr.getcurrentframe() canvas = pagemgr.getcanvas() rect = self._baseelement.getrect() canvas_height = canvas._pagesize[1] # We're looking for the object we're supposed to be positionned # relative to, hopefully it exists and has been rendered already! anchor_id, anchor_data = self._baseelement.getanchor() rendered_anchor = findinstance(anchor_id) if rendered_anchor is not None: dest_rect = rendered_anchor.getrect() dest_rect[1] = canvas_height - (dest_rect[1]+dest_rect[3]) rect = snapsrctodest(rect, dest_rect, rlobject.snapto_dict[anchor_data[1].upper()], rlobject.snapto_dict[anchor_data[2].upper()], [0,0]) rect[1] = canvas_height - (rect[1]+rect[3]) basestyle = self._baseelement.getstyle() bckg_color = basestyle.getattribute('background-color',str) border = basestyle.getattribute('border',float) color = basestyle.getattribute('color',str) canvas.saveState() canvas.setStrokeColor(color) canvas.setLineWidth(border) dofill = 0 if bckg_color.lower() != 'none': canvas.setFillColor(bckg_color) dofill = 1 canvas.rect(rect[0], rect[1], rect[2], rect[3], stroke=1, fill=dofill) canvas.restoreState() register(self._baseelement.getid(), RLFrame(rect[0], rect[1], rect[2], rect[3]))
def capa(canvas, doc): cabecalho = Image('static/topFrame.png', 535, 63) w, h = cabecalho.wrap(doc.width, doc.topMargin) cabecalho.drawOn(canvas, doc.leftMargin + 5, doc.height + doc.topMargin - 40) canvas.setFont('Helvetica', 14) canvas.setFillColor(HexColor('#3366cc')) canvas.drawRightString(560, 220, doc_config['laudo']) canvas.setFont('Helvetica', 10) canvas.setFillColor(HexColor('#6a6a6a')) canvas.drawRightString(560, 180, doc_config['nome']) canvas.setFillColor(HexColor('#6a6a6a')) canvas.drawRightString(560, 160, doc_config['empresa']) canvas.setFillColor(HexColor('#6a6a6a')) canvas.drawRightString(560, 140, doc_config['cargo'])
def _add_assistant_details(self, canvas): start_posn = self.start_posn canvas.setFillColor(colors.blue) canvas.setFont('Helvetica', 10) canvas.drawString(0.5*inch, start_posn, 'Assistant Details') canvas.setFillColor(colors.black) canvas.rect(0.5*inch, start_posn-0.9*inch, PAGE_WIDTH-inch, 0.8*inch) canvas.line(2.5*inch, start_posn-0.9*inch, 2.5*inch, start_posn-0.1*inch) canvas.drawString(0.7*inch, start_posn-0.3*inch, 'Assistant:') assistant_deets = '' new_line = False if self.details['assistant_salutation'].strip() != '': new_line = True assistant_deets += self.details['assistant_salutation'].strip() + ' ' if self.details['assistant_first_name'].strip() != '': new_line = True assistant_deets += self.details['assistant_first_name'].strip() + ' ' if self.details['assistant_last_name'].strip() != '': new_line = True assistant_deets += self.details['assistant_last_name'].strip() + ' ' if new_line: assistant_deets += '<br/>' if self.details['assistant_title'].strip() != '': assistant_deets += self.details['assistant_title'].strip() assistant_deets += '<br/>' if self.details['assistant_email'].strip() != '': assistant_deets += 'Email: ' assistant_deets += self.details['assistant_email'] + '<br/>' if self.details['assistant_phone'].strip() != '': assistant_deets += 'Phone: ' + self.details['assistant_phone'] style_sheet = getSampleStyleSheet() style = style_sheet['BodyText'] para = Paragraph(assistant_deets, style) h = para.wrap(4.7*inch, 0.8*inch)[1] para.drawOn(canvas, 2.7*inch, start_posn-h-0.15*inch) self.start_posn = start_posn-1.1*inch
def _add_event_options(self, canvas): start_posn = self.start_posn num_options = len(self.details['event_options']) canvas.setFont('Helvetica', 10) canvas.setLineWidth(1) canvas.setFillColor(colors.blue) canvas.drawString(0.5*inch, start_posn, 'Conference Options Selected') canvas.setFillColor(colors.black) canvas.rect(0.5*inch, start_posn-(0.1+num_options*0.3)*inch, PAGE_WIDTH-inch, num_options*0.3*inch) option_start = start_posn - 0.3 * inch for option in self.details['event_options']: event_option = EventOptions.objects.get(pk=option) option_text = event_option.name + ': ' option_text += event_option.startdate.strftime('%-d %B, %Y') if event_option.enddate != event_option.startdate: option_text += ' to ' option_text += event_option.enddate.strftime('%-d %B, %Y') canvas.drawString(0.7 * inch, option_start, option_text) canvas.line(0.5*inch, option_start-(0.1*inch), PAGE_WIDTH-0.5*inch, option_start-(0.1*inch)) option_start -= 0.3 * inch self.start_posn = option_start - 0.05 * inch
def _add_delegate_information(self, canvas): start_posn = self.start_posn canvas.setFillColor(colors.blue) canvas.setFont('Helvetica', 10) canvas.drawString(0.5*inch, start_posn, 'Section B - Delegate Information') canvas.setLineWidth(1) canvas.setFillColor(colors.black) canvas.rect(0.5*inch, start_posn-1.3*inch, PAGE_WIDTH-inch, 1.2*inch) canvas.line(2.5*inch, start_posn-1.3*inch, 2.5*inch, start_posn-0.1*inch) canvas.drawString(0.7 * inch, start_posn-0.3*inch, 'Delegate Name:') name = '' if self.details['salutation'].strip() != '': name += self.details['salutation'].strip() + ' ' if self.details['first_name'].strip != '': name += self.details['first_name'].strip() + ' ' name += self.details['last_name'].strip() canvas.drawString(2.7 * inch, start_posn-0.3*inch, name) canvas.line(0.5*inch, start_posn-0.4*inch, PAGE_WIDTH-0.5*inch, start_posn-0.4*inch) canvas.drawString(0.7*inch, start_posn-0.6*inch, 'Delegate Title:') canvas.drawString(2.7*inch, start_posn-0.6*inch, self.details['title'].strip()) canvas.line(0.5*inch, start_posn-0.7*inch, PAGE_WIDTH-0.5*inch, start_posn-0.7*inch) canvas.drawString(0.7*inch, start_posn-0.9*inch, 'Email:') canvas.drawString(2.7*inch, start_posn-0.9*inch, self.details['email1'].strip()) canvas.line(0.5*inch, start_posn-1.0*inch, PAGE_WIDTH-0.5*inch, start_posn-1.0*inch) canvas.drawString(0.7*inch, start_posn-1.2*inch, 'Phone:') canvas.drawString(2.7*inch, start_posn-1.2*inch, self.details['phone1'].strip()) self.start_posn = start_posn-1.55*inch
def _add_company_information(self, canvas): start_posn = self.start_posn canvas.setFillColor(colors.blue) canvas.setFont('Helvetica', 10) canvas.drawString(0.5*inch, start_posn, 'Section C: Company Information') canvas.setFillColor(colors.black) canvas.rect(0.5*inch, start_posn-1.2*inch, PAGE_WIDTH-inch, 1.1*inch) canvas.line(2.5*inch, start_posn-1.2*inch, 2.5*inch, start_posn-0.1*inch) canvas.drawString(0.7*inch, start_posn-0.3*inch, 'Company Name:') canvas.drawString(2.7*inch, start_posn-0.3*inch, self.details['name'].strip()) canvas.line(0.5*inch, start_posn-0.4*inch, PAGE_WIDTH-0.5*inch, start_posn-0.4*inch) canvas.drawString(0.7*inch, start_posn-0.6*inch, 'Mailing Address:') address = '' if self.details['address1'].strip() != '': address += self.details['address1'].strip() + '<br/>' if self.details['address2'].strip() != '': address += self.details['address2'].strip() + '<br/>' if self.details['city'].strip() != '' or \ self.details['state_prov'].strip() != '': if self.details['city'].strip() != '': address += self.details['city'].strip() + ', ' address += self.details['state_prov'].strip() + '<br/>' if self.details['postal_code'].strip() != '': address += self.details['postal_code'].strip() + ' ' address += self.details['country'].strip() style_sheet = getSampleStyleSheet() style = style_sheet['BodyText'] para = Paragraph(address, style) h = para.wrap(4.7 * inch, 0.9* inch)[1] para.drawOn(canvas, 2.7 * inch, start_posn-h-0.45*inch) self.start_posn = start_posn-1.45*inch