使用 Python 制作属于自己的 PDF 电子书
今天分享的則是如何將 HTML 保存為 PDF。
熟練利用好這招,可以試著自己把精品網(wǎng)頁(yè)內(nèi)容做成 PDF 電子書(shū)。
主要使用的是wkhtmltopdf的Python封裝——pdfkit
安裝
1. Install python-pdfkit:
pip install pdfkit2. Install wkhtmltopdf:
sudo apt-get install wkhtmltopdf sudo yum intsall wkhtmltopdf brew install Caskroom/cask/wkhtmltopdf使用
一個(gè)簡(jiǎn)單的例子:
''' 遇到問(wèn)題沒(méi)人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:857662006 尋找有志同道合的小伙伴,互幫互助, 群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書(shū)! '''import pdfkitpdfkit.from_url('http://google.com', 'out.pdf')pdfkit.from_file('test.html', 'out.pdf')pdfkit.from_string('Hello!', 'out.pdf')你也可以傳遞一個(gè)url或者文件名列表:
pdfkit.from_url(['google.com', 'yandex.ru', 'engadget.com'], 'out.pdf')pdfkit.from_file(['file1.html', 'file2.html'], 'out.pdf')也可以傳遞一個(gè)打開(kāi)的文件:
with open('file.html') as f:pdfkit.from_file(f, 'out.pdf')如果你想對(duì)生成的PDF作進(jìn)一步處理, 你可以將其讀取到一個(gè)變量中:
# 設(shè)置輸出文件為False,將結(jié)果賦給一個(gè)變量pdf = pdfkit.from_url('http://google.com', False)你可以制定所有的 wkhtmltopdf 選項(xiàng). 你可以移除選項(xiàng)名字前面的 ‘–’ .如果選項(xiàng)沒(méi)有值, 使用 None, Falseor * 作為字典值:
''' 遇到問(wèn)題沒(méi)人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:857662006 尋找有志同道合的小伙伴,互幫互助, 群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書(shū)! '''options = {'page-size': 'Letter','margin-top': '0.75in','margin-right': '0.75in','margin-bottom': '0.75in','margin-left': '0.75in','encoding': "UTF-8",'no-outline': None}pdfkit.from_url('http://google.com', 'out.pdf', options=options)默認(rèn)情況下, PDFKit 將會(huì)顯示所有的 wkhtmltopdf 輸出. 如果你不想看到這些信息,你需要傳遞一個(gè) quiet 選項(xiàng):
options = {'quiet': ''}pdfkit.from_url('google.com', 'out.pdf', options=options)由于wkhtmltopdf的命令語(yǔ)法 , TOC 和 Cover 選項(xiàng)必須分開(kāi)指定:
''' 遇到問(wèn)題沒(méi)人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:857662006 尋找有志同道合的小伙伴,互幫互助, 群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書(shū)! '''toc = {'xsl-style-sheet': 'toc.xsl'}cover = 'cover.html'pdfkit.from_file('file.html', options=options, toc=toc, cover=cover)當(dāng)你轉(zhuǎn)換文件、或字符串的時(shí)候,你可以通過(guò)css選項(xiàng)指定擴(kuò)展的 CSS 文件。
''' 遇到問(wèn)題沒(méi)人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:857662006 尋找有志同道合的小伙伴,互幫互助, 群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書(shū)! '''# 單個(gè) CSS 文件css = 'example.css'pdfkit.from_file('file.html', options=options, css=css)# Multiple CSS filescss = ['example.css', 'example2.css']pdfkit.from_file('file.html', options=options, css=css)你也可以通過(guò)你的HTML中的meta tags傳遞任意選項(xiàng):
body = """Hello World!"""pdfkit.from_string(body, 'out.pdf') #with --page-size=Legal and --orientation=Landscape配置
每個(gè)API調(diào)用都有一個(gè)可選的參數(shù)。這應(yīng)該是 pdfkit.configuration()API 調(diào)用的一個(gè)實(shí)例. 采用configuration 選項(xiàng)作為初始化參數(shù)。可用的選項(xiàng)有:
wkhtmltopdf —— wkhtmltopdf二進(jìn)制文件所在的位置。默認(rèn)情況下 pdfkit 會(huì)嘗試使用 which (在類UNIX系統(tǒng)中) 或 where (在Windows系統(tǒng)中)來(lái)判斷.
meta_tag_prefix – pdfkit的前綴指定 meta tags(元標(biāo)簽) - 默認(rèn)情況是 pdfkit-
示例 :針對(duì) wkhtmltopdf不在系統(tǒng)路徑中(不在 $PATH里面):
問(wèn)題
IOError: 'No wkhtmltopdf executable found':確保 wkhtmltopdf 在你的系統(tǒng)路徑中( $PATH), 會(huì)通過(guò) configuration進(jìn)行了配置 (詳情看上文描述)。 在Windows系統(tǒng)中使用 where wkhtmltopdf命令 或 在 linux系統(tǒng)中使用 which wkhtmltopdf會(huì)返回 wkhtmltopdf二進(jìn)制可執(zhí)行文件所在的確切位置.
IOError: 'Command Failed'如果出現(xiàn)這個(gè)錯(cuò)誤意味著 PDFKit不能處理一個(gè)輸入。你可以嘗試直接在錯(cuò)誤信息后面直接運(yùn)行一個(gè)命令來(lái)查看是什么導(dǎo)致了這個(gè)錯(cuò)誤 (某些版本的 wkhtmltopdf會(huì)因?yàn)槎五e(cuò)誤導(dǎo)致處理失敗)
正常生成,但是出現(xiàn)中文亂碼
確保兩項(xiàng):
1)、你的系統(tǒng)中有中文字體
2)、在html中加入**
下面是我隨便寫(xiě)的一個(gè)HTML表格:
<html> <head><meta charset="UTF-8"></head> <body> <table width="400" border="1"><tr><th align="left">Item....</th><th align="right">1</th></tr><tr><td align="left">衣服</td><td align="right">$241.10</td></tr><tr><td align="left">化妝品</td><td align="right">$30.00</td></tr><tr><td align="left">食物</td><td align="right">$730.40</td></tr><tr><th align="left">tOTAL</th><th align="right">$1001.50</th></tr> </table> </body> </html>下面是生成的PDF截圖
另也可直接使用:https://pdfcrowd.com/#convertbyinput
總結(jié)
以上是生活随笔為你收集整理的使用 Python 制作属于自己的 PDF 电子书的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 如何使用 Python 进行时间序列预测
- 下一篇: 200 行代码实现 2048 游戏