如何使用python-pdfkit中的from_string生成包含非ASCII字符的PDF文件

6
我在使用Python 3.5.2、python-pdfkit以及wkhtmltox-0.12.2时,遇到了一个难题,即无法生成带有非ASCII字符的简单PDF文件。以下是我能够编写的最简单的示例:
import pdfkit
html_content = u'<p>ö</p>'
pdfkit.from_string(html_content, 'out.pdf')

这就像输出文档的样子:PDF中错误显示非ASCII字符
3个回答

32

我发现只需要在我的HTML代码中添加一个带有charset属性的元标签:

import pdfkit

html_content = """
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
</head>
<body>
    <p>&euro;</p>
    <p>áéíóúñö</p>
<body>
</html>
"""

pdfkit.from_string(html_content, 'out.pdf')

实际上我花了相当长的时间去追随像这里提出的错误解决方案。如果有人感兴趣,我在我的博客上写了一个短故事抱歉打扰了 :)


我很高兴它能帮到@VishnuYS! - jllopezpino
1
只有在使用pdfkit.from_string()时才有效,我正在使用pdfkit.from_file(),但不起作用。 - Cristóbal Felipe Fica Urzúa
1
我想从一封电子邮件中提取HTML并生成PDF,即使我拥有带有重音符号的适当的Unicode字符串作为pdfkit.from_string的“输入”,输出也会出现编码混乱的问题。在HTML代码(Unicode字符串中)手动添加meta charset属性像魔术般奏效,并且pdfkit可以生成带有重音符号和其他非ASCII字符的适当PDF。大多数情况下,<head>为空,因此我会进行简单的替换,否则我会将其插入到<html>之后(如果不存在),或附加到它之后(如果它存在且不为空)。感谢@jllopezpino。 - Jeb
1
完美运行!谢谢!(我正在使用 from_string) - Marcus
请问如何使用 pdfkit.from_file() 使其运作? - GitHunter0

2

在选项中设置字符集也是可能的。这样,您就不必更改HTML文件——特别是如果您不是创建它的人,并且不想搞砸它。

def get_options():
    return {
        'encoding': 'UTF-8',
        'enable-local-file-access': True
    }
pdfkit.from_string(html, verbose=True, options=get_options(), configuration=_pdfkit_config)

如果不更改原始HTML,按照您所说的方式无法正常工作。 - Nwawel A Iroume

1

1
我意识到有3个名为pdfkit的项目。Nodejs的那个与Python的那个没有任何关系。Python和Ruby的那些是wkhtmltopdf的接口。无论如何,感谢您的回复! - jllopezpino

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接