<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          牛逼,這個(gè)PDF庫比其它工具好用99倍

          共 2421字,需瀏覽 5分鐘

           ·

          2021-01-14 13:44

          點(diǎn)擊上方Python知識(shí)圈設(shè)為星標(biāo)

          回復(fù)100獲取100題PDF



          閱讀文本大概需要 5?分鐘


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

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

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

          安裝

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

          Mac

          brew install python3 cairo pango gdk-pixbuf libffi

          Window

          Windows的安裝要稍微麻煩些, 主要是安裝 GTK+ 這個(gè)庫,下載地址: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)頁,直接用瀏覽器的打印功能,然后另存為PDF就可以了。沒必要繞個(gè)這么大的彎子來做這件事。

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

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

          生成PDF文件前,首先需要構(gòu)建一個(gè)HTML對(duì)象,HTML對(duì)象可以通過url鏈接、文件路徑,或者是HTML文檔字符串指定

          from weasyprint import HTML

          HTML(filename='../foo.html')

          HTML(url='http://weasyprint.org')

          HTML(string='''

          The title


          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ì)象,通過docuemnt對(duì)象可以拿到所有頁碼(page)數(shù)據(jù),這樣你就可以獲取指定頁的數(shù)據(jù)來生成PDF或者將多個(gè)HTML的document對(duì)象合并成一個(gè)PDF文件。

          例如,將每頁單獨(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")


          加微信送《Python知識(shí)點(diǎn)100題PDF》

          pk哥個(gè)人微信


          添加pk哥個(gè)人微信即送Python資料


          Python知識(shí)點(diǎn)100題的PDF

          Python相關(guān)的電子書10本


          記得備注:“100題”




          往期推薦
          01

          公眾號(hào)所有文章匯總導(dǎo)航(2-10更新)

          02

          Python100例(附PDF下載地址)

          03

          求你了,別再用 pip 那烏龜?shù)乃俣热グ惭b庫了!


          點(diǎn)擊閱讀原文查看pk哥原創(chuàng)視頻

          我就知道你“在看”

          瀏覽 28
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  香蕉久久网站 | 藤浦惠一区二区三区免费观看 | 亚洲爆乳无码一区二区三区 | 亚洲欧洲日本国产 | 91深夜福利 |