Skip to main content

Prince: convert HTML with CSS to PDF. Bundles the Prince engine - no separate install required.

Project description

prince-pdf

Python packaging of Prince, the HTML-with-CSS to PDF engine. The wheel bundles the Prince engine for the current platform: no separate installation, and neither installing the package nor launching the engine downloads anything. (Prince will access the network only if a document being converted references remote resources such as images or stylesheets.)

pip install prince-pdf
import prince_pdf

prince_pdf.convert("document.html", "document.pdf")

pdf_bytes = prince_pdf.html_to_pdf("<h1>Hello</h1>")        # in-memory
pdf_bytes = prince_pdf.markdown_to_pdf("# Hello")           # Prince 17+

The package also puts prince on PATH, so the full command-line interface works as documented:

prince document.html -o document.pdf

python -m prince_pdf also works anywhere the package is importable, even when the script directory is not on PATH.

Names

One package, three names: install it as prince-pdf, import it as prince_pdf, run it as prince. Note that pip install prince installs an unrelated statistics library, not this package.

Files vs. strings

convert() always interprets strings as filesystem paths, never as document content. To convert an HTML string, use html_to_pdf().

The *_to_pdf functions pipe the document through the engine's standard input, so the engine never sees a filename: relative URLs in the document are resolved against the current working directory, not against wherever the content originally came from. If a string derived from /tmp/report/index.html references images/chart.svg, pass the original location as a base URL:

prince_pdf.html_to_pdf(html, args=("--baseurl", "/tmp/report/"))

Python API

The package ships inline type annotations (py.typed).

  • prince_pdf.convert(inputs, output=None, args=()) — convert one or more files (HTML, XML, SVG; Markdown with Prince 17+; a list is merged into one PDF), with the format detected from each file. Extra command-line options go in args, e.g. args=("--javascript",). Returns the output path, or the PDF as bytes when output is None.
  • prince_pdf.html_to_pdf(html, output=None, args=()), prince_pdf.markdown_to_pdf(markdown, ...), prince_pdf.xml_to_pdf(xml, ...) — convert a document given as a string or bytes, without temporary files. Markdown input requires a bundled Prince 17 or later (pip install --pre prince-pdf while 17 is in pre-release); on older engines markdown_to_pdf raises an error saying exactly that.
  • Failures raise PrinceError carrying .returncode, raw .stderr, and .messages — the engine's diagnostics parsed into Message(severity, location, text) tuples. Engine warnings during successful conversions are emitted on the "prince_pdf" logger.
  • prince_pdf.run(*args, **kwargs) — a thin subprocess.run() wrapper for raw engine access. It does not apply the error handling or diagnostic parsing that convert() provides: nonzero exits do not raise (pass check=True for CalledProcessError), and output is not captured unless requested.
  • prince_pdf.command(*args) — the argv list that would be run, for use with external process tooling (same caveats as run()).
  • prince_pdf.executable() — path of the bundled engine binary.
  • prince_pdf.version() — the engine's version string.
  • prince_pdf.license() — the default license-file location inside the bundle (prefer PRINCE_LICENSE_FILE, which survives reinstalls).

Licensing

Prince may be used without a purchased license under the conditions in the included Prince License Agreement (LICENSE-Prince.txt); unlicensed output carries a watermark on the first page. Commercial use requires an appropriate license from YesLogic. Point the engine at your license file with the PRINCE_LICENSE_FILE environment variable (preferred — it survives reinstalls), or install it at the path returned by prince_pdf.license(). The Python wrapper code itself is MIT-licensed (LICENSE).

Troubleshooting

  • Missing or wrong fonts in minimal containers: the wheel bundles the engine but uses the system's fonts. Install some, e.g. apt-get install fonts-dejavu fontconfig (Debian/Ubuntu) or apk add fontconfig ttf-dejavu (Alpine).
  • libfontconfig.so.1: cannot open shared object file (Linux x86-64): install the system fontconfig library, e.g. apt-get install libfontconfig1 — installing fonts as above also provides it.
  • Watermark on the first page: expected without a license — see Licensing above.
  • Documents referencing remote resources: fetching http(s) images or stylesheets requires network access at conversion time; self-contained local files need none.
  • Diagnosing failures: PrinceError.stderr carries the engine's warnings and errors; add --verbose (or -o plus --log=FILE) for more detail.

Supported platforms

Linux x86-64 and ARM64 (glibc), musl/Alpine ARM64, macOS 10.13+ (universal), Windows x64 and ARM64. On Linux x86-64 the engine additionally needs the system fontconfig library — in minimal containers, apt-get install libfontconfig1 (it usually arrives with fonts anyway).


Maintainer documentation — how wheels are built, verified, and released — is in RELEASING.md.

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

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

prince_pdf-16.2.0.post1-py3-none-win_arm64.whl (12.2 MB view details)

Uploaded Python 3Windows ARM64

prince_pdf-16.2.0.post1-py3-none-win_amd64.whl (13.9 MB view details)

Uploaded Python 3Windows x86-64

prince_pdf-16.2.0.post1-py3-none-musllinux_1_2_aarch64.whl (14.1 MB view details)

Uploaded Python 3musllinux: musl 1.2+ ARM64

prince_pdf-16.2.0.post1-py3-none-manylinux_2_25_aarch64.whl (13.3 MB view details)

Uploaded Python 3manylinux: glibc 2.25+ ARM64

prince_pdf-16.2.0.post1-py3-none-manylinux_2_17_x86_64.whl (14.6 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ x86-64

prince_pdf-16.2.0.post1-py3-none-macosx_10_13_universal2.whl (25.0 MB view details)

Uploaded Python 3macOS 10.13+ universal2 (ARM64, x86-64)

File details

Details for the file prince_pdf-16.2.0.post1-py3-none-win_arm64.whl.

File metadata

File hashes

Hashes for prince_pdf-16.2.0.post1-py3-none-win_arm64.whl
Algorithm Hash digest
SHA256 fb40ae967046d1ab897590d369a61e28efec451aa74a2bfe837e338b1e342d15
MD5 fece0f53f4c9c07f62f1525bdcd6ee84
BLAKE2b-256 8d9581d2b2cfdeecaeb08035fe2db62b89c5081e9d51900a1076d36773b83fcb

See more details on using hashes here.

Provenance

The following attestation bundles were made for prince_pdf-16.2.0.post1-py3-none-win_arm64.whl:

Publisher: wheels.yml on yeslogic/prince-python

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

File details

Details for the file prince_pdf-16.2.0.post1-py3-none-win_amd64.whl.

File metadata

File hashes

Hashes for prince_pdf-16.2.0.post1-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 8aa6ab0eb7693548d147153795c17f50419944177dc635f9b01d0edae1f6fbf5
MD5 87ca437b99de5f7e1fc5b9642281b47d
BLAKE2b-256 3f5ece0c5c02fe6031d9533e806013c64f197707e1232152d5acfe1d62036f82

See more details on using hashes here.

Provenance

The following attestation bundles were made for prince_pdf-16.2.0.post1-py3-none-win_amd64.whl:

Publisher: wheels.yml on yeslogic/prince-python

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

File details

Details for the file prince_pdf-16.2.0.post1-py3-none-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for prince_pdf-16.2.0.post1-py3-none-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 07d7d752c31a747808c5af19ab6051fb429fb403f1e0332ec50329366e3e12a0
MD5 4b4168d19f495933a90b004f335c17aa
BLAKE2b-256 5e8f512243b30c9c5127f4db88d74bf8e29a4e30b60c2a228a80beccf5a8d680

See more details on using hashes here.

Provenance

The following attestation bundles were made for prince_pdf-16.2.0.post1-py3-none-musllinux_1_2_aarch64.whl:

Publisher: wheels.yml on yeslogic/prince-python

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

File details

Details for the file prince_pdf-16.2.0.post1-py3-none-manylinux_2_25_aarch64.whl.

File metadata

File hashes

Hashes for prince_pdf-16.2.0.post1-py3-none-manylinux_2_25_aarch64.whl
Algorithm Hash digest
SHA256 693084876236d43543149b090971958b757497b6af4eaf44b6f03014b02796d2
MD5 05036c78dc44f20a9c798fcc5753c1b1
BLAKE2b-256 0d4d393afce44002de62bd5b2f3460483ef3bee845bd6b1e7293aa99cfd2275f

See more details on using hashes here.

Provenance

The following attestation bundles were made for prince_pdf-16.2.0.post1-py3-none-manylinux_2_25_aarch64.whl:

Publisher: wheels.yml on yeslogic/prince-python

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

File details

Details for the file prince_pdf-16.2.0.post1-py3-none-manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for prince_pdf-16.2.0.post1-py3-none-manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 b73b322fdc11541762aa3fda5c0231b9e5f5b97896adc611dc35c9474ecae590
MD5 45deed0ed5c765ffbca1fefaaa7a3a50
BLAKE2b-256 a31e5bb1a8b4c8143d8c76664eaab4a2e6eec26de319f546e2b5873e672fe21b

See more details on using hashes here.

Provenance

The following attestation bundles were made for prince_pdf-16.2.0.post1-py3-none-manylinux_2_17_x86_64.whl:

Publisher: wheels.yml on yeslogic/prince-python

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

File details

Details for the file prince_pdf-16.2.0.post1-py3-none-macosx_10_13_universal2.whl.

File metadata

File hashes

Hashes for prince_pdf-16.2.0.post1-py3-none-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 66bbd7404c5b3a27cf2813030c8249aceca2971eefcd0d34fd9c912537da9207
MD5 32a21b870bd264cba6eda4ad14ea004b
BLAKE2b-256 e90d741bc79b6323da29354ceecd866cfebc179904ab637fd3fd82f08885aa75

See more details on using hashes here.

Provenance

The following attestation bundles were made for prince_pdf-16.2.0.post1-py3-none-macosx_10_13_universal2.whl:

Publisher: wheels.yml on yeslogic/prince-python

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