Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 28 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,14 @@
[Share on X](https://x.com/intent/tweet?text=PDFluent%20%E2%80%94%20a%20pure-Rust%20PDF%20SDK%20with%20bindings%20for%20Python%2C%20Node.js%2C%20.NET%2C%20Java%2C%20C%20and%20WebAssembly&url=https%3A%2F%2Fgithub.com%2Fpdfluent%2Fpdfluent-sdk) ·
[Share on LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fgithub.com%2Fpdfluent%2Fpdfluent-sdk)

![A statement printed to PDF, and the same statement after PDFluent redacted the
bank line, watermarked it and converted it to PDF/A-1B](docs/readme-hero.png)

<sup>Not a mock-up: `cargo run --example readme_hero` rebuilds this image from
[`docs/hero/`](docs/hero/), and both panels — and the picture itself — come out
of PDFluent's own rasterizer. The generator refuses to write it if the redacted
text is still extractable or `validate_pdfa()` disagrees.</sup>

## Install

```bash
Expand Down Expand Up @@ -60,7 +68,7 @@ fn main() -> Result<()> {
them. Every block on that page is a `// site:<name>` marker in
[`crates/pdfluent/examples/site_snippets.rs`](crates/pdfluent/examples/site_snippets.rs),
which CI compiles — an example that stops building breaks the build rather than
a reader's first attempt (#164, #247).
a reader's first attempt.

## How it compares

Expand All @@ -83,7 +91,7 @@ content streams, OCR over scanned pages.

**Forms.** AcroForm fill, flatten and read-back across every binding. XFA is
experimental and feature-gated behind `xfa-flatten`: dynamic layout, a FormCalc
interpreter with 90+ built-ins, and SOM path resolution
interpreter with the standard built-in functions, and SOM path resolution
(`xfa.form.subform[3].field[*]`). It is not production-supported.

**Documents.** Merge, split, insert, delete and rearrange pages; AES-256 (PDF
Expand Down Expand Up @@ -149,9 +157,14 @@ nothing in your clone, and it can be removed without touching the build. It is
listed here so nobody has to wonder later where an image in our README comes
from.

The two images that are not external — `docs/readme-hero.png` and
`docs/social-preview.png` — are ours outright. The hero is generated by
`cargo run --example readme_hero` from the HTML in `docs/hero/`; the document on
it is invented, and no customer document or test corpus appears in either.

## Licence

PDFluent is available under two licences, at your option:
**AGPL-3.0 or a commercial licence**, at your option:

| file | what it is |
|---|---|
Expand Down Expand Up @@ -183,8 +196,18 @@ If that is impossible for you — a closed surrounding product, a customer
contract, a legal department that will not accept copyleft in a shipped
binary — the commercial licence is the alternative. Under it you are not buying
features. You are buying the right not to publish your own source. It is what
[pdfluent.com/sdk/pricing](https://pdfluent.com/sdk/pricing) sells; enquiries go
to <[email protected]>.
[pdfluent.com/sdk/pricing](https://pdfluent.com/sdk/pricing) sells, yearly and
self-service, in four options: Commercial (per organisation), OEM Startup and
OEM (per product), and Priority support (an add-on). Enquiries go to
<[email protected]>.

**There is nothing to activate.** Since 6 September 2026 the compiled SDK
carries no tier check and reads no key: every capability is present in every
build, and nothing in the output marks whether a licence was bought. Earlier
builds still contained checks left over from the proprietary model while the
licence file of that time said there were none; this paragraph replaced the
sentence that was wrong, and it will be updated again the day it stops being
true.

### Not everything here is ours to license

Expand Down Expand Up @@ -223,5 +246,3 @@ entitled to read the terms they agreed to.
From 1 September 2026 `LICENSE` carried the two-licence explanation above and
the AGPL text sat beside it in `LICENSE-AGPL`. Since 7 September 2026 there is
one AGPL text, in `LICENSE`, and this section is the explanation.

Before 1.0.0 the SDK used licence keys and feature tiers; they were removed before the 1.0.0 release, and the published 1.0.0 packages contain no key check.
Loading
Loading