无法加载图片/文件 Pisa PDF Django Python

0 投票
5 回答
7452 浏览
提问于 2025-04-17 10:49

之前我遇到一个问题,就是即使我指定了使用UTF-8字体,中文字符还是无法显示。结果我发现我连图片也无法显示……看起来我无法把任何文件嵌入到我的PDF里。

这是我使用的代码:

def render_to_pdf(template_src, context_dict):
    """Function to render html template into a pdf file"""
    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")),
                                            dest=result,
                                            encoding='UTF-8',
                                            link_callback=fetch_resources)
    if not pdf.err:
        response = http.HttpResponse(result.getvalue(), mimetype='application/pdf')

        return response

    return HttpResponse('We had some errors<pre>%s</pre>' % escape(html))

def fetch_resources(uri, rel):
    import os.path
    from django.conf import settings
    path = os.path.join(
            settings.STATIC_ROOT,
            uri.replace(settings.STATIC_URL, ""))
    return path

html

<img src="/static/images/bc_logo_bw_pdf.png" />

还有

    @font-face {
        font-family: "Wingdings";
        src: url("/static/fonts/wingdings.ttf");
    }

我查看了其他人在StackOverflow上的问题,但没有找到帮助。两个函数里也没有出现异常。而且在fetch_resources函数中,返回的路径是正确的,像是/home/<user>/project/static/images/bc_logo_bw_pdf.png/home/<user>/project/static/fonts/wingdings.ttf,我真不知道问题出在哪里。

更新

每次我创建PDF时,控制台都会显示这个信息:

No handlers could be found for logger "ho.pisa"

这可能有关系吗?

更新 #2

现在字体可以用了,我犯了个低级错误……我用的字体没有包含中文的unicode。不过我还是无法把任何图片嵌入到PDF里,无论是jpeg、gif还是png格式。

5 个回答

0

一切看起来都更好。试试用JPG格式的图片文件。在我的情况下,PNG格式的文件也不行。

<img src="/static/images/<name>.jpg" />
0

对我来说(使用的是django 1.4,python 2.7,pisa==3.0.33),如果我使用图片的完整路径而不是相对路径,它就能正常工作。你也试试这样做。

3

我终于解决了我遇到的问题……原来如果我用CSS设置了body的高度,图片就无法正常加载……一旦我把那行代码去掉,图片就加载得很好了……

撰写回答