Python fpdf 没有给出正确的输出

Python fpdf is not giving correct output

使用 fpdf 模块时,问题在于使用特殊字符,例如 'ć,č,š,đ,ž...

我试过这样简单的代码:

from fpdf import FPDF

pdf = FPDF()
pdf.add_page()
pdf.set_font("Arial", size=15)
f = open("data.txt", "r")
for x in f:
    pdf.cell(200, 10, txt=x, ln=1, align='C')

pdf.output("mytestdata.pdf")

引发的错误是:UnicodeEncodeError: 'latin-1' codec can't encode character '\u2021' in position 77: ordinal not in range(256)

当我使用 with open 读取文本文件并 decode 使用 latin-1 时,输出错误。

with open("data.txt", 'rb') as fh:
    txt = fh.read().decode('latin-1')

字母与特殊符号混合。但这是不引发 UnicodeEncodeError 的唯一方法。

data.txt 的内容:

test1: Čč
test2: Ćć
test3: Žž
test4: Đđ
test5: Šš

添加对 Unicode 字体的支持,并确保以保存文件的编码读取文件。同时从文件中读取的行中删除尾随换行符,因为它也会出错。

from fpdf import FPDF

pdf = FPDF()
pdf.add_page()
pdf.add_font('Arial', '', 'c:/windows/fonts/arial.ttf', uni=True)  # added line
pdf.set_font('Arial', size=15)
with open("data.txt", encoding='utf8') as f:
    for x in f:
        pdf.cell(200, 10, txt=x.strip(), ln=1, align='C')

pdf.output("mytestdata.pdf")

结果: