专栏首页伪君子的梦呓用 Python 把网页转换成 PDF

用 Python 把网页转换成 PDF

前言

前段时间有个需求是要把本地的 html 转换成 pdf,一个两个还好说,上千上万的话,只能写代码解决问题。

试了几个,发现 python 实现起来也挺简单的,那就去掉复杂的逻辑,简单说一下怎么实现。

1 安装

1.1 安装 wkhtmltopdf

https://wkhtmltopdf.org/downloads.html

下载 wkhtmltopdf

圈起来的那两个,上面写着 Installer 的是安装包,直接安装就行;下面写着 7z archive 的是压缩包,如果没记错的话,需要下载 7-Zip 才能解压使用。

https://www.7-zip.org/

如果需要,可以把 wkhtmltopdf 加到系统变量 Path 中;如果不需要,把路径记住就好。

1.2 安装 pdfkit

先说一下环境,Win10 系统下 Python3,编译器是 PyCharm 。

pdfkit 可以直接用 pip install pdfkit 安装,要是不知道该怎么安装,那还是用 PyCharm 安装吧。

PyCharm 安装第三方库

PyCharm 安装第三方库

2 代码

代码挺少的,为了能解释清楚,所以是按顺序分开来,用的时候按顺序复制就好。

先导入要用的库 pdfkit,这里加上 time 只是为了计时。

import time
import pdfkit

下面这个 wk_path 是 wkhtmltopdf 的路径,config 是配置。

#  wkhtmltopdf 的路径
wk_path = r'E:\Program Files\wkhtmltox\bin\wkhtmltopdf.exe'
config = pdfkit.configuration(wkhtmltopdf=wk_path)

url 是需要把 html 转换成 pdf 的那个网页;name 是文件名,文件名这里一定要有后缀名 .pdf,不然得自己手动添加后缀名。

pdfkit.from_url(url, name, configuration=config)就是开始把 html 转换成 pdf 。

time1 和 time2 是我用来计时的,跑完代码之后会输出用时。

url = "https://lbjheiheihei.xyz/2019/05/07/Spoof-QRcode.html"
name = "lbj.pdf"
time1 = time.time()
pdfkit.from_url(url, name, configuration=config)
time2 = time.time()
print(str(time2 - time1)+" s")

代码截图 + 运行结果

我用这个把一个博客的部分文章导成了 PDF,结果如下,用 SumatraPDF 查看能看到目录。

PDF PDF和网页对比如下图,左边是 PDF,右边是 网页。(网页背景颜色原来是白色的,我的浏览器会自动把背景颜色进行替换)

PDF和网页对比

3 相关说明

这样把 html 转换成的 pdf 肯定和网页原来的样子是有差别的,但是把本地的 html 转换成 pdf 还是挺合适我心意的,毕竟解决了我的问题。

如果想把多个 PDF 合并成一个的话,可以使用 PyPDF2,挺好用的。

题图:Photo by Jesse Schoff on Unsplash

本文分享自微信公众号 - 伪君子的梦呓(beiyue_lbj),作者:weijunzi

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-05-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 安装 VMware workstation

    VMware Workstation 是 VMware 公司推出的一款桌面虚拟计算软件,具有 Windows、Linux 版本。VMware Worksta...

    伪君子
  • 安装和激活 VMware workstation

    伪君子
  • 用 WebScrapy 爬取即刻关注/被关注列表

    在即刻看见即友说用 WebScrapy 爬取了关注列表和被关注列表,感觉很爽,我评论了一句我觉得我可以写一个教程,然后就有人问我怎么搞了。骚话不说,教程来了。

    伪君子
  • CEP 概念

    5.5.1 CEP是什么 CEP是流式处理的核心技术。 不管是单独的应用系统,还是数据仓库,都是先将数据存储到数据库/数据仓库,然后再处理或查询。而CEP与常...

    大数据和云计算技术
  • python中的asyncore

    在Python中,既可直接使用socket类,也可使用socketserver,asyncore等经过封装的类来进行编码。asyncore这个库中主要包含了两个...

    py3study
  • wordpress插件在服务器上的存储位置

    其服务器端存储位置:/var/www/html/wp-content/plugins/akismet:

    Jerry Wang
  • winform中利用正则表达式得到有效的电话/手机号

    private void btnTest_Click(object sender, EventArgs e)         {             ...

    菩提树下的杨过
  • python import 与 from

    模块其实就一些函数和类的集合文件,它能实现一些相应的功能,当我们需要使用这些功能的时候,

    py3study
  • 如何使用代码获得一个function module的Where Used List

    如果要获得一个function module的Where Used List,我们通常用的办法是使用ABAP workbench里提供的功能。

    Jerry Wang
  • Linux上安装NTP SERVER实现时间校正

    配置时间源 vi /etc/ntp.conf server 210.72.145.44 server ntp.api.bz server 2.cento...

    菲宇

扫码关注云+社区

领取腾讯云代金券