def draw_content(self): self.setFont(*self.dfont) rows = list(results(self.cl)) if len(rows): yp = self.h - 2.5 * self.margin dx = (self.w - 2 * self.margin) / len(rows[0]) xp = self.margin self.draw_list_header(dx, yp + .7 * cm) for row in rows: if yp < self.margin + 2 * cm: self._page_break() yp = self.h - self.margin self.draw_list_header(dx, yp + .7 * cm) xp = self.margin nb_lines = 1 self.p.line(1.8 * cm, yp + .4 * cm, self.w - .8 * cm, yp + .4 * cm) for col in row: if col.find('<img') >= 0: picture = col[col.index('src="') + 5:] picture = settings.STATIC_ROOT + picture[:picture.index( '"')].replace(settings.STATIC_URL, '') if os.path.exists(picture) and os.path.isfile(picture): self.p.drawImage(picture, xp, yp - 2 * cm, width=2 * cm, height=2 * cm, preserveAspectRatio=True) nb_lines = 2 / .4 + 1 else: try: col = unescape(col) except AttributeError: pass lines = hyphenate(col, dx - .5 * cm, *self.dfont, separator='([ ./?&_@])') cnt = 0 for line in lines: cnt += self.drawString(xp, yp - cnt * .4 * cm, line) nb_lines = max(nb_lines, cnt) # cnt = 0 # pre_lines = col.split('<br />') # for pre_line in pre_lines: # lines = hyphenate(pre_line, dx-.2*cm, *self.dfont, separator='([ /@])') # for line in lines: # self.drawString(xp, yp - cnt*.4*cm, line) # cnt += 1 # nb_lines = max(nb_lines, cnt) xp += dx yp -= (nb_lines + .5) * .4 * cm
def draw_content(self): self.setFont(*self.dfont) rows = list(results(self.cl)) if len(rows): yp = self.h - 2.5 * self.margin dx = (self.w - 2 * self.margin) / len(rows[0]) xp = self.margin self.draw_list_header(dx, yp+.7*cm) for row in rows: if yp < self.margin + 2 * cm: self._page_break() yp = self.h - self.margin self.draw_list_header(dx, yp+.7*cm) xp = self.margin nb_lines = 1 self.p.line(1.8 *cm, yp + .4*cm, self.w - .8*cm, yp + .4*cm) for col in row: if col.find('<img') >= 0: picture = col[col.index('src="')+5:] picture = settings.STATIC_ROOT + picture[:picture.index('"')].replace(settings.STATIC_URL, '') if os.path.exists(picture) and os.path.isfile(picture): self.p.drawImage( picture, xp, yp-2*cm, width=2*cm, height=2*cm, preserveAspectRatio=True ) nb_lines = 2/.4 + 1 else: try: col = unescape(col) except AttributeError: pass lines = hyphenate(col, dx-.5*cm, *self.dfont, separator='([ ./?&_@])') cnt = 0 for line in lines: cnt += self.drawString(xp, yp-cnt*.4*cm, line) nb_lines = max(nb_lines, cnt) # cnt = 0 # pre_lines = col.split('<br />') # for pre_line in pre_lines: # lines = hyphenate(pre_line, dx-.2*cm, *self.dfont, separator='([ /@])') # for line in lines: # self.drawString(xp, yp - cnt*.4*cm, line) # cnt += 1 # nb_lines = max(nb_lines, cnt) xp += dx yp -= (nb_lines + .5) * .4*cm
def draw_fieldset(self, xp, yp, fieldset, inline=False): l = [] for line in fieldset: for field in line: if type(field.field) == dict: label = field.field["label"] value = "" if hasattr(field.field, "value"): value = field.field["value"] else: label = force_text(field.field.label) value = field.field.value() if type(value) == bool: if value == True: value = _("Yes") else: value = _("No") elif hasattr(field.field, "field") and hasattr( field.field.field, "choices"): values = [] if hasattr(value, '__iter__'): choices = [force_text(e) for e in value] else: choices = [force_text(value)] for choice in choices: for (val, desc) in field.field.field.choices: if hasattr(desc, '__iter__'): for (val, desc) in desc: if force_text(val) == choice: values.append(desc) else: if force_text(val) == choice: values.append(desc) value = ", ".join(values) else: value = force_text(value) empty = type(value) == None or value == None or len( value) == 0 or value == "None" if not empty: l.append((label, value)) if len(l) > 0: if inline == False: t = type(fieldset.name) if t == str or t == unicode: self.draw_fieldset_header(xp, yp, fieldset.name) elif "name" in str(fieldset.name or ''): self.draw_fieldset_header(xp, yp, fieldset.name["name"]) yp -= 1.5 * self.line_height for (label, value) in l: if yp < self.margin + 2 * cm: self._page_break() yp = self.h - self.margin self.setFont(*self.rfonti) yp -= self.drawString(xp, yp, label) self.setFont(*self.rfont) lines = hyphenate(self.htmlparser.unescape(value), self.w - 3 * self.margin, *self.dfont, separator='([ /@])') for line in lines: yp -= self.drawString(xp, yp, line) yp -= self.line_height / 2 yp -= self.line_height return yp
def draw_fieldset(self, xp, yp, fieldset, inline=False): l = [] for line in fieldset: for field in line: if type(field.field) == dict: label = field.field["label"] value = "" if hasattr(field.field, "value"): value = field.field["value"] else: label = force_text(field.field.label) value = field.field.value() if type(value) == bool: if value == True: value = _("Yes") else: value = _("No") elif hasattr(field.field, "field") and hasattr(field.field.field, "choices"): values = [] if hasattr(value, '__iter__'): choices = [force_text(e) for e in value] else: choices = [force_text(value)] for choice in choices: for (val, desc) in field.field.field.choices: if hasattr(desc, '__iter__'): for (val, desc) in desc: if force_text(val) == choice: values.append(desc) else: if force_text(val) == choice: values.append(desc) value = ", ".join(values) else: value = force_text(value) empty = type(value) == None or value == None or len(value) == 0 or value == "None" if not empty: l.append((label, value)) if len(l) > 0: if inline == False: t = type(fieldset.name) if t == str or t == unicode: self.draw_fieldset_header(xp, yp, fieldset.name) elif "name" in fieldset.name: self.draw_fieldset_header(xp, yp, fieldset.name["name"]) yp -= 1.5 * self.line_height for (label, value) in l: if yp < self.margin + 2 * cm: self._page_break() yp = self.h - self.margin self.setFont(*self.rfonti) yp -= self.drawString(xp, yp, label) self.setFont(*self.rfont) lines = hyphenate(self.htmlparser.unescape(value), self.w-3*self.margin, *self.dfont, separator='([ /@])') for line in lines: yp -= self.drawString(xp, yp, line) yp -= self.line_height / 2 yp -= self.line_height return yp