我正在使用Pisa在 Django 中将 HTML 文件转换为 PDF 。当内容仅为英文时,它正在工作。但这里的内容将是英语和其他五种印度语言(泰米尔语、印地语、泰卢固语、马拉雅拉姆语和卡纳达语)。我在下面给出了我的代码。
视图.py
def render_to_pdf1(template_src, context_dict):
template = get_template(template_src)
context = Context(context_dict)
html = template.render(context)
result = StringIO.StringIO()
pdf = pisa.pisaDocument(StringIO.StringIO(html.encode('UTF-8')), result)
return result.getvalue()
def print_pdf(request):
message = Message.objects.get(id = 1)
html_table_string = ''
html_table_string += '%s' % message.english
html_table_string += '%s' % message.tamil
html_table_string += '%s' % message.hindi
html_table_string += '%s' % message.telugu
html_table_string += '%s' % message.kannada
html_table_string += '%s' % message.malayalam
fileread = str(settings.TEMPLATE_DIRS[0])+str('/base_file.html')
fr = open(fileread, "r").read()
fr = fr.replace('message_content', html_table_string)
result = StringIO.StringIO()
filewrite = str(settings.TEMPLATE_DIRS[0]) + str('/temp_file.html')
empty = ""
fw = open(filewrite, 'w')
fw.write(empty)
fw.write(fr)
fw.close()
pdf_contents = render_to_pdf1('temp_file.html',result)
file_to_be_saved = ContentFile(pdf_contents)
name = (str(request.user.email) + ".pdf").replace("@", '')
pdf = Pdf.objects.create(name = name, user = request.user, created_by = request.user)
pdf.name.save(name ,file_to_be_saved)
file_path = Pdf.objects.get(user = request.user).name
pdf_file = str(file_path).split("media")[1]
return HttpResponseRedirect('/site_media' + pdf_file)
我正在做的是:
- 有一个基本模板base_file.html。
- 通过 ID 获取消息对象(ID 将动态提供)。
- 然后将message_content替换为当前内容。
- 将其写入文件temp_file.html。
- 将temp_file.html转换为 PDF 文件。
转换后的 PDF 将包含英语、泰米尔语、印地语、泰卢固语、卡纳达语和马拉雅拉姆语的消息。但是我无法在 HTML 文件中写入其他语言内容,也无法对其进行转换。我得到的错误是'ascii' codec can't encode characters in position 1066-1075: ordinal not in range(128)
并且发生在行中fw.write(fr)
。
那么我该如何实现呢?我想打印包含所有这些语言内容的 PDF 文件。