Example #1
0
    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
Example #2
0
    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
Example #3
0
    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
Example #4
0
    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