Encoding 带有注册字体的ReportLab UTF-8字符

Encoding 带有注册字体的ReportLab UTF-8字符,encoding,utf-8,fonts,report,reportlab,Encoding,Utf 8,Fonts,Report,Reportlab,我正在使用ReportLab生成pdf,但在表示utf-8字符时遇到了一些问题。ReportLab包含一些可用的注册字体,但似乎没有一种支持utf-8 print p.getAvailableFonts() ['Courier', 'Courier-Bold', 'Courier-BoldOblique', 'Courier-Oblique', 'Helvetica', 'Helvetica-Bold', 'Helvetica-BoldOblique', 'Helvetica-Oblique',

我正在使用ReportLab生成pdf,但在表示utf-8字符时遇到了一些问题。ReportLab包含一些可用的注册字体,但似乎没有一种支持utf-8

print p.getAvailableFonts()
['Courier', 'Courier-Bold', 'Courier-BoldOblique', 'Courier-Oblique', 'Helvetica', 'Helvetica-Bold', 'Helvetica-BoldOblique', 'Helvetica-Oblique', 'Symbol', 'Times-Bold', 'Times-BoldItalic', 'Times-Italic', 'Times-Roman', 'ZapfDingbats']
我检查了关于这个主题的类似问题,一般建议使用utf-8字符的字体。但我很确定“Times Roman”和“Helvetica”字体都有utf-8字符,比如“ş,ı,ğ”。但结果似乎并非如此

pdfmetrics.registerFont(TTFont('Verdana', 'Verdana.ttf'))

p.setFont("Times-Roman", 24)
p.drawCentredString(297,600,"şırküç")
p.setFont("Verdana", 24)
p.drawCentredString(297,550,"şırküç")
p.setFont("Helvetica", 24)
p.drawCentredString(297,500,"şırküç")
我注册了一个名为“Verdana”的新字体,它可以按预期工作。但是我不能使用可用的字体


我想在我的文档中使用“Helvetica”和“Times Roman”字体,但无法使其正常工作。

PDF标准定义了一组14种字体,必须在所有兼容的阅读器中提供。正如我所见,你找到了他们。但所有这些字体只包含一组有限的字形。它与ISO-8859-1大致相似,因此没有土耳其语

如果可以,建议您始终嵌入自己的字体

因此,我建议您嵌入您选择的适当字体,而不是依赖内置的、有限的
Times Roman
Helvetica
。从我所看到的,你发布的这些例子看起来分别像泰晤士报新罗马版和Arial版,但为了在PDF中完全合法地嵌入这两种字体,你需要一个许可证。如果你想完全合法,你可以使用FreeSerif、Nimbus Roman No 9 L、Nimbus Sans L、FreeSans和Liberation Sans

编辑:Verdana也是专有的,我不知道有什么免费的替代建议

当然,如果你不打算公开发布这些PDF,你不必担心许可证问题