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.
 

52 lines
1.3 KiB

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()
def main():
import sys
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("input", help="Input HTML file.")
parser.add_argument("-o", "--output", help="Output filename.", default="out.pdf")
args = parser.parse_args()
render_from_file(args.input, args.output)
print(f"{args.input} rendered into {args.output}")