Django xhtml2pdf 'HttpResponse' 没有缓冲接口
Django xhtml2pdf 'HttpResponse' does not have the buffer interface
我正在尝试进行一些测试以使用 Django 输出 pdf。我正在使用随 pip 安装的 xhtml2pdf 项目。
我查看了一个向浏览器发送 pdf 的示例并成功了,但是当尝试使用我的模板时,出现错误。上面写着:
'HttpResponse' does not have the buffer interface
下一个是我的查看代码:
def generate_pdf(request):
from xhtml2pdf import pisa
from person.views import alumn_list
html = alumn_list(request, 12, 0) # This function returns a render('alumn_list.html)
pdfFile = open(os.path.join(base.TEMPLATE_DIRS[0], 'test.pdf'), 'w+b')
pisaStatus = pisa.CreatePDF(html, dest=pdfFile) # The errors happens here
pdfFile.seek(0)
pdf = pdfFile.read()
pdfFile.close()
return HttpResponse(pdf, content_type='application/pdf')
下一个是我的模板:
{% extends "alumns.html" %}
{% load i18n %}
{% block extra_css %}
<style>
@page {
size: letter portrait;
@frame header_frame { /* Static frame */
-pdf-frame-content: header_content;
left: 50pt; width: 512pt; top: 50pt; height: 40pt;
}
@frame col1_frame { /* Content frame 1 */
left: 44pt; width: 445pt; top: 90pt; height: 632pt;
text-align:center;
}
@frame footer_frame { /* Static frame */
-pdf-frame-content: footer_content;
left: 50pt; width: 512pt; top: 772pt; height: 20pt;
}
}
</style>
{% endblock extra_css %}
{% block title %}
{% trans "Alumn list" %}
{% endblock title %}
{% block page_title %}
{% trans "Alumn list" %}
{% endblock page_title %}
{% block content %}
<table class="infoTable">
{% csrf_token %}
{% for index in "12" %}
<caption {% ifequal index "2" %}align="bottom"{% endifequal%}>
<a href="{{hrefs.0}}" class="pager"><< {% trans "Previous" %}</a>
<a href="{{hrefs.1}}" class="pager">{% trans "Next" %} >></a>
</caption>
{% endfor %}
<thead>
<th>{% trans "ID" %}</th>
<th>{% trans "Name" %}</th>
</thead>
{% for alumn in alumnList %}
<tr id="alumn{{alumn.alumnId}}">
<td>{{ alumn.alumnId }}</td>
<td><button class="profileAlumn" alumn_id="{{alumn.alumnId}}">{% trans "Profile" %}</button></td>
<td><button class="deleteAlumn" alumn_id="{{alumn.alumnId}}">{% trans "Delete" %}</button></td>
</tr>
{% endfor %}
</table>
{% endblock content %}
我不知道如何修复这个错误。我用谷歌搜索了这个错误,但只出现了三页含糊不清的结果,none 引用了 HttpResponse。
请帮忙。我不知道我做错了什么。
如果有人有一些 link 我可以从我的网络应用程序中学习如何从每个呈现的 HTML 模板制作 pdf,这也会对我有帮助。
非常感谢提前
alumn_list
是一种观点。所以它 returns 一个 HttpResponse
对象。但是你需要将一个字节字符串传递给 pisa.CreatePDF
这是响应的内容。所以您可以执行以下操作:
pisaStatus = pisa.CreatePDF(html.content, dest=pdfFile)
我正在尝试进行一些测试以使用 Django 输出 pdf。我正在使用随 pip 安装的 xhtml2pdf 项目。
我查看了一个向浏览器发送 pdf 的示例并成功了,但是当尝试使用我的模板时,出现错误。上面写着:
'HttpResponse' does not have the buffer interface
下一个是我的查看代码:
def generate_pdf(request):
from xhtml2pdf import pisa
from person.views import alumn_list
html = alumn_list(request, 12, 0) # This function returns a render('alumn_list.html)
pdfFile = open(os.path.join(base.TEMPLATE_DIRS[0], 'test.pdf'), 'w+b')
pisaStatus = pisa.CreatePDF(html, dest=pdfFile) # The errors happens here
pdfFile.seek(0)
pdf = pdfFile.read()
pdfFile.close()
return HttpResponse(pdf, content_type='application/pdf')
下一个是我的模板:
{% extends "alumns.html" %}
{% load i18n %}
{% block extra_css %}
<style>
@page {
size: letter portrait;
@frame header_frame { /* Static frame */
-pdf-frame-content: header_content;
left: 50pt; width: 512pt; top: 50pt; height: 40pt;
}
@frame col1_frame { /* Content frame 1 */
left: 44pt; width: 445pt; top: 90pt; height: 632pt;
text-align:center;
}
@frame footer_frame { /* Static frame */
-pdf-frame-content: footer_content;
left: 50pt; width: 512pt; top: 772pt; height: 20pt;
}
}
</style>
{% endblock extra_css %}
{% block title %}
{% trans "Alumn list" %}
{% endblock title %}
{% block page_title %}
{% trans "Alumn list" %}
{% endblock page_title %}
{% block content %}
<table class="infoTable">
{% csrf_token %}
{% for index in "12" %}
<caption {% ifequal index "2" %}align="bottom"{% endifequal%}>
<a href="{{hrefs.0}}" class="pager"><< {% trans "Previous" %}</a>
<a href="{{hrefs.1}}" class="pager">{% trans "Next" %} >></a>
</caption>
{% endfor %}
<thead>
<th>{% trans "ID" %}</th>
<th>{% trans "Name" %}</th>
</thead>
{% for alumn in alumnList %}
<tr id="alumn{{alumn.alumnId}}">
<td>{{ alumn.alumnId }}</td>
<td><button class="profileAlumn" alumn_id="{{alumn.alumnId}}">{% trans "Profile" %}</button></td>
<td><button class="deleteAlumn" alumn_id="{{alumn.alumnId}}">{% trans "Delete" %}</button></td>
</tr>
{% endfor %}
</table>
{% endblock content %}
我不知道如何修复这个错误。我用谷歌搜索了这个错误,但只出现了三页含糊不清的结果,none 引用了 HttpResponse。
请帮忙。我不知道我做错了什么。
如果有人有一些 link 我可以从我的网络应用程序中学习如何从每个呈现的 HTML 模板制作 pdf,这也会对我有帮助。
非常感谢提前
alumn_list
是一种观点。所以它 returns 一个 HttpResponse
对象。但是你需要将一个字节字符串传递给 pisa.CreatePDF
这是响应的内容。所以您可以执行以下操作:
pisaStatus = pisa.CreatePDF(html.content, dest=pdfFile)