Untitled

 avatar
unknown
plain_text
5 months ago
2.7 kB
2
Indexable
import csv
from fpdf import FPDF

class PDF(FPDF):
    def basic_table(self, headings, rows):
        for heading in headings:
            self.cell(w=4, h=0.7, txt=heading, border=1)
        self.ln()
        for row in rows:
            for col in row:
                self.cell(w=4, h=0.6, txt=col, border=1)  
            self.ln()

    def improved_table(self, headings, rows, col_widths=(4.2, 3.9, 3.5, 4.0)):
        for col_width, heading in zip(col_widths, headings):
            self.cell(w=col_width, h=0.7, txt=heading, border=1, align="C")
        self.ln()
        for row in rows:
            for col_width, col in zip(col_widths, row):
                self.cell(w=col_width, h=0.6, txt=col, border="LR", align="R" if col_width == col_widths[-1] else "L")
            self.ln()
       
        self.cell(w=sum(col_widths), h=0, txt="", border="T")

    def colored_table(self, headings, rows, col_widths=(4.2, 3.9, 3.5, 4.2)):
        # Cabeçalho em vermelho
        self.set_fill_color(255, 0, 0)  # Vermelho
        self.set_text_color(255)  # Texto em branco
        self.set_draw_color(255, 0, 0)  # Bordas vermelhas
        self.set_line_width(0.03)
        self.set_font(style="B")
        for col_width, heading in zip(col_widths, headings):
            self.cell(col_width, 0.7, heading, border=1, align="C", fill=True)
        self.ln()
        
        # Linhas de dados em azul claro
        self.set_fill_color(173, 216, 230)  # Azul claro
        self.set_text_color(0)  # Texto em preto
        self.set_font()
        fill = False
        for row in rows:
            for col_width, col in zip(col_widths, row):
                self.cell(col_width, 0.6, col, border="LR", align="L" if col_width == col_widths[0] else "R", fill=fill)
            self.ln()
            fill = not fill  # Alterna entre linhas preenchidas e não preenchidas
        self.cell(sum(col_widths), 0, "", "T")

def load_data_from_csv(csv_filepath):
    headings, rows = [], []
    with open(csv_filepath, encoding="utf8") as csv_file:
        for row in csv.reader(csv_file, delimiter=","):
            if not headings:  # Extraindo nomes das colunas da primeira linha
                headings = row
            else:
                rows.append(row)
    return headings, rows

# Exemplo de uso
csv_filepath = "countries.txt"  # Certifique-se de que o arquivo existe neste local
col_names, data = load_data_from_csv(csv_filepath)
pdf = PDF(unit='cm')
pdf.set_font("helvetica", size=14)
pdf.add_page()
pdf.basic_table(col_names, data)
pdf.add_page()
pdf.improved_table(col_names, data)
pdf.add_page()
pdf.colored_table(col_names, data)
pdf.output("demo.pdf")
Editor is loading...
Leave a Comment