0

使用 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来读取文本文件decodelatin-1,输出是错误的。

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

字母与特殊符号混合在一起。但它是唯一UnicodeEncodeError不被提出的方式。

内容data.txt

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

1 回答 1

0

添加对 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")

结果:

PDF 结果

于 2022-03-02T08:37:25.363 回答