python-3.x 将HTML转换为PDF时,UTF-8字符显示为框

b4wnujal  于 2023-01-14  发布在  Python
关注(0)|答案(1)|浏览(145)

我想将HTML转换为具有特殊字符的PDF,但输出不显示特殊字符。

from io import BytesIO
from django.http import HttpResponse
from django.template.loader import get_template
from xhtml2pdf import pisa

def html2pdf(template_source,context_dict={}):
    template=get_template(template_source)
    html=template.render(context_dict)
    result=BytesIO()
    pdf=pisa.CreatePDF(BytesIO(html.encode('utf-8')),result)
if not pdf.err:
    return HttpResponse(result.getvalue(),content_type="application/pdf")
return None

是我的pdf.py,我有一个pdf.html的HTML文件

<!DOCTYPE html>
<html lang="en">
<meta charset="UTF-8">
<head>
    <style>
        body {font-family: 'Josefin Slab';
        font-size: large;
        background-color: beige;}
        </style>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h2 class="utf">This is myŐ, Ű, ő or ű✅✅ pdf file with special char</h2>
</body>
</html>

当我将其转换为PDF时,它显示
这是我的■,■,■或■■ ■ ■ ■ ■ ■ ■■■ pdf文件,带有特殊的......
现在怎么办?

w46czmvw

w46czmvw1#

正如评论中所指出的,你使用的字符在字体中不存在,所以使用不同的字体!不过,也请参见下面的注解

在这里我们可以看到,字符的PDF格式时,正确嵌入将仍然工作在浏览器的pdf视图,但没有处理好在传统的pdf查看器。

不是所有的字符都可用,即使在一个完整的通用字体,特别是彩色的html对象,如emoji或你的,因为这些是由浏览器字体生成,因此需要转换为图像与底层文本。这种组合二为一是有问题的PDF中使用。它取决于PDF作者,如果它将可能与给定的字体,所以更安全的fudge是使用平方根符号。

旁注在某些斯堪的纳维亚国家/地区,勾号可能表示错误而非正确https://en.wikipedia.org/wiki/Check_mark

相关问题