2012-09-17 47 views
0

我的模板:如何使用unicode字符在Django中生成pdf?

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
    <head> 
     <meta content="text/html; charset=utf-8" http-equiv="Content-Type"> 
     <title>PRINT FILE</title> 
    </head> 
    <body> 
     <center>ąśżźćę</center> 
    </body> 
</html> 

和看法:

@login_required 
def print_to_pdf(request): 
    data = dict() 
    return render_to_pdf('print.html', { 'pagesize':'A4', 'pdf': '1', 'data': data }) 

和render_to_pdf:

def render_to_pdf(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, link_callback=fetch_resources, encoding='utf-8') 
    if not pdf.err: 
     return HttpResponse(result.getvalue(), mimetype='application/pdf') 
    return HttpResponse('We had some errors<pre>%s</pre>' % escape(html)) 

def fetch_resources(uri, rel): 
    path = os.path.join(settings.MEDIA_ROOT, uri.replace(settings.MEDIA_URL, "")) 
    return path 

但PDF没有特殊字符。我也尝试过使用font-face。怎么做?

回答

0

我写(修改:http://boris.kodmasin.net/python:djangoandwkhtmltopdf)这个函数:

def get_pdf(template_src, context_dict): 
    template = get_template(template_src) 
    context = Context(context_dict) 
    html = template.render(context) 

    import subprocess 
    wkhtml2pdf = subprocess.Popen((settings.WKHTML2PDF_COMMAND, 
            "--footer-right", 
            "[page]/[toPage]", 
            "--print-media-type", 
            "--encoding", 
            "UTF-8", 
            "-", 
            "-"), 
            stdin=subprocess.PIPE, 
            stdout=subprocess.PIPE) 
    wkdata = wkhtml2pdf.communicate(html.encode('utf8')) 
    pdf = wkdata[0]; 

    response = HttpResponse(mimetype='application/pdf') 
    response['Content-Disposition'] = 'attachment; filename=printfile.pdf' 
    response.write(pdf) 
    return response 

和看法:

@login_required 
def print_to_pdf(request): 
    data = dict() 
    return get_pdf('print.html', { 'data': data }) 

在settings.py中必须设置WKHTML2PDF_COMMAND变量(程序名带路径)。

wkhtml是在这里:http://code.google.com/p/wkhtmltopdf/downloads/list

相关问题