Django pdf 问题与比萨

Posted

技术标签:

【中文标题】Django pdf 问题与比萨【英文标题】:Django pdf question with pisa 【发布时间】:2011-01-13 09:58:06 【问题描述】:

我想使用 pisa 为 pdf 文件生成一个 html 模板。我相信我拥有我需要的所有软件包,但我似乎在这样做时遇到了问题。这是我的看法 远我所做的。

编辑:这是我最新的网址、视图和模板。

url.py

(r'^index/render_pdf/(?P<id>\d+)/$', render_pdf),

views.py

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

def render_pdf (html, id):
    invoice_items_list = Invoice_Items.objects.filter(pk=id)
    result = StringIO.StringIO()
    pdf = pisa.pisaDocument(StringIO.StringIO(html.encode("ISO-8859-1")), dest=result, link_callback=fetch_resources)
    return result

在模板中,我有这个标签。

<a href="% url c2duo.views.render_pdf invoices.pk %">

【问题讨论】:

接下来,您将获得完整的错误回溯或您遇到的行为并将其添加到问题中,这样每个人都可以看到您以这种方式尝试时会发生什么。 render_to_pdf(template_src, context_dict) 中没有 return。您能否包含更多您实际使用的实际代码? 【参考方案1】:

我不知道这有多大帮助,但这是我用来渲染 pdf 的函数:

def fetch_resources(uri, rel):
 """
 Callback to allow pisa/reportlab to retrieve Images,Stylesheets, etc.
 `uri` is the href attribute from the html link element.
 `rel` gives a relative path, but it's not used here.

 """
 path = os.path.join(settings.MEDIA_ROOT, uri.replace(settings.MEDIA_URL, ""))
 return path

def render_pdf (html):
 result = StringIO.StringIO()
 pdf = pisa.pisaDocument(StringIO.StringIO(html.encode("ISO-8859-1")), dest=result, link_callback=fetch_resources)
 return result

【讨论】:

我得到一个错误:WSGIRequest'对象没有属性'encode' 你不将请求对象传递给函数,你传递渲染的模板。 请查看我目前的代码,看看是否需要通过编辑进行任何更改。【参考方案2】:

只是为了好玩,试试这个:

def render_to_pdf(template_src, context_dict):
    html  = "<html><head><title>Title</title></head><body><h1>Hello</h1></body></html>"
    result = StringIO.StringIO()
    pdf = pisa.pisaDocument(StringIO.StringIO(html), result)
    if not pdf.err:
        return http.HttpResponse("" % (repr(result.getvalue())))
    else:
        raise Exception("The error was %s" % pdf.err)

如果您仍然遇到错误,我猜错误可能在比萨。你确定它是最新的吗?

【讨论】:

重申,我在最后一行“except Exception('PDF error')”上得到一个无效的语法错误——所以不知道为什么。此外,还有另一个语法错误在线有一个语法错误,它说什么 pdf = ... 有一个不应该存在的额外右括号。 对不起,这是我从陌生人的代码中剪切和粘贴的结果。现在应该修好了。

以上是关于Django pdf 问题与比萨的主要内容,如果未能解决你的问题,请参考以下文章

django查询优化——啥时候用sql,啥时候用python

Django ORM:未继承子级的字段和值。对象重复。 (使用Django管理界面)

如何从 django 模板访问多对多“通过”表的属性?

将 django 模板更改为具有 bootstrap 或 css 或两者的 PDF 的方法

django输出pdf

Django/Python:使用正确的语言生成 pdf