python製作電子書

  • 2019 年 12 月 31 日
  • 筆記

文章目錄

  1. 1. python製作pdf電子書
    1. 1.1. 準備
      1. 1.1.1. 安裝wkhtmltopdf
      2. 1.1.2. python安裝依賴包
    2. 1.2. pdfkit的用法
      1. 1.2.1. 初級了解函數
      2. 1.2.2. 進階
        1. 1.2.2.1. options
        2. 1.2.2.2. cover
        3. 1.2.2.3. css
    3. 1.3. 注意
    4. 1.4. 實戰
      1. 1.4.1. 注意
    5. 1.5. 參考文章

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的教程,並且做成了電子書,截圖如下

注意

參考文章