安装django-easy-pdf:
pip install django-easy-pdf
django-easy-pdf依赖:
django>=1.10
xhtml2pdf>=0.2b1
reportlab
我当时在windows安装reportlab时直接pip没有成功,可以使用一下命令指定安装源进行安装
pip install reportlab -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
在settings中注册应用
正式开始:
1.先准备一个HTML模板,该模板继承easy_pdf/base.html
{% extends "easy_pdf/base.html" %}
{% block extra_style %}
<style type="text/css">
body {
font-family: "Helvetica", "sans-serif";
color: #333333;
}
style>
{% endblock %}
{% block content %}
<div id="content">
<div class="main">
<h1>Hi there!h1>
<h5>{
{other}}h5>
<img src="file:///STATIC_ROOT/img/hello.png" />
div>
div>
{% endblock %}
2.接下来创建视图:
from django.conf import settings
from easy_pdf.views import PDFTemplateView
class HelloPDFView(PDFTemplateView):
template_name = 'hello.html' # html模板
base_url = 'file://' + settings.STATIC_ROOT
download_filename = 'hello.pdf' # 下载pdf时的文件名
def get_context_data(self, **kwargs):
data = self.request.GET # 可以获取请求参数
return super(HelloPDFView, self).get_context_data(
pagesize='A4',
title='Hi there!', # 转成pdf后文件上方的标题
other='other', # 也可以按需求增加自己需要的值,然后通过django的模板语言渲染到页面上
**kwargs
)
3.注册路由:
from django.urls import path
from . import views
urlpatterns = [
path('pdf/', views.PDFContract.as_view(), name='pdf'),
]
完成!
细心的小伙伴又发现什么问题吗?
对!中文字体不能正常显示。。。怎么办呢?其实很简单,看下来
在get_context_data函数中添加一个注册字体的操作
def get_context_data(self, **kwargs):
data = self.request.GET # 可以获取请求参数
# 注册字体,这一步操作之前,你首先要去下载msyh.ttf字体,然后放到具体某个目录下,比如我放在项目文件夹下的/front/dist/css/font/文件夹中
pdfmetrics.registerFont(TTFont('yh', '%s/front/dist/css/font/msyh.ttf' % settings.BASE_DIR))
DEFAULT_FONT['helvetica'] = 'yh'
return super(HelloPDFView, self).get_context_data(
pagesize='A4',
title='Hi there!', # 转成pdf后文件上方的标题
other='other', # 也可以按需求增加自己需要的值,然后通过django的模板语言渲染到页面上
**kwargs
)
大功告成!
展示一下我自己实现的效果:
存在问题:
文字不能自动换行,查找原因应该是xhtml2pdf不是支持所有CSS样式,这里放一下支持的CSS样式(该截图是网友的博客看到的,地址忘记保存了,只存了一个截图,截图内容原作者看到的话请联系我注明出处)
参考:
https://blog.csdn.net/qq_17776977/article/details/83580814
https://django-easy-pdf.readthedocs.io/en/develop/usage.html