<p>尝试下面这样的方法。虽然它通过响应向最终用户呈现服务文件,但将其修改为在服务器上写入文件对您来说应该很容易:</p>
<p>功能视图:</p>
<pre><code>def pdf_sticker(request, pk):
spot = get_object_or_404(Spot, pk=pk)
if spot.is_certificated:
pdf, result = render_to_pdf(
'www/pdf_sticker.html',
{
'pass_smth': 'needed_in_render',
'MEDIA_ROOT': settings.MEDIA_ROOT,
'STATIC_ROOT': settings.STATICFILES_DIRS[0],
'pagesize': 'A6',
}
)
if not pdf.err:
return HttpResponse(result.getvalue(), content_type='application/pdf')
return HttpResponse('We had some errors')
else:
raise Http404
</code></pre>
<p>helper方法:</p>
^{pr2}$
<p>模板:</p>
<pre><code><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Sticker for certificated spot</title>
<style type="text/css">
@font-face {
font-family: "Lobster";
src: url("{{ STATIC_ROOT }}/font/Lobster-32.ttf");
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: "Lato";
src: url("{{ STATIC_ROOT }}/font/Lato-Hairline.ttf");
font-weight: 100;
font-style: thin;
}
@font-face {
font-family: "Nobile";
src: url("{{ STATIC_ROOT }}/font/Nobile-34.ttf");
font-weight: normal;
font-style: normal;
}
@page {
size: {{ pagesize }};
margin: 0.5cm;
}
</style>
</head>
<body>
<center>
<img src="{{ STATIC_ROOT }}/{{ SPOT_PROJECT_NAME }}/certificate.png" height="260px">
<p style="font-family:Lobster;">
<span style="font-size:60px;">
{% settings_value "SPOT_PROJECT_SUBJECT" %}<br>
</span>
<span style=" font-size:32px;">
friendly spot!
</span>
<br>
<table>
<tr>
<td colspan=2>
<img src="http://{{BASE_HOST}}{% url 'www:qrencode_link' pk=spot.pk size=4 %}">
</td>
</tr>
<tr>
<td colspan=2 height=5></td>
</tr>
<tr>
<td colspan=2>
<span style="font-family:Nobile; font-size:15px;">
Powered by: <img src="{{ STATIC_ROOT }}/{{ SPOT_PROJECT_NAME }}/logo.png" height="50px"> </span>
<span style="font-family:Lobster; font-size:25px;">
{{ SPOT_PROJECT_NAME }}
</span>
</td>
</tr>
</table>
</p>
</center>
</body>
</html>
</code></pre>
<p>为Python3.6、Django 2.0工作。在</p>
<p>库版本:</p>
<pre><code>Django==2.0.2
xhtml2pdf==0.2b1
</code></pre>
<h2>关于将其写入服务器上的本地文件的部分,这可能有助于:</h2>
<p><a href="http://xhtml2pdf.readthedocs.io/en/latest/usage.html#using-with-python-standalone" rel="nofollow noreferrer">http://xhtml2pdf.readthedocs.io/en/latest/usage.html#using-with-python-standalone</a></p>