用 pyppeteer 製作 PDF檔案

2021-10-21 12:22:14 字數 2884 閱讀 3480

之前介紹過一些將html轉換為pdf檔案的庫,比如 wkhtmltopdf、weasyprint,今天再介紹另乙個神器pyppeteer可將html頁面轉換為pdf。

介紹 pyppeteer 之前,有必要先介紹一下 puppeteer,puppeteer 是谷歌官方出的乙個通過devtools協議控制headless chrome的node庫。通過puppeteer可以直接控制chrome瀏覽器模擬大部分使用者操作。

所謂headless chrome 就是 chrome 瀏覽器的無介面形態。

而 pyppeteer 就是 puppeteer 的 python 版本非官方實現,它是一位來自於日本的工程師依據 puppeteer 的一些功能開發出來的非官方版本

pyppeteer 採用了 python 的 async 機制,需要python3.5 及以上版本才支援。

但凡是需要通過chrome瀏覽器手動完成的操作都可以通過 pyppeteer 自動完成,例如:

例如將頁面生成截圖可以直接呼叫 page.screenshot 方法

import asyncio

from pyppeteer import launch

async

defmain()

: browser =

await launch(

) page =

await browser.newpage(

)await page.goto(

'')await page.screenshot(

)await browser.close(

)asyncio.get_event_loop(

).run_until_complete(main(

))

截圖功能在海報分享等場景用的多,有看過有讚工程師分享的一篇文章,就有用到puppeteer來做海報分享,效能比canvas高。

匯出pdf直接呼叫page.pdf方法就可以, **非常簡潔

import asyncio

from pyppeteer import launch

async

defmain()

: browser =

await launch(

) page =

await browser.newpage(

)await page.goto(

'')await page.pdf(

)await browser.close(

)asyncio.get_event_loop(

).run_until_complete(main(

))

安裝 pyppeteer

pip install pyppeteer
url =

""

完成**:

browser =

await launch(

options=,)

page =

await browser.newpage(

) url =

""await page.goto(url)

file_name =

"test.pdf"

await page.pdf(

)await browser.close(

)

[w:pyppeteer.chromium_**********] start chromium download.

download may take a few minutes.

100%|██████████| 127496521/127496521 [00:20<00:00, 6268578.80it/s]

[w:pyppeteer.chromium_**********]

chromium download done.

執行完成後,我們來預覽下pdf檔案

通過分析,原來是頁面源**中,img 標籤沒有src屬性,只有個data-src 屬性,預設情況下是無法正常顯示的,之所有能在瀏覽器能正常展示出來,是有個js指令碼動態地修改了dom元素為

所以,我們也可以通過js**模擬真人瀏覽網頁一樣,滾動滑鼠,不停地往下滑動,將動態載入出來。

最後,完整**就變成了這樣:

async

defmain()

: browser =

await launch(

) page =

await browser.newpage(

) url =

""await page.goto(url)

await page.evaluate(

'''async () =>

}, 100);

});}'''

)await page.pdf(

)await browser.close(

)if __name__ ==

'__main__'

: asyncio.get_event_loop(

).run_until_complete(main(

))

將js **封裝成乙個字串當作引數傳給 page.evaluate 函式, 該**就是獲不斷滾動頁面,直到頁面底部為止。這樣整個頁面的就全部載入出來了。

效果看起來還不錯

PDF模版製作以及用iText生成PDF

1 製作pdf模版 對於新手來說,這個軟體使用還是需要一番摸索的,來說一下我的製作流程 1.1 現有乙個模版,用adobe調模版還是挺麻煩的,所以還是使用word來製作模版,製作好模版之後,轉成pdf格式。檔案 另存為 儲存為pdf的格式。1.2 用adobe開啟剛才匯出的pdf。右側工具欄裡選擇 ...

PDF製作軟體Adobe Acrobat及相關資源

毫無疑問,最官方的肯定是 adobe acrobat 這個領域的不二選擇,發現軟體的個頭也是越來越大的,最早是5.0,現在已經是7.0了。官方主頁 http www.chinese s.adobe.com products acrobatpro main.html 相關論壇 http www.chi...

Foxit Reader 給PDF製作書籤

官網 foxit 下面有很多產品,只有foixt reader是免費的,不過這已經足夠了,可以用他來做書籤。使用方法如下 1 用foixt reader開啟乙個需要製作書籤的pdf文件。2 選擇 edit add bookmark 3 在新加的書籤項中填寫章節的名稱,如下 4 將pdf文件滾動到相應...