日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

牛逼,这个PDF库比其它工具好用99倍

發(fā)布時(shí)間:2024/9/15 编程问答 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 牛逼,这个PDF库比其它工具好用99倍 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

將網(wǎng)頁(yè)轉(zhuǎn)換為pdf之前用過(guò)wkhtmltopdf這個(gè)工具,對(duì)應(yīng)的python庫(kù)是pdfkit,但是最終轉(zhuǎn)換出來(lái)的效果總是不盡如意。

最近發(fā)現(xiàn)一個(gè)新的庫(kù) WeasyPrint , 經(jīng)過(guò)一番測(cè)試效果非常不錯(cuò),無(wú)論是從官方網(wǎng)站的介紹還是提供的文檔,看得出作者應(yīng)該是花了不少心思來(lái)做這件事。

最重要的是,安裝簡(jiǎn)單,使用方便。不像pdfkit調(diào)用的都是wkhtmltopdf提供的指令,而 WeasyPrint 是一個(gè)原生的Python項(xiàng)目,所以特別適合做Python定制開(kāi)發(fā),當(dāng)然,它也需要依賴其它第三方庫(kù)。

安裝

WeasyPrint 能在 Linux, macOS and Windows 多平臺(tái)支持,因?yàn)閃easyPrint需要依賴cairo, Pango 和 GDK-PixBuf ,所以這些軟件需要獨(dú)立安裝,而 WeasyPrint 可以直接通過(guò)pip安裝。

Mac

brew install python3 cairo pango gdk-pixbuf libffi

Window

Windows的安裝要稍微麻煩些, 主要是安裝 GTK+ 這個(gè)庫(kù),下載地址: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

不出意外的話,你現(xiàn)在就可以使用WeasyPrint這個(gè)工具了。執(zhí)行weasyprint命令, 指定要轉(zhuǎn)換的url地址和pdf文件名即可。

我們隨便指定一個(gè)URL地址,這里以我的博客為例

weasyprint https://foofish.net/base64.html base64.pdf

最后生成的效果圖


這就完了嗎?

肯定不是,如果只是單純的轉(zhuǎn)換一個(gè)網(wǎng)頁(yè),直接用瀏覽器的打印功能,然后另存為PDF就可以了。沒(méi)必要繞個(gè)這么大的彎子來(lái)做這件事。

我們之所以用它來(lái)做PDF轉(zhuǎn)換肯定是希望它能夠?yàn)槲覀儗?shí)現(xiàn)自動(dòng)化、批量化、個(gè)性化的任務(wù)。

構(gòu)建HTML對(duì)象

生成PDF文件前,首先需要構(gòu)建一個(gè)HTML對(duì)象,HTML對(duì)象可以通過(guò)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文件只需要調(diào)用html對(duì)象的write_pdf方法

一個(gè)最簡(jiǎn)單的例子:

from weasyprint import HTML HTML('https://foofish.net/base64.html').write_pdf('base64.pdf')

在轉(zhuǎn)換的時(shí)候,你還可以自定義樣式

from weasyprint import HTML, CSS HTML('https://foofish.net/base64.html').write_pdf('base64.pdf',stylesheets=[CSS(string='body { font-family: serif !important }')])

當(dāng)然不僅可以生成PDF,也可以生成PNG圖片, 只需要調(diào)用 html.write_png(“filename.png”)。

Document對(duì)象

此外,HTML對(duì)象的render()方法返回一個(gè)document對(duì)象,通過(guò)docuemnt對(duì)象可以拿到所有頁(yè)碼(page)數(shù)據(jù),這樣你就可以獲取指定頁(yè)的數(shù)據(jù)來(lái)生成PDF或者將多個(gè)HTML的document對(duì)象合并成一個(gè)PDF文件。

例如,將每頁(yè)單獨(dú)生成一張圖片

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)

例如:將兩個(gè)鏈接整個(gè)生成一個(gè)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")

推薦閱讀

平時(shí)都逛哪些技術(shù)網(wǎng)站?(程序員必備58個(gè)網(wǎng)站匯總)

肝!精心整理了 50 個(gè)數(shù)據(jù)源網(wǎng)站!

3種Python數(shù)據(jù)結(jié)構(gòu),13種創(chuàng)建方法,這個(gè)總結(jié),超贊!

總結(jié)

以上是生活随笔為你收集整理的牛逼,这个PDF库比其它工具好用99倍的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。