示例#1
0
文件: PdfFile.py 项目: dpjl/cfm
class PdfFile:
    def __init__(self, file_path):
        self.page_width, self.page_height = A4
        self.thb_width, self.thb_height = 40, 40
        self.y = self.page_height - self.thb_height
        self.x = 10
        self.no_thb = 0
        self.canvas = Canvas(file_path)

    def new_line(self):
        self.y -= self.thb_height
        self.x = 10
        if self.y < 0:
            self.canvas.showPage()
            # Ajouter un entete / un pied de page, avec date et le nombre dans la page sur le nombre total
            self.y = self.page_height - self.thb_height

    def next_position(self):
        self.x += self.thb_width
        if self.x > 540:
            self.new_line()

    def add_image(self, image_binary):
        self.canvas.drawImage(ImageReader(image_binary),
                              self.x,
                              self.y,
                              width=self.thb_width,
                              height=self.thb_height,
                              showBoundary=False,
                              preserveAspectRatio=True)

    def add_text(self, text):
        items = [
            Paragraph(text, ParagraphStyle(name='Normal',
                                           fontSize=3,
                                           leading=0))
        ]
        f = Frame(self.x,
                  self.y - 6,
                  50,
                  10,
                  showBoundary=0,
                  leftPadding=1,
                  bottomPadding=0,
                  rightPadding=0,
                  topPadding=0)
        f.addFromList(items, self.canvas)

    def add_media_image(self, media):

        if media.metadata[THUMBNAIL].thumbnail is not None and media.metadata[
                THUMBNAIL].thumbnail != b'':
            bytes_image = io.BytesIO(media.metadata[THUMBNAIL].thumbnail)
            self.add_image(bytes_image)

        else:
            self.canvas.drawBoundary(Color(4, 4, 4, 0), self.x, self.y,
                                     self.thb_width, self.thb_height)
            self.no_thb += 1

        self.canvas.linkURL("../" + str(media.relative_path),
                            (self.x, self.y + self.thb_height,
                             self.x + self.thb_width, self.y),
                            relative=0,
                            thickness=0)

        self.add_text(
            str(media.db_id) + " | " + media.extension[1:] + " | " +
            media.get_str_date())
        self.next_position()

    def save(self):
        self.canvas.showPage()
        self.canvas.save()