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. 蓝桥杯-循环节长度-java

    /* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生 * All rights reserved. * 文件名称: ...

  2. SCP“免密” 远程COPY较多文件

    一.linux脚本实现自动输入密码 使用Linux的程序员对输入密码这个举动一定不陌生,在Linux下对用户有严格的权限限制,干很多事情越过了权限就得输入密码,比如使用超级用户执行命令,又比如ftp. ...

  3. react native 升级到0.31.0的相关问题 mac Android Studio开发环境

    报错Caused by: java.lang.ClassCastException: android.app.Application cannot be cast to com.facebook.re ...

  4. Maven学习-构建项目

    创建项目 运行如下命令会创建一个简单的Maven项目. mvn archetype:create -DgroupId=com.netease.learn -DartifactId=simple -Dp ...

  5. 【转】典型的JavaScript面试题

    问题1: 作用域(Scope) (function() { "use strict"; var a = b = 5; })(); console.log(b); 控制台(conso ...

  6. 2016 UESTC Training for Dynamic Programming

    强行做做试试看吧. http://acm.hust.edu.cn/vjudge/contest/124721#overview 密码:mytrain C - 柱爷与咸鱼神功 一个简单01背包. #in ...

  7. malloc与new相关

    前言: 通常我们使用数组的时候:必须提前用一个常量来指定数组的长度,同时它的内存空间在编译的时候就已经被分配了.但是有时候数组的长度只有在运行的时候才能知道.因此,一种简单的解决方案就是提前申请一块较 ...

  8. Junit4测试Spring

    使用Junit4.4测试 在类上的配置Annotation  @RunWith(SpringJUnit4ClassRunner.class) 用于配置spring中测试的环境  @ContextCon ...

  9. Libevent源码分析—event, event_base

    event和event_base是libevent的两个核心结构体,分别是反应堆模式中的Event和Reactor.源码分别位于event.h和event-internal.h中 1.event: s ...

  10. 2017-5-31 VBA设置config sheet 制作工具

    最近学习了对单元格式进行设置的两种方式,一个是把一个sheet设置成config的配置,之后把内容读进去:一个是在sheet中读取XML文件. 今天先说说怎么用config来读取数据. 把这一个she ...