python制作pdf电子书

准备

制作电子书使用的是pythonpdfkit这个库,pdfkitwkhtmltopdfPython封装包,因此在安装这个之前要安装wkhtmltopdf

安装wkhtmltopdf

  • sudo apt-get install wkhtmltopdf (ubantu下,不过这里安装的时候可能对应的版本不同,会出现错误,如果不行的话还请自己百度下,我安装的时候是可以的)
  • windows下的用户直接到wkhtmltopdf官网下载稳定版本,然后直接安装即可,但是安装之后需要注意的是一定要将其添加到环境变量中,否则会出现找不到路径的问题

python安装依赖包

以下都是我们需要用到的库

  • pip install requests
  • pip install BeautifulSoup4
  • pip install pdfkit

pdfkit的用法

初级了解函数

  • pdfkit.from_url([url,],'demo.pdf') 这个是直接传入一个url或者一个url列表,然后通过这个函数直接将其网页转换成demo.pdf,注意这里只能转换静态文本,如果使用js一些脚本的话是不能直接转换的
  • pdfkit.from_string("<h1><a href="https://chenjiabing666.gituhb.io">陈加兵的博客</a></h1>",'demo.pdf') 这个是直接讲一个字符串转换成pdf格式的电子书,里面可以直接传一个字符串,也可以用html标签包裹这个字符串
  • pdfkit.from_file([file_name,],'demo.pdf') 这个是直接传入一个文件或者一个列表即是多个文件,不过这里传入的文件一般都是html格式的文件

进阶

当然知道这个是多么枯燥,生成的电子书书也不能添加各种的样式,下面我们将会介绍一些添加的样式的方法

options

这个参数是上面函数的可选参数,其中制定了一些选项,详情请见http://wkhtmltopdf.org/usage/wkhtmltopdf.txt, 你可以移除选项名字前面的 '--' .如果选项没有值, 使用None, Falseor ,* 作为字典值,例子如下:

    options = {
'page-size': 'Letter',
'margin-top': '0.75in',
'margin-right': '0.75in',
'margin-bottom': '0.75in',
'margin-left': '0.75in',
'encoding': "UTF-8",
'custom-header': [
('Accept-Encoding', 'gzip')
],
'cookie': [
('cookie-name1', 'cookie-value1'),
('cookie-name2', 'cookie-value2'),
],
'outline-depth': 10,
}

cover

这个参数是用来制作封面的,也是函数中的一个参数,如果想要实现的话可以先写一个html文本,在其中嵌入几张图片或者文字作为封面,然后写入出传入函数即可

options = {
'page-size': 'Letter',
'margin-top': '0.75in',
'margin-right': '0.75in',
'margin-bottom': '0.75in',
'margin-left': '0.75in',
'encoding': "UTF-8",
'custom-header': [
('Accept-Encoding', 'gzip')
],
'cookie': [
('cookie-name1', 'cookie-value1'),
('cookie-name2', 'cookie-value2'),
],
'outline-depth': 10,
}
cover='demo.html'
pdfkit.from_file('demo.html','demo.pdf',cover=cover,options=options)

css

这里的css也是函数中的一个可选参数,这个参数主要的作用作用就是在其中定义自己喜欢的样式,当然这里也可以传入一个列表,定义多个样式css文件,当然没有这个参数也可以实现定义自己的样式,只需要在自己的html模板中定义内嵌的样式,或者直接用<link>引用外面的样式即可,本人亲试是可以的,具体的使用如下

css='demo.css'
pdfkit.from_file('demo.html','demo.pdf',options=options,cover=cover,css=css)

注意

  • 这里生成pdf的时候可能出现中文的乱码,请一定在html模板开头指定字体utf-8-> <meta charset="UTF-8">
  • 可能在爬取生成的时候会出现ascii错误,只需要在py文件开头写下:
import sys
import threading
reload(sys)
sys.setdefaultencoding('utf8')
  • 写入文件的时候不想python3一样可以指定编码格式,这里我使用的是codecs库,可以向python3一样指定其中的编码格式

实战

本人爬了廖雪峰老师的python2.7的教程,并且做成了电子书,截图如下

注意

  • 这里并没有使用框架,如果有兴趣的朋友可以用框架写一个爬取全站的
  • 这里的主要用到的是BeautifulSouprequests,详情可以看我的博客中的BeautifulSoup用法,后续还会更新requests的用法

参考文章

python制作pdf电子书的更多相关文章

  1. Python 爬虫:把廖雪峰教程转换成 PDF 电子书

    写爬虫似乎没有比用 Python 更合适了,Python 社区提供的爬虫工具多得让你眼花缭乱,各种拿来就可以直接用的 library 分分钟就可以写出一个爬虫出来,今天尝试写一个爬虫,将廖雪峰老师的 ...

  2. 100本Python精品书籍(附pdf电子书下载)

    51本Python精品书籍(附下载)链接: https://pan.baidu.com/s/19ydAKCFxM0plkepXMlqQLg 提取码: nnpe 400集python视频教程下载:链接: ...

  3. 学以致用:Python爬取廖大Python教程制作pdf

    当我学了廖大的Python教程后,感觉总得做点什么,正好自己想随时查阅,于是就开始有了制作PDF这个想法. 想要把教程变成PDF有三步: 先生成空html,爬取每一篇教程放进一个新生成的div,这样就 ...

  4. Python爬虫实战:将网页转换为pdf电子书

    写爬虫似乎没有比用 Python 更合适了,Python 社区提供的爬虫工具多得让你眼花缭乱,各种拿来就可以直接用的 library 分分钟就可以写出一个爬虫出来,今天就琢磨着写一个爬虫,将廖雪峰的 ...

  5. 爬虫:把廖雪峰的教程转换成 PDF 电子书

    写爬虫似乎没有比用 Python 更合适了,Python 社区提供的爬虫工具多得让你眼花缭乱,各种拿来就可以直接用的 library 分分钟就可以写出一个爬虫出来,今天就琢磨着写一个爬虫,将廖雪峰的 ...

  6. 教你使用Python制作酷炫二维码

    这篇文章讲的是如何利用python制作狂拽酷炫吊炸天的二维码,非常有趣哦! 可能你见过的二维码大多长这样: 普普通通,平平凡凡,没什么特色... 但,如果二维码长这样呢! 或者 这样! 是不是炒鸡好看 ...

  7. Python绘制PDF文件~超简单的小程序

    Python绘制PDF文件 项目简介 这次项目很简单,本次项目课,代码不超过40行,主要是使用 urllib和reportlab模块,来生成一个pdf文件. reportlab官方文档 http:// ...

  8. 【转】PDF电子书分享

    http://www.voidcn.com/blog/u013830841/article/p-4343018.html http://www.voidcn.com/blog/u013830841/a ...

  9. 用C#制作PDF文件全攻略

    用C#制作PDF文件全攻略 目  录 前    言... 3 第一部分 iText的简单应用... 4 第一章 创建一个Document 4 第一步 创建一个Document实例:... 5 第二步 ...

随机推荐

  1. JQuery 通过方向键控制div上下左右移动

    在CSS中当DOM元素的position属性为absolute或relative时,我们可以通过改变这个元素的left和top属性的具体值来控制元素在页面中显现的位置. 利用上述属性,我们可以简单实现 ...

  2. 使用wcf编写坐标字符串生成shapefile文件,在iis发布供前端调用

    项目有一需求,需要由坐标字符串(格式:x,y,点名)生成shapefile,由于在前台开发类似功能比较麻烦而且也不适用,最终决定使用WCF来实现,不借助现有GIS软件,基于GDAL实现. 实现过程如下 ...

  3. 小米Adnroid默认禁止悬浮框的使用,导致开发的悬浮框无法接收事件

    比如你建了一个悬浮框: WindowManager windowManager = getWindowManager(context); int screenWidth = windowManager ...

  4. 【JavaScript】让事件支持先发布后订阅

    之前写过一个的事件管理器,就是普通的先订阅后发布模式.但实际场景中我们需要做到后订阅的也能收到发布的消息.比如我们关注微信公众号,还是能看到历史消息的.类似于qq离线消息,我先发给你,你登录了就能收到 ...

  5. OC中的copy

    copy的概念 Copy的字面意思是"复制"."拷贝",是一个产生副本的过程 对象拷贝的目的:要使用某个对象的数据,但是在修改对象的时候不影响原来的对象内容,常 ...

  6. Centos7.3 安装Mysql5.7并修改初始密码

    1.官方安装文档 http://dev.mysql.com/doc/mysql-yum-repo-quick-guide/en/ 2.下载 Mysql yum包 http://dev.mysql.co ...

  7. 访问servlet的路径问题

    一.url-pattern的三种配置 在web.xml配置文件中配置有关Servlet的时候,<url-pattern>标签是用于配置当前Servlet拦截的路径,也就是说,客户端浏览器访 ...

  8. java环境安装之不能安装exe文件

    经过多年,打算再学下java 从官网下载java8安装包,但因为我的计算机的cd-room被卸载掉了,安装是报错说cab文件损坏之类的错误. 从stackOverflow中找到一篇眼前一亮的解决办法. ...

  9. 基于python的爬虫(一)

    抓取网页 python核心库 urllib2 实现对静态网页的抓取,不得不说,"人生苦短,我用python"这句话还是有道理的,要是用java来写,这估计得20行代码 (对不住了博 ...

  10. 二叉树遍历 C#

    二叉树遍历 C# 什么是二叉树 二叉树是每个节点最多有两个子树的树结构 (1)完全二叉树——若设二叉树的高度为h,除第 h 层外,其它各层 (1-h-1) 的结点数都达到最大个数,第h层有叶子结点,并 ...