如题,我需要使用python 将 网页 转成PDF文件,这里会用到wkhtmltopdf
我这里使用的是centos服务器。(使用ubuntu事会少很多,别问我为什么不用,我的web项目使用的是PHP,相对来说,centos部署web项目要比ubuntu要好)
Python需要用到扩展 pdfkit
一:安装pdfkit
复制代码
pip install pdfkit
在python代码中执行:
arduino
复制代码
import pdfkit pdfkit.from_url('https://www.baidu.com/')
报错:
arduino
复制代码
OSError at /outHtmlToPdf No wkhtmltopdf executable found: "b''" If this file exists please check that this process can read it or you can pass path to it manually in method call, check README. Otherwise please install wkhtmltopdf -
进入下一步->
二:安装 wkhtmltopdf
Centos命令:
复制代码
yum install wkhtmltopdf
ubuntu命令:
复制代码
在python代码中执行:
arduino
复制代码
import pdfkit pdfkit.from_url('https://www.baidu.com/')
报错:
vbnet
复制代码
wkhtmltopdf: cannot connect to X server You will need to run wkhtmltopdf within a "virtual" X server. Go to the link below for more information https://github.com/JazzCore/python-pdfkit/wiki/Using-wkhtmltopdf-without-X-server
进入下一步->
三:安装 xvfb
Centos 命令:
vbscript
复制代码
yum install xorg-x11-server-Xvfb
ubuntu 命令:
arduino
复制代码
apt-get install xvfb
四:配置服务器访问(centos/ubuntu)
在 /usr/bin/ 目录下生成脚本 wkhtmltopdf.sh 并写入命令
Centos:
bash
复制代码
sudo vim /usr/bin/wkhtmltopdf.sh
文件输入:
ini
复制代码
#! /usr/bin/bash xvfb-run -a --server-args="-screen 0, 1024x768x24" /usr/bin/wkhtmltopdf -q $*
Ubuntu:
bash
复制代码
sudo vim /usr/bin/wkhtmltopdf.sh
文件输入:
javascript
复制代码
#! /usr/bin/bash echo -e '#!/bin/bash\nxvfb-run -a --server-args="-screen 0, 1024x768x24" /usr/bin/wkhtmltopdf -q $*' > /usr/bin/wkhtmltopdf.sh
文件输入的内容,一定要严格按照我这里的输入,否则可能会出现下边我出现的bug。
五:更改文件权限并创建软连接(快捷方式)
bash
复制代码
chmod a+x /usr/bin/wkhtmltopdf.sh ln -s /usr/bin/wkhtmltopdf.sh /usr/local/bin/wkhtmltopdf
六:测试一下:
在Linux终端中输入:
arduino
复制代码
wkhtmltopdf http://www.baidu.com a.pdf
生成成功,即代表wkhtmltopdf 安装成功。
原以为到此就结束了,但是我还是太年轻。
当我执行完上边的所有步骤之后,执行代码:
arduino
复制代码
import pdfkit pdfkit.from_url('https://www.baidu.com/')
报错:
lua
复制代码
OSError at /outHtmlToPdf [Errno 8] Exec format error: '/usr/local/bin/wkhtmltopdf'
这里我要事先说明一下:/usr/local/bin/wkhtmltopdf这个软连接文件中,我里边写的内容是:
css
复制代码
xvfb-run -a --server-args="-screen 0, 1024x768x24" /usr/bin/wkhtmltopdf -q $*
然后,经过第六部的测试之后没有问题。我就认为没有问题。
但是上边的报错明确告诉我,有问题的是/usr/local/bin/wkhtmltopdf这个文件。
为什么会报这个错呢?我百思不得其解。
百度了一下:一般报[Errno 8] Exec format error:这个错误的,都是因为在文件开头没有添加:
javascript
复制代码
#! /usr/bin/env python3
的原因。
但是 /usr/local/bin/wkhtmltopdf这个文件 这个文件并不是 python 文件啊。
寻根溯源一下:
/usr/local/bin/wkhtmltopdf文件是/usr/bin/wkhtmltopdf.sh的软连接文件,一般在写.sh执行文件的时候,都会在文件开头添加一句:
javascript
复制代码
#! /usr/bin/bash
我就在 /usr/local/bin/wkhtmltopdf 文件开头添加了上边的语句:现在文件内容如下:
ini
复制代码
#! /usr/bin/bash xvfb-run -a --server-args="-screen 0, 1024x768x24" /usr/bin/wkhtmltopdf -q $*
然后在执行代码:
arduino
复制代码
import pdfkit pdfkit.from_url('https://www.baidu.com/')
然后,竟然好用了……
这玩意是真的坑……
八:中文乱码问题
解决中文乱码问题
复制代码
yum groupinstall Fonts -y
以上大概就是 我在django框架中 使用 wkhtmltopdf的基本情况。
有好的建议,请在下方输入你的评论。