擅长:python、mysql、java
<p>以下解决方案在HTTP请求期间,在HTTP响应提供给浏览器之前,保存web页面的pdf版本。在</p>
<p>我使用<a href="http://weasyprint.readthedocs.io/en/latest/index.html" rel="nofollow noreferrer">weasyprint</a>是因为它能够处理开箱即用的unicode字符。在</p>
<p><strong>视图.py</strong></p>
<pre><code>from weasyprint import HTML
class PdfView(DetailView):
model = TheModel
template_name = 'pdf.html'
def get(self, request, *args, **kwargs):
template_response = super().get(self, request, *args, **kwargs)
HTML(string=template_response.rendered_content).write_pdf(
'/path/to/test.pdf',
stylesheets=['/path/to/pdf.css']
)
return template_response
</code></pre>
<p>在视图之外,一个更好的解决方案是使用<a href="http://docs.python-requests.org/en/master/" rel="nofollow noreferrer">requests</a>获取HTML页面,然后创建pdf文件。这样做更好,因为服务器不必等待创建pdf,这可能会阻止其他等待服务器的请求:</p>
^{pr2}$