2

私はテンプレートを持っています:

<!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で試しました。どうやってするの?

4

3 に答える 3

1

wkhtmltopdfを使用してHtmlからpdfファイルを生成でき、Unicode文字をサポートします

于 2012-09-17T12:50:45.603 に答える
0

解決策の 1 つは、 code2000フォントを使用することです。

これは、すべての Unicode 文字で機能します。

于 2015-10-29T19:20:52.567 に答える
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

于 2012-09-17T13:53:47.607 に答える