zoukankan      html  css  js  c++  java
  • python制作pdf电子书

    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的教程,并且做成了电子书,截图如下

    python教程

    注意

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

    参考文章

  • 相关阅读:
    进程线程协程
    面向对象完善总结
    面向对象编程
    常用模块2
    python常用模块
    随机验证码模块(random)
    带有key参数的函数filter,map,max,min
    python内置函数、匿名函数、递归
    python迭代器与生成器
    如何添加title左侧的图标
  • 原文地址:https://www.cnblogs.com/Chenjiabing/p/6907406.html
Copyright © 2011-2022 走看看