这段时间在做一个图片PDF的项目, 需要把网页转换成PDF, 找到了python的xhtml2pdf这个库, 个方面都满意,只是对中文的支持不好, html上的中文转换成PDF后都成了乱码, 貌似中文网站都没有找到合适的解决办法, 只能求助于万能的google, 果然不负我望, 废话不多说, 上代码:
django代码
class GeneratePdf(View):
def get(self, request, *args, **kwargs):
# Prepare context
data = {'today': datetime.date.today()}
template = get_template('pdf.html')
html = template.render(Context(data))
io = StringIO.StringIO()
pisa.CreatePDF(html, dest=io, link_callback=link_callback)
io.seek(0)
pdf = io.read()
io.close() # Don't forget to close the file handle
return HttpResponse(pdf, content_type='application/pdf')
django template代码
{% load staticfiles %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>猫</title>
<link href="{% static "css/pdf.css" %}" rel="stylesheet">
</head>
<style>
@font-face {
font-family: STSong;
src: url('{% static 'fonts/STSong.TTF' %}');
}
h3 {
font-family: STSong;
}
.image .image-text {
float: left;
width: 50%;
margin: 30px;
}
.imageFrame{
margin: 20px;
}
</style>
<body>
<h3>日期: {{ today }}</h3>
<hr/>
<div class="imageContent" >
<div style="float: left; width: 100%; text-align: center">
<img src="{% static "img/cat_3.jpg" %}" width="300" height="200">
<img src="{% static "img/cat.jpg" %}" width="300" height="200">
</div>
<div style="float: left; width: 100%; text-align: center">
<img src="{% static "img/cat.jpg" %}" width="300" height="200">
<img src="{% static "img/cat_3.jpg" %}" width="300" height="200">
</div>
<div style="float: left; width: 100%; text-align: center">
<img src="{% static "img/cat_3.jpg" %}" width="300" height="200">
<img src="{% static "img/cat.jpg" %}" width="300" height="200">
</div>
</div>
</body>
</html>
@font-face {
font-family: STSong;
src: url('{% static 'fonts/STSong.TTF' %}');
}
h3 {
font-family: STSong;
}
补充一下:
这段样式代码放到单独的css文件中好像不好使, 直接嵌在模板文件中就可以, 这个一直忙没时间去研究, 后面有时间看看