diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 0000000..bb3ec5f --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1 @@ +include README.md diff --git a/README.md b/README.md index 59340cc..d63fcdc 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,11 @@ # html_to_pdf +### API + +```python +import html_to_pdf as h2p + +h2p.render_from_url("http://example.com", "out.pdf") +h2p.render_from_file("local_file.html", "out2.pdf") +h2p.render_from_string("

Works

", "out3.pdf") +``` diff --git a/html_to_pdf/__init__.py b/html_to_pdf/__init__.py new file mode 100644 index 0000000..bb37bc1 --- /dev/null +++ b/html_to_pdf/__init__.py @@ -0,0 +1 @@ +from .render import render_from_url, render_from_string, render_from_file diff --git a/html_to_pdf/render.py b/html_to_pdf/render.py new file mode 100644 index 0000000..aaf12f6 --- /dev/null +++ b/html_to_pdf/render.py @@ -0,0 +1,41 @@ +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() diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..ef6e8f1 --- /dev/null +++ b/setup.py @@ -0,0 +1,20 @@ +import setuptools + +with open("README.md", "r") as fh: + long_description = fh.read() + +setuptools.setup( + name="html_to_pdf", + version="0.2", + install_requires=[ + 'pyppeteer' + ], + author="Ugo Finnendahl", + author_email="ugo@finnendahl.de", + description="Convert html to pdf", + long_description=long_description, + long_description_content_type="text/markdown", + url="git.finnendahl.de", + packages=setuptools.find_packages(), + include_package_data=True +)