2

我正在使用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 文件。

4

0 回答 0