Django - pdf 响应编码错误 - reportlab

Django - pdf response has wrong encoding - reportlab

我正在 Django 后端开发 PDF 生成器。 我使用 reportlab。它似乎有效,但编码不正确。当我使用变音符号时,它得到错误的 characters/signs。

问题非常类似于:

但是我用的是reportlab,可以添加字体。 我在reportlab中注册了支持波兰语变音符号的字体:"Aleo".

pdfmetrics.registerFont(TTFont('Aleo', './resources/fonts/Aleo/Aleo-Light.ttf'))
pdfmetrics.registerFont(TTFont('AleoBd', './resources/fonts/Aleo/Aleo-Bold.ttf'))
pdfmetrics.registerFont(TTFont('AleoIt', './resources/fonts/Aleo/Aleo-Italic.ttf'))
pdfmetrics.registerFont(TTFont('AleoBI', './resources/fonts/Aleo/Aleo-BoldItalic.ttf'))
registerFontFamily('Aleo', normal='Aleo', bold='AleoBd', italic='AleoIt', boldItalic='AleoBI')

在 djagno 中输出 pdf 的示例:

file_response = Album.pdf_generator(request.user, request.data.get('album_id'))

# Make copy to save local pdf file and send via django
binary_copy = deepcopy(file_response)
with open('test.pdf', 'wb') as f:
    f.write(binary_copy.read())

content_type = {'pdf': 'application/pdf'}

response = HttpResponse(file_response, content_type=content_type)
response['Content-Disposition'] = 'attachment; filename=moja_nazwa.pdf'
# response = FileResponse(file_response, as_attachment=True, filename='hello.pdf')
return response

示例两个文件从相同的 bytesIO 生成:

一个。本地文件 B. 共享 FileResponse 或 HttpResponse 文件:

奇怪的是,如果我在大摇大摆地单击 link "download" 后使用 "open with" 选项,然后选择其他程序,例如"wps pdf" 我将在生成的 pdf 中获取其他字符..

使用 wps pdfswagger 直接从 link 打开 pdf:

分析问题,终于找到了生成pdf编码错误的原因。问题不在于 reportlab,而在于 Swagger,他在共享文件时将其内容视为文本数据而不是二进制数据。