kakakakakku blog

Weekly Tech Blog: Keep on Learning!

Playwright for Python: PDF 形式で印刷する

Playwright for Python でウェブサイトのスクリーンショット(画像形式)を取得するのではなく「PDF 形式で」取得したいこともあると思う(実際に最近あった〜).Playwright for Python では page.pdf() を使えば簡単に実装できる❗️

そして page.pdf() はデフォルトで「印刷用 CSS : @media printを認識してくれるため,ウェブサイト側のデザインに沿って "整って" 表示された PDF を取得できる.

playwright.dev

page.pdf()

デフォルトの用紙サイズは Letter なので format オプションで A4 など適切な用紙サイズを指定しておくのが良いと思う.

page.pdf(path='pdf/print.pdf', format='A4')

page.emulate_media() + page.pdf()

もし @media print ではなく @media screen で PDF を取得する場合は page.pdf() の前に page.emulate_media() でメディアを変更しておく必要がある.

page.emulate_media(media='screen')
page.pdf(path='pdf/screen.pdf', format='A4')

試す

今回はサンプルとして,MDN のドキュメントを @media print@media screen それぞれで PDF 化した「1ページ目」を載せておく.MDN のドキュメントだと大きな差はないけど「ヘッダー部分」@media print にはなく,ある程度は "整って" 表示されていると思う👌

developer.mozilla.org

今回試したサンプルコード

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch()
    page = browser.new_page()
    page.goto('https://developer.mozilla.org/ja/docs/Web/CSS/@media')

    page.pdf(path='pdf/print.pdf', format='A4')

    page.emulate_media(media='screen')
    page.pdf(path='pdf/screen.pdf', format='A4')

    browser.close()