Skip to main content

playwright render html to pdf

Project description

Playwright HTML to PDF

Package version

A modern html to pdf scheme based on playwright, Support more html and css technologies.

Installation

  1. Install pwhtmltopdf
    pip install pwhtmltopdf
    
  2. Install chromium
    playwright install chromium
    

Usage

Simple example:

import asyncio
import pathlib
from pwhtmltopdf import HtmlToPdf


async def this_from_url():
    async with HtmlToPdf() as htp:
        await htp.from_url("https://playwright.dev/", "from_url.pdf")


async def this_from_file():
    async with HtmlToPdf() as htp:
        # Make sure the current directory has a test.html file
        await htp.from_file("test.html", "from_file.pdf")


async def this_from_string():
    async with HtmlToPdf() as htp:
        content = pathlib.Path("test.html").read_text()
        await htp.from_string(content, "from_string.pdf")


if __name__ == '__main__':
    asyncio.run(this_from_url())

Render fill:

When local_render is equal to true, jinja2 template syntax will be used to render filled html, If html needs to use local static resources, you need to set static_root, If you want to render filled data dynamically to generate pdf(Based on jinja2), try the following method👇

import asyncio
import pathlib
from pwhtmltopdf import HtmlToPdf


async def this_render_from_url():
    file_path = pathlib.Path("tests/images.html").absolute()
    async with HtmlToPdf(static_root="tests/static",
                         wait_until="load", pdf_kwargs={"print_background": True}) as htp:
        await htp.from_url(
            f"file://{file_path}",
            "tests/effect/from_url/local_url_render.pdf",
            local_render=True,
            char_code=123,
        )


async def this_render_from_file():
    htp = HtmlToPdf(static_root="tests/static")
    await htp.from_file(
        "tests/images.html", "tests/effect/from_file/images_render.pdf",
        local_render=True, char_code=123
    )
    await htp.close()


async def this_render_from_string():
    content = pathlib.Path("tests/images.html").read_text()
    htp = HtmlToPdf(static_root="tests/static")
    await htp.from_string(content, "tests/effect/from_string/images_render.pdf",
                          local_render=True, char_code=123)
    await htp.close()


if __name__ == '__main__':
    asyncio.run(this_render_from_url())

Advanced usage

Support playwright new_page and page.pdf all parameters passthrough.

import asyncio
from pwhtmltopdf import HtmlToPdf


async def example():
   async with HtmlToPdf(pdf_kwargs={"print_background": True},
                        page_kwargs={"locale": "de-DE", "is_mobile": True}) as htp:
      await htp.from_url("https://playwright.dev/", "from_url.pdf")


if __name__ == '__main__':
   asyncio.run(example())

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pwhtmltopdf-0.2.0.tar.gz (16.0 kB view hashes)

Uploaded Source

Built Distribution

pwhtmltopdf-0.2.0-py3-none-any.whl (10.4 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page