Django中HTML内容转换PDF解决方案

Posted 魔库技术网

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django中HTML内容转换PDF解决方案相关的知识,希望对你有一定的参考价值。

点击蓝字

点击
Django中HTML内容转换PDF解决方案


普通脚本执行方式

在通常情况下将html或者字符串内容转换成PDF,采用Python脚本直接运行可以转换生成。

运行环境

pip install pdfkit==0.6.1

python = Python 3.6.3

脚本内容如下

# -*- coding: utf-8 -*-

import pdfkit

def report_to_pdf():

    report ="""<!DOCTYPE html>

                <html><body><div>

                <h1>xxxxx</h1>

                <h5>2018/01/26</h5>

                <div><h2>概况</h2><div>

                <table class="table table-striped table-bordered">

                <thead>

                <tr>

                <th>名称</th>

                <th>xx时间</th>

                <th>xx时间</th>

                <th>本月xx</th>

                <th>本年xx</th>

                <th>xxx</th>

                </tr>

                </thead>

                <tbody>

                <tr>

                <td>xx系统</td>

                <td>0s</td>

                <td>30d</td>

                <td>100.000%</td>

                <td>99.374%</td>

                <td>100.000%</td>

                </tr>

                </tbody></table>

                </div></div></div></body></html>"""

    pdfkit.from_string(report,'./report.pdf')

def report_to_pdf()   #函数调用

以上代码直接可以生成相应的PDF文件

Django中url接口调用方式

但是当使用Django POST方式传递参数给view.py,然后view模块中调用模块进行html字符串数据生成PDF文件时出现意想不到的事情:以下是解决方案。

环境要求:

#sudo apt-get install xvfb

#sudo apt-get install wkhtmltopdf

#pip install pdfkit==0.6.1

view模块调用代码如下:

# -*- coding: utf-8 -*-


import pdfkit

def report_to_pdf():

html="""<html><head></head></html>"""

path="文件生成存放路径"

try:

    status=HeadlessPdfKit(html,'string').to_pdf(path)

status_code = 0

return status_code

except Exception as e:

print(e)

return 500


相关错误解决方法:

报错1:前提安装sudo apt-get install xvfb

Django中HTML内容转换PDF解决方案

报错2:无法显示输出

wkhtmltopdf exited with non-zero code -6. error:

QXcbConnection: Could not connect to display

#此方法解决模拟显示问题

class HeadlessPdfKit(pdfkit.PDFKit):

def command(self, path=None):

return ['xvfb-run', '--'] + super().command(path)

Ps:以上两种方式通过实践依据,都可行,具体根据开发人员的选择来定。


魔库在线

以上是关于Django中HTML内容转换PDF解决方案的主要内容,如果未能解决你的问题,请参考以下文章

如何将 HTML 页面转换为 PDF 然后下载?

python Django 跨域解决方案

接受或删除 Cookie 关于使用 PyQt5 QtWebEngineWidgets 将 HTML 转换为 PDF 的通知

如何将 R Markdown 转换为 PDF?

Django/Python:使用正确的语言生成 pdf

ITextSharp HTML到PDF?