---
title: "WholeDoc Bench: Whole-document parsing benchmark | Nutrient"
canonical_url: "https://www.nutrient.io/blog/wholedoc-bench-parsing-benchmark/"
md_url: "https://www.nutrient.io/blog/wholedoc-bench-parsing-benchmark.md"
last_updated: "2026-11-10T17:35:30.132Z"
description: "WholeDoc Bench scores 13 document parsers on whole documents, from the first page to the last, and shows each score next to its price per page."
---

# Introducing WholeDoc Bench: A benchmark for parsing whole documents

**TL;DR**

WholeDoc Bench is a new benchmark that scores document parsers on whole documents, from the first page to the last, in seven areas. In Season 1, Nutrient Agentic has the highest score, 86.1 at 1.8¢ per page, and nothing on the board that costs more scores higher. The best frontier model scores 67.1 at about 18¢ per page. We make one of the parsers on the board, so the code, the options we used for each parser, and a sample of the test documents are public.

A parser can read every page of a document correctly and still get the document wrong. If a table runs across five pages, it can come back as five separate tables. If a sentence breaks at the bottom of a page, it can come back with the page number stuck in the middle. These errors happen between pages, so a benchmark that scores one page at a time never sees them.

We built WholeDoc Bench to catch them. It scores what a parser returns for the whole document, across seven areas. Today, we’re releasing Season 1: 13 parsers, run in 19 settings. A setting is one parser in one mode or at one effort level. For example, Nutrient runs in three modes and Claude Fable 5.1 at two effort levels, so together they count as five settings. Each setting that has a list price shows it next to its score. [See the leaderboard →](https://www.nutrient.io/benchmarks/parse/)

## What each budget buys

Each shape is one setting. Its height shows the overall score, and its place from left to right shows the price per page. The green circles are the three modes of the Nutrient Data Extraction API, the diamonds are models from frontier labs, and the squares are document APIs. The curve shows the best score you can get at each price, so you can read the chart from left to right as a budget.

At the low end, Nutrient Structure reads text and basic layout without AI, for scans and simple documents. It costs 0.15¢ per page and scores 39.4, and it doesn’t read charts or barcodes. Databricks is the next step up, with 60.4 at about 0.45¢ per page. Nutrient Understand scores 80.8 at 0.9¢, and Nutrient Agentic scores 86.1 at 1.8¢, the highest score of all 19 settings.

Past 1.8¢, the curve goes flat, because no setting that costs more scores higher. The best frontier model scores 67.1 at about 18¢ per page, which is about 10 times the price of Nutrient Agentic. On this set, paying more didn’t buy a higher score.

Prices are list prices on 5 November 2026, without volume discounts. The [full leaderboard](https://www.nutrient.io/benchmarks/parse/) also lists the free open source tools and shows a score in each of the seven areas.

We make one of the parsers on this board, so skepticism is fair. That’s why the code, the options we used for each parser, and a sample of the test documents are public: You can see how each score is made and run the benchmark yourself.

## Why whole documents?

Our customers send us documents — such as bank statements, invoices, delivery notes, and reports — and many of them run for several pages. In that work, we often see errors right at a page break.

Take this bank statement from our test set. It has six pages and one table of 222 transactions that runs across five of them. We generated the file ourselves, so we know exactly what a correct parser must return: one table.

Fifteen of the 19 settings we tested didn’t return it as one table. Nutrient Understand and Nutrient Agentic were among the four that did. With the other 15, the software that adds up the transactions gets the table in pieces and has to guess how they fit together.

Good parsing benchmarks already exist, and we learned a lot from them. [ParseBench](https://www.parsebench.ai/) by LlamaIndex and [OmniDocBench](https://github.com/opendatalab/OmniDocBench) show where parsers fail on tables, charts, and layout, and our own ParseBench score is on our [benchmarks page](https://www.nutrient.io/benchmarks/parse/). But most of them score one page or one table at a time.

A few newer ones — such as READoc, MPDocBench-Parse, and Dr. DocBench — do score whole documents, and some of them check that content cut by a page break gets joined again. We haven’t found one that also tests the opposite trap, where two paragraphs on two pages look like one but must stay apart, or one that scores charts, text styles, and barcodes across whole documents. Extraction benchmarks such as [ExtractBench](https://www.extractbench.ai/) use long documents, but they check fields, not the full text and layout.

WholeDoc Bench covers that gap with seven areas, scored on whole documents.

## Seven areas, one score

Each area answers one question about the parser’s output.

| Area                 | The question                                                                               | A typical error                                                |
| -------------------- | ------------------------------------------------------------------------------------------ | -------------------------------------------------------------- |
| Text                 | Is every word there, spelled as printed?                                                   | “Müller” comes out as “Muller.”                                |
| Reading order        | Does the text come out in the order a person reads it?                                     | Two columns get mixed line by line.                            |
| Structure            | Do headings, paragraphs, captions, and footnotes keep their shape?                         | A paragraph that continues on the next page is cut in two.     |
| Tables               | Is every cell in the right row and column, even when the table continues on the next page? | A table that runs across five pages comes back in five pieces. |
| Barcodes             | Can the parser read what each barcode contains?                                            | A code is skipped, or one character is wrong.                  |
| Charts               | Does the chart become the right data points, series, type, and title?                      | The parser invents values that aren’t in the chart.            |
| Position on the page | Does each item, and each table cell, get the right box on the page?                        | A parser draws one box around the whole page.                  |

Some documents also hide traps: misspelled words, rare accents, and near-miss names that must come out exactly as printed. A parser must not “correct” them, because a fixed typo is still a changed value. The same goes for part numbers: When “M8x40” becomes “M8×40,” it no longer matches the catalog. Other documents have page breaks where content must be joined or kept apart.

The overall score is the plain average of the seven areas, from 0 to 100, so each area counts for one-seventh.

## Where parsers still break

The two biggest failures both happen at a page break.

**Tables that cross pages.** Forty-four documents in the test have a table that continues across a page break. On those, 15 of the 19 settings returned the table as one table in fewer than one case in five. Four settings got it right almost every time: Nutrient Understand, Nutrient Agentic, Reducto, and LlamaParse Agentic Plus.

In the export invoice below, the table runs across four pages, with the same header printed at the top of each one. A correct parser returns one table with one header and 183 rows.

**Text that crosses pages.** In a scanned report from the test, one sentence runs from page 3 to page 4 and must be joined. At another page break in the same report, a paragraph ends on page 1 and a new one starts on page 2, so the two must stay apart. Only two of the 19 settings got both right: Nutrient Agentic and Nutrient Understand.

## How we built it

Every score comes from written rules, and the rules are public. Here’s how we chose the documents, built the answer keys, and ran each parser.

**The documents.** The set has 481 documents with 634 pages, in more than 30 languages. We chose documents with the problems that break parsing in real work, such as tables that cross pages, scans, charts, and barcodes. Nutrient’s parser wasn’t trained on them.

**What’s public, and what stays private.** A sample of 10 documents, with their answer keys, is public. Use it to test any parser, see how the benchmark grades each document, and extend it with documents of your own. The main test set stays private. We use it to validate performance independently and to reduce the risk of benchmark contamination or overfitting. The leaderboard scores come from the full set.

**The answer keys.** An answer key says what a correct parser must return for a document. For real documents, three AI models from OpenAI, Anthropic, and Google read each page, and a value goes in only when at least two of them read it the same way. A person then resolves every disagreement, corrects the draft, and approves it. For generated documents, the key comes straight from the generator. If you find a mistake, tell us, and we’ll fix it and score every parser again.

**The scoring.** Code applies the same written rules to every parser, and no AI model hands out points. Some rules make sure only correct output earns points: One box drawn around the whole page scores 0, and a parser can’t pass the reading-order test by repeating text. A document that fails scores 0 and stays in the average, so we don’t skip the hard ones. A parser that fails on more than 5 percent of the documents is listed after the others.

**How we ran each parser.** Nutrient runs through its public API, the same one our customers use. The options we used for every other document API are in the repository. Table merging across pages is on for LlamaParse and Reducto, and chart extraction is on wherever a tool offers it. Cloud document APIs get the whole file, except AWS Textract, which takes one page per request.

Frontier models from OpenAI and Anthropic run at medium and high effort, one page per request, with our layout prompt. When a page ends with a paragraph, list item, or table, the next request quotes it, so the model can join content across the break.

**The prices.** For each cloud parser, the leaderboard shows the list price per page on the day of the run. The price never changes the rank. It’s there so you can see what each score costs.

## Don’t take our word for it

A benchmark shows how parsers do on our documents, and yours may be different. Cloud parsers also change often, and small gaps between scores can be noise, so we date every result, keep the options for every parser in the repository, and make it easy to run the test yourself.

The code is [on GitHub](https://github.com/PSPDFKit-labs/wholedoc-bench) under Apache 2.0, with 13 parsers ready to go. Download the [public sample from Hugging Face](https://huggingface.co/datasets/nutrientdocs/wholedoc-bench-sample), and three commands take you from documents to a report:

```bash

uvx --from huggingface_hub hf download nutrientdocs/wholedoc-bench-sample --repo-type dataset --revision v1 --local-dir wholedoc-bench-sample
uv run wholedoc-bench run --provider [parser] --corpus wholedoc-bench-sample --out runs/[parser]
uv run wholedoc-bench score --corpus wholedoc-bench-sample --predictions runs/[parser] --results results
uv run wholedoc-bench report --results results

```

You can also help in two ways:

- **Score your own parser.** Bring its output files for the sample documents and a short claims file with its version and options. Your row shows up in your own report, marked “(imported).” The official leaderboard ranks only runs the benchmark made itself.

- **Tell us we’re wrong.** If a parser would score higher with other options, open a pull request that adds them to the parser’s adapter and configuration, and we’ll run it again. If a rule is wrong, open an issue.

## What’s next

WholeDoc Bench comes in seasons, and Parse is its first track. Upcoming seasons will add more documents and more file types, such as Word and PowerPoint files. The full method is in our [paper](https://github.com/PSPDFKit-labs/wholedoc-bench/blob/main/paper.pdf), and every number we publish carries the date of its run.

## Try it on your own documents

Every Nutrient score in this post comes from the same Data Extraction API you can use today. Try it on your own files to get the text, the tables, the charts, and the position of every item on the page.

**[See the full leaderboard →](https://www.nutrient.io/benchmarks/parse/)**

## Questions you’ll probably ask

#### Can I trust a benchmark from a vendor?

We chose the documents, and we’re on the leaderboard, so we made the method checkable. Code scores every parser with the same written rules, and failures count as zero. The code, the options for each parser, and a sample of the documents are public, and you can run the benchmark yourself on the sample. The main test set stays private to reduce the risk of benchmark contamination or overfitting.

#### Did you train on the test set?

No. Nutrient’s parser wasn’t trained on these documents. The answer keys are drafted by AI models from three other companies, and a person checks and approves every one.

#### Isn’t one page per request unfair to frontier models?

It can cost them points on content that crosses pages. When a page ends with a paragraph, list item, or table, the next request quotes it, so the model can join content across the break. If you have a fairer setup, open a pull request and we’ll run it.

#### Why are barcodes one of the seven areas?

Reading barcodes is part of reading a document. Labels, invoices, delivery notes, and forms often carry data in barcodes and QR codes, and the software that uses the output needs that data too. Like every area, barcodes count for one-seventh of the overall score.

#### Can I add my parser?

Yes. Run the benchmark on your parser’s output for the sample documents, and you get your own report, with your row marked “(imported).” For the official leaderboard, the benchmark has to make the run itself. That takes an adapter and a configuration for your parser, so open a pull request.
---

## Related pages

- [The business case for accessibility: Five ways it drives enterprise value](/blog/5-ways-accessibility-drives-enterprise-value.md)
- [Accessibility Untangled Why It Matters Guide](/blog/accessibility-untangled-why-it-matters-guide.md)
- [Adobe Pdf Embed Api Alternatives](/blog/adobe-pdf-embed-api-alternatives.md)
- [Adobe Pdf Services Api Alternatives](/blog/adobe-pdf-services-api-alternatives.md)
- [Advanced Techniques For React Native Ui Components](/blog/advanced-techniques-for-react-native-ui-components.md)
- [`vector_store` holds your indexed documents (see the multimodal RAG post](/blog/agentic-rag.md)
- [Ai Assistant Agent Governance](/blog/ai-assistant-agent-governance.md)
- [How to build an AI agent for contract redlining against a compliance playbook](/blog/ai-contract-redlining-compliance-playbook.md)
- [Ai Document Automation Extraction To Action](/blog/ai-document-automation-extraction-to-action.md)
- [Ai Document Workflows Ocr Compliance Heavy Teams](/blog/ai-document-workflows-ocr-compliance-heavy-teams.md)
- [Ai Legal Assistant Document Authoring](/blog/ai-legal-assistant-document-authoring.md)
- [Ai Schema Generator Document Extraction](/blog/ai-schema-generator-document-extraction.md)
- [Amazon Textract Alternatives](/blog/amazon-textract-alternatives.md)
- [Start (clears any prior buffer), navigate the document, then stop into a file.](/blog/android-faster-pdf-rendering.md)
- [Android Pdf Out Of Memory Handling](/blog/android-pdf-out-of-memory-handling.md)
- [Angular File Viewer Pdf Image Office Files](/blog/angular-file-viewer-pdf-image-office-files.md)
- [Approval Workflow Software](/blog/approval-workflow-software.md)
- [Approvals Matrix](/blog/approvals-matrix.md)
- [Apryse To Nutrient Migration](/blog/apryse-to-nutrient-migration.md)
- [Auto Tagging And Document Accessibility In Dotnet Sdk](/blog/auto-tagging-and-document-accessibility-in-dotnet-sdk.md)
- [Simple PII redaction.](/blog/automated-pii-removal.md)
- [Automation Platform](/blog/automation-platform.md)
- [Azure Document Intelligence Alternatives](/blog/azure-document-intelligence-alternatives.md)
- [schema.py.](/blog/bank-statement-to-excel.md)
- [Barcode Ocr](/blog/barcode-ocr.md)
- [Best Ai Document Workflow Platforms](/blog/best-ai-document-workflow-platforms.md)
- [Best Csharp Pdf Library](/blog/best-csharp-pdf-library.md)
- [Best Document Ai Platforms](/blog/best-document-ai-platforms.md)
- [Best Document Classification Platforms](/blog/best-document-classification-platforms.md)
- [Best document parser for RAG: LlamaParse vs. Unstructured vs. Reducto vs. Nutrient](/blog/best-document-parser-llamaparse-unstructured-reducto.md)
- [Best Document Parsing Apis](/blog/best-document-parsing-apis.md)
- [Best Document Viewers](/blog/best-document-viewers.md)
- [Best Healthcare Workflow Software Compared](/blog/best-healthcare-workflow-software-compared.md)
- [Best Invoice Data Extraction Apis](/blog/best-invoice-data-extraction-apis.md)
- [Best Llm Document Understanding Platforms](/blog/best-llm-document-understanding-platforms.md)
- [Best Multilingual Ocr Software](/blog/best-multilingual-ocr-software.md)
- [Best Pdf Accessibility Apis](/blog/best-pdf-accessibility-apis.md)
- [Best Pdf Parsers For Rag](/blog/best-pdf-parsers-for-rag.md)
- [Best Pdf Processing Apis](/blog/best-pdf-processing-apis.md)
- [Best Pdf Viewer Apis](/blog/best-pdf-viewer-apis.md)
- [Best Salesforce Document Generation Apps](/blog/best-salesforce-document-generation-apps.md)
- [Best Secure Document Collaboration Platforms](/blog/best-secure-document-collaboration-platforms.md)
- [or](/blog/best-vue-pdf-viewers.md)
- [Bpm Guide](/blog/bpm-guide.md)
- [Bpm Tools](/blog/bpm-tools.md)
- [Build Vs Buy Document Extraction](/blog/build-vs-buy-document-extraction.md)
- [Business Automation](/blog/business-automation.md)
- [Business Process Reengineering Bpr Definition](/blog/business-process-reengineering-bpr-definition.md)
- [Capex Vs Opex](/blog/capex-vs-opex.md)
- [Capital Expenditure Request Form](/blog/capital-expenditure-request-form.md)
- [The CEO’s AI playbook: Why decision architecture beats model selection](/blog/ceo-ai-playbook-decision-architecture.md)
- [1. Extract and chunk the PDF.](/blog/chat-with-pdf.md)
- [Complete Guide To Pdfjs](/blog/complete-guide-to-pdfjs.md)
- [Construction Document Data Extraction](/blog/construction-document-data-extraction.md)
- [Convert One Drive Files To Pdf In Sharepoint](/blog/convert-one-drive-files-to-pdf-in-sharepoint.md)
- [Create And Edit Pdfs In Flutter](/blog/create-and-edit-pdfs-in-flutter.md)
- [Create Pdfs With React](/blog/create-pdfs-with-react.md)
- [Creating A Document Scanner With Ocr In Python](/blog/creating-a-document-scanner-with-ocr-in-python.md)
- [Creating And Filling Pdf Forms Programmatically In Javascript](/blog/creating-and-filling-pdf-forms-programmatically-in-javascript.md)
- [The CTO’s AI playbook: Why accountability architecture beats orchestration](/blog/cto-ai-playbook-accountability-architecture.md)
- [Nutrient document decision: Why we built a decision model for documents](/blog/decision-model-for-documents.md)
- [Digital Signatures](/blog/digital-signatures.md)
- [Digital Workflow Automation](/blog/digital-workflow-automation.md)
- [Docling Alternatives](/blog/docling-alternatives.md)
- [Document Ai Vs Ocr](/blog/document-ai-vs-ocr.md)
- [Document Authoring Audit Trail](/blog/document-authoring-audit-trail.md)
- [Document Authoring Spreadsheet Editor](/blog/document-authoring-spreadsheet-editor.md)
- [Document Extraction Confidence Scores](/blog/document-extraction-confidence-scores.md)
- [Document Extraction For Underwriting](/blog/document-extraction-for-underwriting.md)
- [Document Viewer](/blog/document-viewer.md)
- [Document Watermarking](/blog/document-watermarking.md)
- [Debian/Ubuntu.](/blog/easyocr-vs-tesseract-python.md)
- [Electronic signature API: How to sign PDFs programmatically](/blog/electronic-signature-api.md)
- [Emerging threats: Your logging system may be an agentic threat vector](/blog/emerging-threats-your-logging-system.md)
- [Q3 sales](/blog/excel-to-markdown-for-llms.md)
- [Extend Alternatives](/blog/extend-alternatives.md)
- [Extract Patient Data On Premises](/blog/extract-patient-data-on-premises.md)
- [Extract Tables From Complex Pdfs](/blog/extract-tables-from-complex-pdfs.md)
- [Create and activate a virtual environment (recommended).](/blog/extract-text-from-pdf-pymupdf.md)
- [app.py](/blog/extract-text-from-pdf-using-python.md)
- [Stricter thresholds for fields that move money. Calibrate on your own sample.](/blog/extraction-hallucination-detection.md)
- [Fillable Pdf](/blog/fillable-pdf.md)
- [Google Document Ai Alternatives](/blog/google-document-ai-alternatives.md)
- [Handwriting Recognition Ocr Vlm](/blog/handwriting-recognition-ocr-vlm.md)
- [How To Add Digital Signature To Pdf Using React](/blog/how-to-add-digital-signature-to-pdf-using-react.md)
- [How To Build A Dotnet Maui Pdf Viewer](/blog/how-to-build-a-dotnet-maui-pdf-viewer.md)
- [How To Build A Flutter Pdf Viewer](/blog/how-to-build-a-flutter-pdf-viewer.md)
- [or](/blog/how-to-build-a-javascript-pdf-viewer-with-pdfjs.md)
- [or](/blog/how-to-build-a-javascript-pdf-viewer.md)
- [How To Build A Nextjs Pdf Viewer](/blog/how-to-build-a-nextjs-pdf-viewer.md)
- [How To Build A Powerpoint Viewer Using Javascript](/blog/how-to-build-a-powerpoint-viewer-using-javascript.md)
- [Using Yarn](/blog/how-to-build-a-react-excel-viewer.md)
- [How To Build A React Native Pdf Viewer](/blog/how-to-build-a-react-native-pdf-viewer.md)
- [How To Build A React Powerpoint Viewer](/blog/how-to-build-a-react-powerpoint-viewer.md)
- [Using Yarn](/blog/how-to-build-a-react-word-viewer.md)
- [How To Build A Reactjs File Viewer](/blog/how-to-build-a-reactjs-file-viewer.md)
- [How To Build A Reactjs Pdf Viewer With React Pdf](/blog/how-to-build-a-reactjs-pdf-viewer-with-react-pdf.md)
- [or](/blog/how-to-build-a-reactjs-pdf-viewer.md)
- [How To Build A Reactjs Viewer With Pdfjs](/blog/how-to-build-a-reactjs-viewer-with-pdfjs.md)
- [How To Build A Vuejs Pdf Viewer With Pdfjs](/blog/how-to-build-a-vuejs-pdf-viewer-with-pdfjs.md)
- [How To Build A Vuejs Pdf Viewer](/blog/how-to-build-a-vuejs-pdf-viewer.md)
- [How To Build An Android Pdf Viewer](/blog/how-to-build-an-android-pdf-viewer.md)
- [How To Build An Angular Pdf Viewer With Ng2 Pdf Viewer](/blog/how-to-build-an-angular-pdf-viewer-with-ng2-pdf-viewer.md)
- [How To Build An Angular Pdf Viewer With Pdfjs](/blog/how-to-build-an-angular-pdf-viewer-with-pdfjs.md)
- [How To Convert Docx To Pdf Using Javascript](/blog/how-to-convert-docx-to-pdf-using-javascript.md)
- [How To Convert Docx To Pdf Using Python](/blog/how-to-convert-docx-to-pdf-using-python.md)
- [How To Convert Html To Pdf Using Html2pdf](/blog/how-to-convert-html-to-pdf-using-html2pdf.md)
- [How To Convert Html To Pdf Using React](/blog/how-to-convert-html-to-pdf-using-react.md)
- [How To Convert Html To Pdf Using Wkhtmltopdf And Csharp](/blog/how-to-convert-html-to-pdf-using-wkhtmltopdf-and-csharp.md)
- [or](/blog/how-to-convert-html-to-pdf-using-wkhtmltopdf-and-python.md)
- [How To Convert Html To Pptx](/blog/how-to-convert-html-to-pptx.md)
- [How To Convert Pdf To Json](/blog/how-to-convert-pdf-to-json.md)
- [Quarterly report](/blog/how-to-convert-pdf-to-markdown-using-python.md)
- [How To Convert Word To Pdf In Nodejs](/blog/how-to-convert-word-to-pdf-in-nodejs.md)
- [How To Convert Word To Pdf Using Javascript](/blog/how-to-convert-word-to-pdf-using-javascript.md)
- [or](/blog/how-to-create-a-react-js-signature-pad.md)
- [How To Create Pdfs With React To Pdf](/blog/how-to-create-pdfs-with-react-to-pdf.md)
- [How to digitally sign PDFs in C# with Nutrient .NET SDK](/blog/how-to-digitally-sign-pdf-in-csharp.md)
- [How To Edit Pdfs Using Ios Pdf Library](/blog/how-to-edit-pdfs-using-ios-pdf-library.md)
- [How To Embed A Pdf Viewer In Your Website](/blog/how-to-embed-a-pdf-viewer-in-your-website.md)
- [How To Extract Tables From Pdf And Images](/blog/how-to-extract-tables-from-pdf-and-images.md)
- [How To Generate A Pdf With Vuejs](/blog/how-to-generate-a-pdf-with-vuejs.md)
- [How To Generate Pdf From Html With Nodejs](/blog/how-to-generate-pdf-from-html-with-nodejs.md)
- [How to generate PDFs in C# with Nutrient .NET SDK](/blog/how-to-generate-pdf-in-csharp.md)
- [base_url tells WeasyPrint where to resolve relative asset paths](/blog/how-to-generate-pdf-reports-from-html-in-python.md)
- [How To Merge Pdfs Using Javascript](/blog/how-to-merge-pdfs-using-javascript.md)
- [How To Ocr Pdf Api](/blog/how-to-ocr-pdf-api.md)
- [How To Ocr Pdfs In Linux](/blog/how-to-ocr-pdfs-in-linux.md)
- [How To Print Pdf In Csharp](/blog/how-to-print-pdf-in-csharp.md)
- [How To Programmatically Create And Fill Pdf Form In Angular](/blog/how-to-programmatically-create-and-fill-pdf-form-in-angular.md)
- [C# barcode scanner: How to scan and read 1D barcodes and QR codes](/blog/how-to-scan-barcodes-in-csharp.md)
- [Open an image.](/blog/how-to-use-tesseract-ocr-in-python.md)
- [From an HTML string.](/blog/html-in-pdf-format.md)
- [Html To Pdf In Javascript](/blog/html-to-pdf-in-javascript.md)
- [Ide Text Editors Cpp Large Scale](/blog/ide-text-editors-cpp-large-scale.md)
- [Numeric and identifier fields: exact single-block matches only.](/blog/insurance-document-extraction.md)
- [Intelligent Data Extraction](/blog/intelligent-data-extraction.md)
- [Introducing Nutrient Data Extraction API: Turn complex documents into structured, reliable data for AI](/blog/introducing-nutrient-data-extraction-api.md)
- [Invoice Approval Software](/blog/invoice-approval-software.md)
- [Javascript Document Editor](/blog/javascript-document-editor.md)
- [Javascript Pdf Editors](/blog/javascript-pdf-editors.md)
- [Javascript Pdf Libraries](/blog/javascript-pdf-libraries.md)
- [Keep Document Ai Private](/blog/keep-document-ai-private.md)
- [Kyc Onboarding Salesforce](/blog/kyc-onboarding-salesforce.md)
- [Landing Ai Alternatives](/blog/landing-ai-alternatives.md)
- [Langextract Vs Llamaindex Extraction Comparison](/blog/langextract-vs-llamaindex-extraction-comparison.md)
- [Linearized Pdf](/blog/linearized-pdf.md)
- [Uses OpenAI by default — set OPENAI_API_KEY.](/blog/llamaindex-vs-langchain-rag.md)
- [Llamaindex Vs Langchain Vs Haystack](/blog/llamaindex-vs-langchain-vs-haystack.md)
- [Llamaindex Workflows Vs Langgraph](/blog/llamaindex-workflows-vs-langgraph.md)
- [Llamaparse Alternatives](/blog/llamaparse-alternatives.md)
- [Llm Vs Document Parsing Api](/blog/llm-vs-document-parsing-api.md)
- [Low Code No Code Document Integrations](/blog/low-code-no-code-document-integrations.md)
- [One segment per document found, in page order:](/blog/mailroom-automation-api.md)
- [Material Requisition](/blog/material-requisition.md)
- [ICD-10-CM: letter, digit, then digit OR letter (C4A, D3A, M1A are all valid),](/blog/medical-record-extraction.md)
- [or](/blog/merge-pdfs.md)
- [Migrating Observability Hyperdx To Dash0](/blog/migrating-observability-hyperdx-to-dash0.md)
- [Swift Package Manager](/blog/mobile-pdf-sdk.md)
- [Numeric and identifier fields: exact single-block matches only.](/blog/mortgage-document-processing.md)
- [`elements` come from your document parser — each has a type and content.](/blog/multimodal-rag.md)
- [Multipage Extraction Page Boundaries](/blog/multipage-extraction-page-boundaries.md)
- [Nutrient Flutter 6 Bindings Api](/blog/nutrient-flutter-6-bindings-api.md)
- [Nutrient Flutter Bindings Architecture](/blog/nutrient-flutter-bindings-architecture.md)
- [Nutrient Vs Conga Composer](/blog/nutrient-vs-conga-composer.md)
- [Ocr Api Comparison](/blog/ocr-api-comparison.md)
- [Online Document Viewer](/blog/online-document-viewer.md)
- [Open Pdf In Your Web App](/blog/open-pdf-in-your-web-app.md)
- [Operations Management Software](/blog/operations-management-software.md)
- [Optical Character Recognition In Scanned Pdfs](/blog/optical-character-recognition-in-scanned-pdfs.md)
- [CPU](/blog/paddleocr-python-guide.md)
- [PDF accessibility for developers: Meeting WCAG 2.2, Section 508, and PDF/UA with an SDK](/blog/pdf-accessibility.md)
- [Extract data from PDF files: A developer guide to structured data from PDFs and scans](/blog/pdf-data-extraction-developer-guide.md)
- [Pdf Extraction Benchmark Opendataloader Bench](/blog/pdf-extraction-benchmark-opendataloader-bench.md)
- [Pdf Extraction Document Case Studies](/blog/pdf-extraction-document-case-studies.md)
- [Pdf Page Labels](/blog/pdf-page-labels.md)
- [Pdf Remediation](/blog/pdf-remediation.md)
- [Pdf Sdk Compliance Security Checklist](/blog/pdf-sdk-compliance-security-checklist.md)
- [Pdf Sdk Performance Benchmark](/blog/pdf-sdk-performance-benchmark.md)
- [Pdf Text Extraction](/blog/pdf-text-extraction.md)
- [Pdf Ua Compliance Guide](/blog/pdf-ua-compliance-guide.md)
- [Pdf Ua Validation](/blog/pdf-ua-validation.md)
- [Pdfjs Accessibility Structtree Printing](/blog/pdfjs-accessibility-structtree-printing.md)
- [Pdfjs Advanced Loading Streaming Workers](/blog/pdfjs-advanced-loading-streaming-workers.md)
- [Pdfjs Annotation Editor Layer](/blog/pdfjs-annotation-editor-layer.md)
- [Pdfjs Area Annotations Canvas Capture](/blog/pdfjs-area-annotations-canvas-capture.md)
- [Pdfjs Coordinate Systems Pdf To Screen](/blog/pdfjs-coordinate-systems-pdf-to-screen.md)
- [Pdfjs Document Outline Bookmarks Metadata](/blog/pdfjs-document-outline-bookmarks-metadata.md)
- [Pdfjs Eventbus Guide](/blog/pdfjs-eventbus-guide.md)
- [macOS](/blog/pdfjs-file-format-conversion-to-pdf.md)
- [macOS](/blog/pdfjs-generating-pdf-thumbnails-pdf2pic.md)
- [Pdfjs Limitations Commercial Upgrade](/blog/pdfjs-limitations-commercial-upgrade.md)
- [Pdfjs Native Annotation Layer Forms](/blog/pdfjs-native-annotation-layer-forms.md)
- [Pdfjs Navigation Zoom Rotation](/blog/pdfjs-navigation-zoom-rotation.md)
- [Pdfjs Pdf Page Manipulation Pdf Lib](/blog/pdfjs-pdf-page-manipulation-pdf-lib.md)
- [Pdfjs React Viewer Setup](/blog/pdfjs-react-viewer-setup.md)
- [Pdfjs Rendering Overlays React Portals](/blog/pdfjs-rendering-overlays-react-portals.md)
- [Pdfjs Server Side Text Extraction](/blog/pdfjs-server-side-text-extraction.md)
- [Pdfjs Sticky Note Annotations](/blog/pdfjs-sticky-note-annotations.md)
- [Pdfjs Text Highlight Annotations](/blog/pdfjs-text-highlight-annotations.md)
- [Pdfjs Text Search Pdffindcontroller](/blog/pdfjs-text-search-pdffindcontroller.md)
- [Pdfjs Thumbnail Sidebar](/blog/pdfjs-thumbnail-sidebar.md)
- [Pdfplumber Python Guide](/blog/pdfplumber-python-guide.md)
- [People Process Tools](/blog/people-process-tools.md)
- [Process Flows](/blog/process-flows.md)
- [React Docx Editor](/blog/react-docx-editor.md)
- [React Native Pdf Annotation](/blog/react-native-pdf-annotation.md)
- [React Pdf Annotation Layer Forms](/blog/react-pdf-annotation-layer-forms.md)
- [React Pdf Custom Rendering Hooks](/blog/react-pdf-custom-rendering-hooks.md)
- [Using Yarn.](/blog/react-pdf-editor.md)
- [React Pdf Loading States Errors Passwords](/blog/react-pdf-loading-states-errors-passwords.md)
- [React Pdf Non Latin Fonts Special Pdfs](/blog/react-pdf-non-latin-fonts-special-pdfs.md)
- [React Pdf Outline Table Of Contents](/blog/react-pdf-outline-table-of-contents.md)
- [React Pdf Performance Optimization](/blog/react-pdf-performance-optimization.md)
- [React Pdf Setup Basic Rendering](/blog/react-pdf-setup-basic-rendering.md)
- [React Pdf Text Layer Custom Renderer](/blog/react-pdf-text-layer-custom-renderer.md)
- [React Pdf Thumbnails Page Navigation](/blog/react-pdf-thumbnails-page-navigation.md)
- [Reducto Alternatives](/blog/reducto-alternatives.md)
- [Requisition System](/blog/requisition-system.md)
- [labels.py](/blog/route-documents-automatically-classify-api.md)
- [or](/blog/sample-blog-updated.md)
- [Sdk Product Updates Q2 2026](/blog/sdk-product-updates-q2-2026.md)
- [System Of Record Vs Source Of Truth](/blog/system-of-record-vs-source-of-truth.md)
- [Add DWS MCP Server to your Claude Code project.](/blog/teaching-llms-to-read-pdfs.md)
- [Open an image file.](/blog/tesseract-python-guide.md)
- [The Six Best Pdf Generator Apis](/blog/the-six-best-pdf-generator-apis.md)
- [Define the HTML part of the document.](/blog/top-10-ways-to-generate-pdfs-in-python.md)
- [Top 5 Javascript Pdf Viewers](/blog/top-5-javascript-pdf-viewers.md)
- [Top Js Pdf Libraries](/blog/top-js-pdf-libraries.md)
- [Top Ten Ways To Convert Html To Pdf](/blog/top-ten-ways-to-convert-html-to-pdf.md)
- [Unstructured Alternatives](/blog/unstructured-alternatives.md)
- [Using Javascript In Pdf Form Fields](/blog/using-javascript-in-pdf-form-fields.md)
- [Vector Pdf](/blog/vector-pdf.md)
- [Wcag2 Accessibility Requirements Documents](/blog/wcag2-accessibility-requirements-documents.md)
- [Web Pdf Sdk Legal Review](/blog/web-pdf-sdk-legal-review.md)
- [Web Sdk Is Now Headless](/blog/web-sdk-is-now-headless.md)
- [What Are Annotations](/blog/what-are-annotations.md)
- [What Is A Vpat](/blog/what-is-a-vpat.md)
- [What Is Bpms](/blog/what-is-bpms.md)
- [What Is Business Logic](/blog/what-is-business-logic.md)
- [What Is Document Processing](/blog/what-is-document-processing.md)
- [What Is Intelligent Document Processing](/blog/what-is-intelligent-document-processing.md)
- [What Is Ocr Invoice Processing](/blog/what-is-ocr-invoice-processing.md)
- [What Is Pdf Ua](/blog/what-is-pdf-ua.md)
- [Why Pdfium Is A Trusted Platform For Pdf Rendering](/blog/why-pdfium-is-a-trusted-platform-for-pdf-rendering.md)
- [Why Your Ai Agent Hallucinates Pdf Table Data](/blog/why-your-ai-agent-hallucinates-pdf-table-data.md)
- [Workflow Analysis](/blog/workflow-analysis.md)

