Skip to content

PDFluent SDK 1.2.0

Latest

Choose a tag to compare

@jasperdew jasperdew released this 22 Oct 06:49

PDFluent SDK 1.2.0

Release date: 2026-10-22 · Tag: v1.2.0 · Commit: bd658c93d

Redaction that removes content. Faster text and Markdown extraction. Table quality you can check. No system libraries to install. Sandboxed form scripts. New APIs in every binding.

Redacted means removed

PDFluent redaction removes the redacted content from the file instead of covering it. The SDK takes text, images and shadings under a redaction area out of the page content, and after a full save the redacted text is absent from the file bytes and from every decoded stream. Where the library cannot be sure it removed everything, it refuses and says so.

Limits: the SDK refuses an undecodable stream instead of half-redacting it; JBIG2 returns unsupported; it flattens an XFA form first or refuses it with xfa-redaction-needs-flatten.

New in 1.2.0: search redaction also removes quoting text from notes and pop-ups, rich text (/RC), form values, bookmark titles, named destinations, attachment names and descriptions, alternate text (/Alt, /ActualText), page labels and XMP packets.

If you redacted documents with 1.1.0 or earlier, update to 1.2.0 and redact the originals again.

Faster extraction

On one c3-standard-8 (8 vCPU, no GPU), PDFluent 1.2.0 quality=fast converts 50.2 pages per second against 42.9 for PDFluent 1.1.0, measured in the same run on the same 75 single-page PDFs (+17%). On one thread: 50.6 against 42.9 (+18%). p95 per page: 40 ms against 50 ms. Single pages, fast only.

Text extraction in PDFluent 1.2.0 is about twice as fast as in 1.1.0 on multi-page documents: 165 against 85 pages per second on one CPU (median document 0.106 s against 0.207 s; p95 0.42 s against 0.84 s). Measured in one run on one c3-standard-8 over 40 public arXiv papers (1,050 pages). Text extraction, quality=fast, one CPU, scientific papers.

Markdown extraction (quality=fast): 61.4 against 45.2 pages per second on one CPU (median document 0.259 s against 0.359 s).

quality=balanced is not measurably faster in 1.2.0 (680 vs 695 ms per page).

Quality you can check

Highest average score across 19 measures, holdout half: PDFluent 1.2.0 quality=balanced with the table model 0.721, pymupdf4llm 1.28.2 0.693, Docling 2.126.0 0.672 (competitors measured on 17 October 2026). Higher than Docling on 16 of 19 measures, higher than pymupdf4llm on 13 of 19. No change from 1.1.0 (0.721 in both).

Table structure (TEDS), holdout, balanced with the table model, paired per-document difference with 95% bootstrap interval: FinTabNet +0.118 [+0.070; +0.165] vs Docling 2.126.0 and +0.089 [+0.041; +0.134] vs pymupdf4llm 1.28.2; PubTables-1M +0.077 [+0.046; +0.113] vs Docling and +0.093 [+0.063; +0.125] vs pymupdf4llm. The table model was trained on data that overlaps part of these datasets.

Nothing extra to install

SDK 1.2.0 is written in Rust. The default build of the pdfluent crate and of every binding has no system libraries to install and nothing to bundle.

The PDFluent SDK runs inside your own process on your own machine. It needs no cloud service, no licence server and no activation, and its default build has no HTTP client. Optional features (cloud OCR, model download, timestamping) make requests.

Form scripts stay contained

In SDK 1.2.0 the scripts inside XFA and AcroForm forms run in a WebAssembly sandbox. The sandbox module has no file, network or environment access.

The SDK fills XFA forms: it reads a form's fields, sets their values and saves; the values are in the file when you open it again. You can also flatten a form to a regular PDF.

AcroForm recalculate() (cargo feature calculate) runs calculation scripts in /CO order and writes results to field values and fresh appearances. XFA open_interactive and commit_value fire change and click scripts.

Bindings and API

  • text_with_layout in every binding: Python Document.text_with_layout(), Node and WebAssembly textWithLayout(), .NET TextWithLayout(), Java textWithLayout().
  • Image placement: image_placements, set_image_rect, replace_image, remove_image in the C ABI, Python, Node, WebAssembly, .NET and Java.
  • Java: typed extractBlocks() and pageImages(int); .NET and Java: document-level Redact and SearchCount; Node: typed findTextTyped, replaceTextTyped, replaceMatchesTyped.

Install and upgrade

cargo add pdfluent
pip install --upgrade pdfluent
npm install @pdfluent/node
npm install @pdfluent/sdk-wasm
dotnet add package PDFluent

Java: the 1.2.0 artifacts follow shortly on the PDFluent Maven repository at https://maven.pdfluent.com.

Licence: AGPL-3.0-only or the PDFluent Commercial Licence, at your option.

Upgrading: QuickJsRuntime and rquickjs_backend are deprecated aliases of SandboxedRuntime, removal in 2.0. Java PdfluentDocument is deprecated in favour of PdfDocument.

Measurement notes

  • Machine: one c3-standard-8 (8 vCPU, no GPU). Speed figures: 21 October 2026.
  • Quality: holdout half, 21 October 2026; pymupdf4llm 1.28.2 and Docling 2.126.0 measured on 17 October 2026.
  • Structured extraction (Markdown, blocks) is Preview.
  • Markdown footnote: the Markdown output differs between the two versions on 20 of the 40 documents (a few hundred bytes), because 1.2.0 also contains extraction changes; the timings therefore compare slightly different output.
  • The table model was trained on data that overlaps part of these datasets.