PDF aanmaken met Python

Op deze pagina:

Voor het maken van pdfs kun je gebruik maken van fpdf, deze moet je eerst installeren:


pip install fpdf

De basis opdrachten voor het maken van een pdf


#!/usr/bin/env python3

from fpdf import FPDF

titel = 'mijn pdf titel'


class PDF(FPDF):
    def header(self):
        # een afbeelding als logo (plaatje,x,y,breedte,hoogte)
        # als je alleen de breedte opgeeft,
        # dan wordt de hoogte automatisch uitgerekend naar verhouding
        self.image('plaatje.png', 10, 8, 25)

        # lettertype
        self.set_font('helvetica', 'B', 20)

        # breedte en positie van de titel berekenen
        titel_breedte = self.get_string_width(titel) + 6
        pdf_breedte = self.w
        self.set_x((pdf_breedte - titel_breedte) / 2)

        # kleuren voor het titelblok instellen
        self.set_draw_color(0, 80, 180)  # kleur van de omlijning
        self.set_fill_color(230, 230, 0)  # achtergrondkleur
        self.set_text_color(220, 50, 50)  # tekstkleur

        # dikte van de omlijning
        self.set_line_width(1)

        # titel
        self.cell(titel_breedte, 10, titel, border=True, ln=True, align='C', fill=True)

        # nieuwe regel
        self.ln(20)

    def footer(self):
        # positie van de footer
        self.set_y(-15)

        # lettertype instellen
        self.set_font('helvetica', 'I', 10)

        # tekstkleur instellen
        self.set_text_color(169, 169, 169)

        # pagina nummer
        self.cell(0, 10, f'Pagina {self.page_no()} van {{nb}}', align='C')

    def koptekst(self, kop, link):
        # link instellen
        self.set_text_color(0, 170, 0)
        self.set_link(link)

        # lettertype instellen
        self.set_font('helvetica', 'B', 12)

        # achtergrondkleur
        self.set_fill_color(175, 255, 181)

        # tekst kop
        self.cell(0, 10, kop, ln=True, fill=True)

        # nieuwe regel
        self.ln()

    def inhoud_toevoegen(self):
        # meerdere regels genereren:
        txt = ''
        for i in range(1, 41):
            # pdf.cell(0, 12, f'Dit is regel {i}', ln=True)
            txt = txt + f'Dit is regel {i}\n'
        self.set_font('helvetica', '', 14)

        # tekst invoegen
        self.multi_cell(0, 5, txt)

        # nieuwe regel toevoegen
        self.ln()

        # einde van de tekst
        self.set_font('times', 'I', 12)
        self.cell(0, 5, 'einde van de tekst')


# een PDF object aanmaken
# layout: 'P' (portret=staand) of 'L' (liggend)
# meet eenheid: 'mm', 'cm' of 'in'
# formaat: A3, A4, A5, letter, legal of
# zelf maten opgeven, bijvoorbeeld: (200,300)
pdf = PDF('P', 'mm', 'A4')

# pdf metadata toevoegen
# metadata zijn o.a. te zien bij de eigenschappen van de pdf in Adobe
pdf.set_title('De titel van deze pdf')
pdf.set_author('De auteur van deze pdf')

# links
web_link = 'https://web2.nl'
kop_link = pdf.add_link()

# totaal aantal pagina's
pdf.alias_nb_pages()

# pagina overloop instellen
pdf.set_auto_page_break(auto=True, margin=20)

# een pagina toevoegen
pdf.add_page()

# 'achtergrond' afbeelding instellen (= gewoon een afbeelding)
# x = -0.5, w = pdf.w + 1 om te zorgen dat dit de volle breedte inneemt
pdf.image('achtergrond.jpg', x=-0.5, w=pdf.w + 1)

# Links toevoegen
pdf.cell(0, 10, 'website', ln=True, link=web_link)
pdf.cell(0, 10, 'inhoud', ln=True, link=kop_link)

# lettertype instellen
# fonts: 'times', 'courier', 'helvetica', 'symbol', 'zpfdingbats'
# stijl: 'B' (vet), 'U' (onderstrepen), 'I' (schuin), '' (normaal),
# combineren mag ook, bijvoorbeeld: 'BU'
# lettergrootte in cijfers opgeven
pdf.set_font('helvetica', '', 16)

# de tekstkleur kun je ook opgeven
pdf.set_text_color(200, 30, 70)

# tekst toevoegen
# in een cell
# w = breedte in de meet eenheid die je eerder zelf hebt opgegeven (mm)
# een breedte van 0 is de volle breedte van de pdf
# h = hoogte in de meet eenheid die je eerder zelf hebt opgegeven (mm)
# tekst = de tekst die je wilt hebben in je pdf
# ln = True of False: wel of niet naar een nieuwe regel na de tekst
# border = True of False: wel of geen omlijning om deze regel (cell)
pdf.cell(50, 20, 'Hallo wereld!', ln=True, border=True)
pdf.cell(100, 20, 'Dit staat op een nieuwe regel')

# een pagina toevoegen
pdf.add_page()

# inhoud voor de pdf toevoegen
pdf.koptekst('Dit is mijn eigen pdf', kop_link)
pdf.inhoud_toevoegen()

# pdf opslaan, (pad en) naam van het bestand opgeven
pdf.output('naam_voor_het_pdf_bestand.pdf')

 

Verwante artikelen