You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
html_to_pdf/html_to_pdf/render.py

41 lines
941 B

import os
import asyncio
import tempfile
from pyppeteer import launch
def sync_wait(future):
loop = asyncio.get_event_loop()
return loop.run_until_complete(future)
def render_from_url(url, out=None):
if out is None:
out = "out.pdf"
out = os.path.join(os.getcwd(), out)
browser = sync_wait(launch())
page = sync_wait(browser.newPage())
sync_wait(page.goto(url))
sync_wait(page.pdf({
"displayHeaderFooter":False,
"printBackground": True,
"path": out,
"preferCSSPageSize": True,
}))
sync_wait(browser.close())
def render_from_file(s, out=None):
if s[0] != "/":
s = os.path.join(os.getcwd(), s)
f = 'file://' + s
render_from_url(f, out=out)
def render_from_string(s, out=None):
temp = tempfile.NamedTemporaryFile(suffix=".html", mode="w")
temp.write(s)
temp.flush()
render_from_file(temp.name, out=out)
temp.close()