牛逼,这个PDF库比其它工具好用99倍
將網頁轉換為pdf之前用過wkhtmltopdf這個工具,對應的python庫是pdfkit,但是最終轉換出來的效果總是不盡如意。
最近發現一個新的庫 WeasyPrint , 經過一番測試效果非常不錯,無論是從官方網站的介紹還是提供的文檔,看得出作者應該是花了不少心思來做這件事。
最重要的是,安裝簡單,使用方便。不像pdfkit調用的都是wkhtmltopdf提供的指令,而 WeasyPrint 是一個原生的Python項目,所以特別適合做Python定制開發,當然,它也需要依賴其它第三方庫。
安裝
WeasyPrint 能在 Linux, macOS and Windows 多平臺支持,因為WeasyPrint需要依賴cairo, Pango 和 GDK-PixBuf ,所以這些軟件需要獨立安裝,而 WeasyPrint 可以直接通過pip安裝。
Mac
brew install python3 cairo pango gdk-pixbuf libffiWindow
Windows的安裝要稍微麻煩些, 主要是安裝 GTK+ 這個庫,下載地址:https://github.com/tschoonj/GTK-for-Windows-Runtime-Environment-Installer/releases/download/2020-11-22/gtk3-runtime-3.24.23-2020-11-22-ts-win64.exe
安裝WeasyPrint
pip install WeasyPrint不出意外的話,你現在就可以使用WeasyPrint這個工具了。執行weasyprint命令, 指定要轉換的url地址和pdf文件名即可。
我們隨便指定一個URL地址,這里以我的博客為例
weasyprint https://foofish.net/base64.html base64.pdf最后生成的效果圖
這就完了嗎?
肯定不是,如果只是單純的轉換一個網頁,直接用瀏覽器的打印功能,然后另存為PDF就可以了。沒必要繞個這么大的彎子來做這件事。
我們之所以用它來做PDF轉換肯定是希望它能夠為我們實現自動化、批量化、個性化的任務。
構建HTML對象
生成PDF文件前,首先需要構建一個HTML對象,HTML對象可以通過url鏈接、文件路徑,或者是HTML文檔字符串指定
from weasyprint import HTMLHTML(filename='../foo.html')HTML(url='http://weasyprint.org')HTML(string='''<h1>The title</h1><p>Content goes here ''')生成pdf文件只需要調用html對象的write_pdf方法
一個最簡單的例子:
from weasyprint import HTML HTML('https://foofish.net/base64.html').write_pdf('base64.pdf')在轉換的時候,你還可以自定義樣式
from weasyprint import HTML, CSS HTML('https://foofish.net/base64.html').write_pdf('base64.pdf',stylesheets=[CSS(string='body { font-family: serif !important }')])當然不僅可以生成PDF,也可以生成PNG圖片, 只需要調用 html.write_png(“filename.png”)。
Document對象
此外,HTML對象的render()方法返回一個document對象,通過docuemnt對象可以拿到所有頁碼(page)數據,這樣你就可以獲取指定頁的數據來生成PDF或者將多個HTML的document對象合并成一個PDF文件。
例如,將每頁單獨生成一張圖片
html1 = HTML("https://foofish.net/base64.html") document = html1.render() for i, page in enumerate(document.pages):document.copy([page]).write_png('page_%s.png' % i)例如:將兩個鏈接整個生成一個PDF文件
html1 = HTML("https://foofish.net/base64.html") html2 = HTML("https://foofish.net/python-wsgi.html") pages = [] pages.extend(html1.render().pages) pages.extend(html2.render().pages) HTML(string="").render().copy(pages).write_pdf("foofish.pdf")推薦閱讀
平時都逛哪些技術網站?(程序員必備58個網站匯總)
肝!精心整理了 50 個數據源網站!
3種Python數據結構,13種創建方法,這個總結,超贊!
總結
以上是生活随笔為你收集整理的牛逼,这个PDF库比其它工具好用99倍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 华为看片牛?真香!那就送你一台试试,可折
- 下一篇: 年轻人不讲武德,居然在简历中藏木马!