標籤:

python製作pdf電子書

準備

  • 製作電子書使用的是python的pdfkit這個庫,pdfkit是 wkhtmltopdf的Python封裝包,因此在安裝這個之前要安裝wkhtmltopdf

安裝wkhtmltopdf

  1. sudo apt-get install wkhtmltopdf (ubantu下,不過這裡安裝的時候可能對應的版本不同,會出現錯誤,如果不行的話還請自己百度下,我安裝的時候是可以的)

  2. windows下的用戶直接到wkhtmltopdf官網下載穩定版本,然後直接安裝即可,但是安裝之後需要注意的是一定要將其添加到環境變數中,否則會出現找不到路徑的問題

python安裝依賴包

  • pip install pdfkit

pdfkit的用法

  • 初級了解函數

  1. pdfkit.from_url([url,],demo.pdf) 這個是直接傳入一個url或者一個url列表,然後通過這個函數直接將其網頁轉換成demo.pdf,注意這裡只能轉換靜態文本,如果使用js一些腳本的話是不能直接轉換的
  2. pdfkit.from_string("https://chenjiabing666.gituhb.io">陳加兵的客

    ",demo.pdf)這個是直接講一個字元串轉換成pdf格式的電子書,裡面可以直接傳一個字元串,也可以用html標籤包裹這個字元串
  3. pdfkit.from_file([file_name,],demo.pdf) 這個是直接傳入一個文件或者一個列表即是多個文件,不過這裡傳入的文件一般都是html格式的文件
  • 進階
  1. options這個參數是上面函數的可選參數,其中制定了一些選項,詳情請見[wkhtmltopdf.org/usage/w](wkhtmltopdf.org/usage/w), 你可以移除選項名字前面的 -- .如果選項沒有值, 使用None, False or,*作為字典值,例子如下:

    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, }

  2. 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.htmlpdfkit.from_file(demo.html,demo.pdf,cover=cover,options=options)

  3. css這裡的css也是函數中的一個可選參數,這個參數主要的作用作用就是在其中定義自己喜歡的樣式,當然這裡也可以傳入一個列表,定義多個樣式css文件,當然沒有這個參數也可以實現定義自己的樣式,只需要在自己的html模板中定義內嵌的樣式,或者直接用<link>引用外面的樣式即可,本人親試是可以的,具體的使用如下

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

  4. 注意
  • 這裡生成pdf的時候可能出現中文的亂碼,請一定在`html`模板開頭指定字體utf-8-> <meta charset="UTF-8">
  • 可能在爬取生成的時候會出現ascii錯誤,只需要在py文件開頭寫下

    import sysimport threadingreload(sys)sys.setdefaultencoding(utf8)

  • 寫入文件的時候不想python3一樣可以指定編碼格式,這裡我使用的是codecs庫,可以向python3一樣指定其中的編碼格式

實戰

本人爬了廖雪峰老師的`python2.7`的教程,並且做成了電子書,截圖如下

拓展

這裡並沒有使用框架,如果有興趣的朋友可以用框架寫一個爬取全站的,這裡的主要用到的是BeautifulSoup和requests,詳情可以看我的博客中的python爬蟲之BeautifulSoup。源代碼請見pdfkit製作pdf電子書

推薦閱讀:

Python MRO
記事本能知道文本的編碼(ANSI,UTF-8等),但python要open時設置encoding?
winpython, anaconda 哪個更好?
Home Assistant 更新說明 —— 0.65
【小林的OpenCV基礎課 4】滑動條什麼的

TAG:Python |