Alora
Alora

Reputation: 891

Creating PDF with Python using FPDF char by char

I'm trying to create a pdf with python and I want to put a text in pdf char by char. I can't find out how to do it and when it saves output pdf all of the characters are on each other. this is my code snippet:

from fpdf import FPDF

pdf = FPDF('P', 'mm', (100,100))
# Add a page
pdf.add_page()

# set style and size of font
# that you want in the pdf
pdf.add_font('ariblk', '', "ArialBlack.ttf", uni=True)
pdf.set_font("ariblk",size = int(50*0.8))
text = [['a','b','c','d','e','w','q'],['f','g','h','i','j','k','l']]
print("creating pdf...")
line = 0
for w in range(0,len(text)):
    for h in range(0,len(text[w])):
        # create a cell
        r = int (50)
        g = int (100)
        b = int (10)
        pdf.set_text_color(r, g, b) 
        text_out = text[w][h]
        pdf.cell(0,line, txt = text_out, ln = 2)


# save the pdf with name .pdf
pdf.output(name = "img/output.pdf", dest='F')
print("pdf created!")

and this is what my code output is:

(this is copy-paste from the output pdf): iljfbeqaghdckw (this is a screenshot of the output): screenshot

Upvotes: 1

Views: 1690

Answers (1)

Laurent
Laurent

Reputation: 126

I don't know fpdf module but I think that your problem only comes from the fact that you don't change the X, Y coordinates of printing of each character.

You have to use 'pdf.set_xy()` to set the X and Y coordinates of each of your characters

I made small changes to the font and colors for my tests.

from fpdf import FPDF
import random

pdf = FPDF('P', 'mm', (100,100))
# Add a page
pdf.add_page()

# set style and size of font
# that you want in the pdf
#pdf.add_font('ariblk', '', "ArialBlack.ttf", uni=True)
pdf.set_font("Arial",size = int(24))
text = [['a','b','c','d','e','w','q'],['f','g','h','i','j','k','l']]
print("creating pdf...")
line = 10
for w in range(len(text)):
    for h in range(len(text[w])):
        # create a cell
        r = random.randint(1, 255)
        g = random.randint(1, 255)
        b = random.randint(1, 255)
        pdf.set_text_color(r, g, b) 
        text_out = text[w][h]
        pdf.set_xy(10*w, 10*h)
        pdf.cell(10, 10, txt=text_out, ln=0, align='C')

# save the pdf with name .pdf
pdf.output(name = "output.pdf", dest='F')
print("pdf created!")

Then, you have to adapt the offset of X and/or Y according to the display you want to obtain in print.

Remark: As you don't change the values of r, g, b in your for loops, the best is to go up the assignment of variables r, g and b before the for loops

Output in the PDF:

a f
b g
c h
d i
e j
w k
q l

Upvotes: 1

Related Questions