Skip to main content

Python bindings for fulgur — offline HTML/CSS to PDF conversion

Project description

pyfulgur

Python bindings for fulgur — an offline, deterministic HTML/CSS to PDF conversion library written in Rust.

Status

Alpha (v0.0.2). Core Engine / AssetBundle / PageSize / Margin / render_html API is available. Batch rendering, sandboxing, and template engine wiring are planned for later releases.

Install

Note: v0.0.2 is an early alpha. Pre-built wheels are not yet published to PyPI; install from source for now.

# From a checkout of the fulgur repository
pip install maturin
maturin develop --release -m crates/pyfulgur/Cargo.toml

Pre-built wheels for manylinux / macOS / Windows will be published in a later release.

Quick start

from pyfulgur import AssetBundle, Engine, PageSize

bundle = AssetBundle()
bundle.add_css("body { font-family: sans-serif; }")

engine = Engine(page_size=PageSize.A4, assets=bundle)
pdf_bytes = engine.render_html("<h1>Hello, world!</h1>")

with open("output.pdf", "wb") as f:
    f.write(pdf_bytes)

Builder style:

engine = (
    Engine.builder()
    .page_size(PageSize.A4)
    .landscape(False)
    .title("My doc")
    .assets(bundle)
    .build()
)
engine.render_html_to_file("<h1>Hi</h1>", "out.pdf")

API surface

  • Engine(**kwargs) / Engine.builder()EngineBuilder
  • Engine.render_html(html: str) -> bytes — render to PDF bytes (releases the GIL)
  • Engine.render_html_to_file(html: str, path: str | os.PathLike) -> None — render to a file
  • AssetBundle: add_css, add_css_file, add_font_file, add_image, add_image_file
  • PageSize: A4, LETTER, A3, custom(w_mm, h_mm), .landscape()
  • Margin: Margin(top, right, bottom, left), Margin.uniform(pt), Margin.symmetric(v, h), Margin.uniform_mm(mm)
  • Exceptions: FileNotFoundError, ValueError, pyfulgur.RenderError

Type stubs

pyfulgur ships PEP 561 type stubs (py.typed + __init__.pyi) so mypy, pyright, and IDEs can type-check call sites against the native API. Docstrings live in the Rust source and are exposed via __doc__ for help(), Jupyter ?, and griffe / mkdocstrings inspection.

Known limitation: blitz parse-error noise on stdout

The underlying blitz-dom parser writes non-fatal html5ever parse errors directly to the process's stdout via println!. These fire for browser-tolerated but technically invalid HTML — documents without a <!DOCTYPE>, missing <html>/<body> wrappers, or structural quirks that browsers silently auto-correct — and show up as ERROR: ... noise in Jupyter notebooks or any environment that captures stdout. The PDF bytes returned by render_html are not affected; only the caller's terminal is polluted.

pyfulgur intentionally does not redirect fd 1 from inside the binding: process-wide fd manipulation in a multi-threaded library context races with concurrent render_html calls from other threads (mixed suppress / non-suppress callers would silently lose stdout during a suppressed window). Correctness and parallelism take priority over cosmetic stdout cleanliness.

If you need clean stdout:

  • Redirect at the caller side with a Python contextlib.redirect_stdout for Python-level writes, or os.dup2 for fd-level writes. This keeps the fd manipulation scoped to your own call site where you can guarantee single-threaded use.
  • Run renders in a subprocess via multiprocessing (each worker has its own fd 1).
  • Use the fulgur CLI (which handles stdout isolation internally) invoked via subprocess.run when cold-start cost is acceptable.

A wrapper-style Python package that shells out to the fulgur CLI (clean stdout, parallel via process isolation, no native build required) is on the roadmap as a complement to this native binding.

Links

License

Licensed under either of Apache License, Version 2.0 or MIT license at your option.

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

pyfulgur-0.22.0.tar.gz (885.8 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

pyfulgur-0.22.0-cp39-abi3-win_amd64.whl (7.3 MB view details)

Uploaded CPython 3.9+Windows x86-64

pyfulgur-0.22.0-cp39-abi3-musllinux_1_2_x86_64.whl (7.7 MB view details)

Uploaded CPython 3.9+musllinux: musl 1.2+ x86-64

pyfulgur-0.22.0-cp39-abi3-musllinux_1_2_aarch64.whl (7.3 MB view details)

Uploaded CPython 3.9+musllinux: musl 1.2+ ARM64

pyfulgur-0.22.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.5 MB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ x86-64

pyfulgur-0.22.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (7.1 MB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ ARM64

pyfulgur-0.22.0-cp39-abi3-macosx_11_0_arm64.whl (6.8 MB view details)

Uploaded CPython 3.9+macOS 11.0+ ARM64

pyfulgur-0.22.0-cp39-abi3-macosx_10_12_x86_64.whl (7.1 MB view details)

Uploaded CPython 3.9+macOS 10.12+ x86-64

File details

Details for the file pyfulgur-0.22.0.tar.gz.

File metadata

  • Download URL: pyfulgur-0.22.0.tar.gz
  • Upload date:
  • Size: 885.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for pyfulgur-0.22.0.tar.gz
Algorithm Hash digest
SHA256 1f1d4df4fe9b7a0682d35c6416b835f1ef9e04b07b236f1f4992be121f76bddc
MD5 7493b0ee0d6180b550dcedc349c9313e
BLAKE2b-256 2dbee2cc85f151f92131305409867929a1901f770ed45e72b9b20be3e3ff7869

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyfulgur-0.22.0.tar.gz:

Publisher: release-python.yml on fulgur-rs/fulgur

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyfulgur-0.22.0-cp39-abi3-win_amd64.whl.

File metadata

  • Download URL: pyfulgur-0.22.0-cp39-abi3-win_amd64.whl
  • Upload date:
  • Size: 7.3 MB
  • Tags: CPython 3.9+, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for pyfulgur-0.22.0-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 68916f59f1c829ad55c1f306f842a7d3307dc1a0f22f63d31cfcc8596c651729
MD5 3e0d8b66604cede4ccf08de2296d9407
BLAKE2b-256 221d481b86d7dc39bc779812e50e45d913917b39b56a0a4454b5bc80a2398a39

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyfulgur-0.22.0-cp39-abi3-win_amd64.whl:

Publisher: release-python.yml on fulgur-rs/fulgur

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyfulgur-0.22.0-cp39-abi3-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pyfulgur-0.22.0-cp39-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 14e426c0b3beed0f69283a15f69924e60ce5c0f4f8fb49d2f69a050cfff16b75
MD5 4d63941eefcc923680225eaa9a18f017
BLAKE2b-256 aa49d31e9056efd7743c34a62b1e2ca3f035a97502096d68ee787af19a0ba548

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyfulgur-0.22.0-cp39-abi3-musllinux_1_2_x86_64.whl:

Publisher: release-python.yml on fulgur-rs/fulgur

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyfulgur-0.22.0-cp39-abi3-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for pyfulgur-0.22.0-cp39-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 56bc22ef6c5e631d18e33ceed8513772dd541f278a8fa0a04a3ac1f915b23238
MD5 fa88ba9683b62bbf2257a2950cbf0aa2
BLAKE2b-256 0451a5d5d1bba3e696db8231a09fe48efb1f5e71619aa765cd100c7ae8a3206e

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyfulgur-0.22.0-cp39-abi3-musllinux_1_2_aarch64.whl:

Publisher: release-python.yml on fulgur-rs/fulgur

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyfulgur-0.22.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pyfulgur-0.22.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1573b56ec86cffe7e80772b2aaef11c14fcdfac99b0ee207ee608d7fb013779d
MD5 efeac6fa7c67deb68bd589018e33dd2d
BLAKE2b-256 795d41d3fe6593c13d67174014393ba452a67894b0767d35b8f835507d8f36bf

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyfulgur-0.22.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release-python.yml on fulgur-rs/fulgur

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyfulgur-0.22.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pyfulgur-0.22.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 d2b0ab9df05a78fd56b8eef79c27e93e15d084bc59ff1ba47abbc9b885c2b797
MD5 85c84cdd0c1693babffd204a5197198c
BLAKE2b-256 e9600e145d23a3ac9988c196e3d4d17e21ee2e92bf63dcfc1a33f695fc8962f1

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyfulgur-0.22.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release-python.yml on fulgur-rs/fulgur

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyfulgur-0.22.0-cp39-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pyfulgur-0.22.0-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6a7965e6a9f4ec4f96df6a49b14bff87c2a994aa252a90915d80e30d909767ec
MD5 898dc5cf0beff906cac8295c04b33be3
BLAKE2b-256 8303827994a3207f86cea4f98c3e74502f64a2ea8aeb9010157cb0d932b16a20

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyfulgur-0.22.0-cp39-abi3-macosx_11_0_arm64.whl:

Publisher: release-python.yml on fulgur-rs/fulgur

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyfulgur-0.22.0-cp39-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for pyfulgur-0.22.0-cp39-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 31bbcb3f991f05a28dc950ef52c73e952ad3c1a1fd3c000d1242c8c0bc26741e
MD5 ad67578d842d6dc130ae009174bb933c
BLAKE2b-256 17549cbc7abb584c7093c7b9c7399dd2c1b3afc124cd9d75cb36d54040c0b71a

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyfulgur-0.22.0-cp39-abi3-macosx_10_12_x86_64.whl:

Publisher: release-python.yml on fulgur-rs/fulgur

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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