def calculate_metrics(self): self.HEADER_ASCENT = getAscent(self.HEADER_FONT, self.HEADER_SIZE) self.HEADER_DESCENT = -getDescent(self.HEADER_FONT, self.HEADER_SIZE) self.HEADER_HEIGHT = self.HEADER_ASCENT + self.HEADER_DESCENT + self.HEADER_PADDING * 2 self.BOX_ASCENT = getAscent(self.BOX_FONT, self.BOX_SIZE) self.BOX_DESCENT = -getDescent(self.BOX_FONT, self.BOX_SIZE) self.BOX_HEIGHT = self.BOX_ASCENT + self.BOX_DESCENT + self.BOX_PADDING * 2 self.SUMMARY_BOX_WIDTH = self.WIDTH - self.PAGE_MARGIN * 2
def draw_text_cell(self, a_canvas, text, font_name, font_size, vertical_align='t', force_baseline=None, inset_x=0., inset_y=0., draw_baseline=False): if text is None: return a_canvas.saveState() inset_rect = self.inset_xy(inset_x, inset_y) if vertical_align == 'm': y = inset_rect.center_y - getAscent(font_name, font_size) / 2. elif vertical_align == 't': y = inset_rect.max_y - getAscent(font_name, font_size) else: y = inset_rect.min_y - getDescent(font_name, font_size) if force_baseline is not None: y = self.min_y + force_baseline cp = a_canvas.beginPath() cp.rect(self.min_x, self.min_y, self.width, self.height) a_canvas.clipPath(cp, stroke=0, fill=0) a_canvas.setFont(font_name, font_size) tx = a_canvas.beginText() tx.setTextOrigin(inset_rect.min_x, y) tx.textLine(text) a_canvas.drawText(tx) if draw_baseline: a_canvas.setDash([3.0, 1.0, 2.0, 1.0]) a_canvas.setLineWidth(0.5) bl = a_canvas.beginPath() bl.moveTo(inset_rect.min_x, y - 1.) bl.lineTo(inset_rect.max_x, y - 1.) a_canvas.drawPath(bl) a_canvas.restoreState()
def drawHumanReadable(self): if self.humanReadable: #we have text from reportlab.pdfbase.pdfmetrics import getAscent, stringWidth s = str(self._humanText()) fontSize = self.fontSize fontName = self.fontName w = stringWidth(s,fontName,fontSize) width = self._width if self.quiet: width -= self.lquiet+self.rquiet x = self.lquiet else: x = 0 if w>width: fontSize *= width/float(w) y = 1.07*getAscent(fontName)*fontSize/1000. self.annotate(x+width/2.,-y,s,fontName,fontSize)
def drawHumanReadable(self): if self.humanReadable: #we have text from reportlab.pdfbase.pdfmetrics import getAscent, stringWidth s = str(self._humanText()) fontSize = self.fontSize fontName = self.fontName w = stringWidth(s, fontName, fontSize) width = self._width if self.quiet: width -= self.lquiet + self.rquiet x = self.lquiet else: x = 0 if w > width: fontSize *= width / float(w) y = 1.07 * getAscent(fontName) * fontSize / 1000. self.annotate(x + width / 2., -y, s, fontName, fontSize)
def get_ascent(self): return getAscent(self.font, self.size)
def get_line_height(self): return getAscent(self.font, self.size) - getDescent( self.font, self.size) + self.BOX_PADDING
def getHeight(self): return getAscent(self.getFont(),self.getFontSize())
def ascent_pts(self): """Return font ascent in points.""" return pdfmetrics.getAscent(self.name, self.size_pts)