django-easy-pdf实现html转PDF

准备工作:

安装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中注册应用
django-easy-pdf实现html转PDF_第1张图片

正式开始:
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  
        )

大功告成!
展示一下我自己实现的效果:
django-easy-pdf实现html转PDF_第2张图片
存在问题:
文字不能自动换行,查找原因应该是xhtml2pdf不是支持所有CSS样式,这里放一下支持的CSS样式(该截图是网友的博客看到的,地址忘记保存了,只存了一个截图,截图内容原作者看到的话请联系我注明出处
django-easy-pdf实现html转PDF_第3张图片
参考:
https://blog.csdn.net/qq_17776977/article/details/83580814
https://django-easy-pdf.readthedocs.io/en/develop/usage.html

你可能感兴趣的:(django,django-easy-pdf,html转pdf,django生成pdf)