---
title: "Why we built a decision model for documents | Nutrient"
canonical_url: "https://www.nutrient.io/blog/decision-model-for-documents/"
md_url: "https://www.nutrient.io/blog/decision-model-for-documents.md"
last_updated: "2026-10-19T16:48:08.390Z"
description: "Austin Nguyen explains why Nutrient built a decision model that reads the page, not just the text: how it was trained and where it wins."
---

# Nutrient document decision: Why we built a decision model for documents

Most questions asked about a document don’t need an essay in reply. Is this file an invoice or a contract? The answer is one of a few fixed options, yet the usual way to get it is to send the whole document to a general-purpose large language model (LLM) and wait while it writes a reply, one token at a time.

The Nutrient document decision model reads a document, both the page image and the text, and returns a choice and a score instead of generated text. Decision models are a new class of models that return typed answers with a score. Typesafe AI’s Jev showed what the architecture can do, and Nutrient’s model is tuned for document tasks.

Austin Nguyen, an artificial intelligence (AI) engineer at Nutrient, built the model.

**TL;DR**

- **What it is** — A document model that answers yes-or-no, multiple-choice, and scoring questions, each with a score. It reads the page image as well as the text.

- **What it powers** — Result checks for the Data Extraction API extract endpoint, plus the [classify](https://www.nutrient.io/api/data-extraction-api/classify/) and [split](https://www.nutrient.io/api/data-extraction-api/split/) endpoints.

- **Speed** — About 200 ms per answer. In DWS, about 0.5 to 1 second per document for classify and about five seconds for split.

- **Try it** — The [AI Gateway playground](https://dashboard.nutrient.io/ai-gateway/playground/judgment/?model=nutrient-document-decision) or the [demo on Hugging Face](https://huggingface.co/spaces/nutrientdocs/nutrient-document-decision-demo).

Watch a short overview of how decision models make document AI faster and cheaper.

## Decision model vs. LLM at a glance

|                         | Decision model                                                                  | General-purpose LLM                                             |
| ----------------------- | ------------------------------------------------------------------------------- | --------------------------------------------------------------- |
| **Output**              | A choice (true or false, a label, a rating) plus a score                        | Generated text                                                  |
| **Explains its answer** | No                                                                              | Yes                                                             |
| **Multistep reasoning** | Weaker                                                                          | Stronger                                                        |
| **Speed**               | Around 200 ms per answer                                                        | Depends on the model and the length of the reply                |
| **Best for**            | Verifying extracted data, classifying documents, splitting merged PDFs, routing | Explanations, summaries, and anything that needs written output |

## Interview with Austin Nguyen

We asked Austin why Nutrient trained its own model instead of relying on a large general-purpose one, what the score means, where the model falls short, and what it already powers in Nutrient DWS. This interview has been edited for length and clarity.

### What is a decision model?

A decision model is like an LLM that can read but not write. You can talk to it, and it understands what you’re saying, but it can only respond in choices. It’s kind of like a Ouija board.

### Why replace the general-purpose LLM in Workflow Automation?

There were two reasons. The first was latency and cost. An LLM has to generate every word of its answer, which adds latency downstream in our application and extra cost for our users. Switching to the decision model cut both latency and cost while keeping the accuracy of the decision. It answers in about 200 ms, where an LLM can take more than two seconds, depending on the model and the task.

The second reason is more nuanced. For our customers, a decision in Workflow Automation isn’t always binary, like a yes-or-no answer. Sometimes, the AI is asked to rate how confident it is in an answer, or to rank requests. With an LLM, you just ask it to come up with a number. With a decision model, you can look inside the model’s internals and get a calibrated score.

### Why build your own model instead of using a large general-purpose one?

For specialized tasks like document processing, the right dataset lets a much smaller model get results similar to a general-purpose model. That cuts cost and increases speed.

### Why does reading the page image matter?

During testing, we noticed that for a lot of document use cases, text alone isn’t enough. Take classifying figures or charts in a document. That task is highly visual: Even if you extract all the text from a graph, that might not be enough to tell a bar chart from a pie chart.

Splitting merged PDFs is another example. To know where one document ends and the next begins, the model needs both textual and visual information.

### What does the score mean?

The score is the model’s confidence in a given answer, and it’s calibrated to match the probability that the model is right. To calibrate it, we run the model on a separate evaluation dataset and tune the confidence score against how often its answers are actually correct.

### Why one model rather than three specialists?

_The model was benchmarked on three tasks: checking whether a value is supported by the document, classifying documents, and splitting merged PDFs._

The goal of the model isn’t only to solve those three tasks. During training, we made sure the model can generalize to other document tasks. One thing we’re experimenting with is multimodal retrieval for our agentic harness.

### How is it different from Typesafe AI’s Jev?

Compared with Typesafe AI’s Jev model, our model adds image input, and we tuned it specifically for tasks on document inputs.

_Since this interview, Typesafe AI has added image input to Jev._

### Why is splitting merged PDFs so hard?

_Splitting merged PDFs shows the biggest gap in the benchmarks: 96.2 percent F1, compared with 63.7 percent for Jev._

Our customers in the financial sector need to split invoices that were merged earlier. Invoices are similar to each other, so the text doesn’t carry much signal about where a split happens. Visual information can detect breaks in things like fonts, branding, icons, and styles.

### What do the results on untrained tasks show?

_The model also did well on tasks it was never trained for, such as comparing two optical character recognition (OCR) results and picking the relevant chunks in a retrieval-augmented generation (RAG) pipeline._

What surprised us when evaluating the model is that even on tasks it never saw in training, it performed close to models built for those tasks. That tells us the model’s weights have shifted toward a better fit for document tasks.

### Why publish the benchmarks openly?

One of our founding principles when training models is to have a public benchmark for the results. That way, we can be transparent with our partners about what our models can do, and we invite the wider community to engage with the field.

_The results are public on four Hugging Face leaderboards: [grounding](https://huggingface.co/spaces/nutrientdocs/grounding-leaderboard), [document classification](https://huggingface.co/spaces/nutrientdocs/document-classification-leaderboard), [open-vocabulary classification](https://huggingface.co/spaces/nutrientdocs/doc-openvocab-leaderboard), and [document split](https://huggingface.co/spaces/nutrientdocs/doc-split-leaderboard)._

### Where is the model weaker?

The main advantage of a decision model over an LLM is also its main drawback. Because the model only outputs choices and scores, it can’t give a text explanation for its answer if a use case needs one. And because the model has no reasoning layer, it does worse on tasks that need multistep reasoning.

### What should a developer do if they need an explanation?

If the use case needs text output, you still need something like an LLM. But decision models and LLMs aren’t substitutes; they can complement each other. For example, you can design a system that uses a decision model as a router, picking out the cases where an LLM should generate extra diagnostic information.

### How fast is it compared with an LLM or a single-task model?

It depends on the size of the LLM or the single-task model you compare it with, as well as your hardware and input size. For a single answer from our decision model, you can expect latency of around 200 ms.

_A full DWS call asks the model more than one question, so it takes longer: about 0.5 to 1 second per document for classify and about five seconds for split._

### What does the model power in DWS at launch?

The model enhances existing features in DWS. It checks the results of our extraction endpoint, and it supports our [classification](https://www.nutrient.io/api/data-extraction-api/classify/) and [document split](https://www.nutrient.io/api/data-extraction-api/split/) endpoints.

### How do developers use it?

You use it through DWS. It’s the default model behind our classification and document split endpoints, and the `/extraction/extract` endpoint in the Data Extraction API gets the same upgrade: The extracted JSON is compared back to the document to catch mistakes. To call the model directly, use the decision API in the [AI Gateway](https://www.nutrient.io/api/ai-gateway-api/).

### Where can I see it in action?

The [demo page](https://huggingface.co/spaces/nutrientdocs/nutrient-document-decision-demo) has an example of checking whether an extracted claim is supported by the source text. On the demo, it’s called grounding.

### What’s next?

Next comes a combination of more languages, more speed, and more tasks. What Typesafe AI did was show the community a new model architecture that trades away an LLM’s ability to speak for very fast output. I believe it’s our job to build on that innovation to improve the AI we offer our customers.

### What’s the one thing to remember?

At Nutrient, we’re releasing a Jev-like model that takes both text and images as input and is tuned for document tasks.

## When to use a decision model

Use a decision model when a question has a fixed set of answers and the workflow needs that answer fast: verifying extracted data, classifying documents, splitting merged PDFs, and approving or rating requests in an automated workflow.

When the output has to be written text, such as an explanation, a summary, or a draft, an LLM is still the right tool. The two also work well together: A decision model can act as a router that sends only the cases needing a written answer to an LLM, which keeps most requests fast and cheap.

## Try the model

Many document workflows come down to a long series of small, structured questions. A model that answers them with a choice and a score and reads the page while it does is faster and cheaper than one that writes every answer out. General-purpose LLMs stay the right choice for work that needs language, and a model built for decisions can take the rest.

The model already checks extraction results and supports the [classify](https://www.nutrient.io/api/data-extraction-api/classify/) and [split](https://www.nutrient.io/api/data-extraction-api/split/) endpoints in Nutrient DWS. To see it in action, try the [Hugging Face demo](https://huggingface.co/spaces/nutrientdocs/nutrient-document-decision-demo), read the [model card](https://huggingface.co/nutrientdocs/nutrient-document-decision), or see the benchmark charts on the [AI models page](https://www.nutrient.io/ai/models/#document-decision). To call the model from your own code, [get your API key](https://dashboard.nutrient.io/ai-gateway/playground/judgment/?model=nutrient-document-decision) for Nutrient AI Gateway.
---

## 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)
- [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)
- [Azure Document Intelligence Alternatives](/blog/azure-document-intelligence-alternatives.md)
- [Best Ai Document Workflow Platforms](/blog/best-ai-document-workflow-platforms.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 Llm Document Understanding Platforms](/blog/best-llm-document-understanding-platforms.md)
- [Best Multilingual Ocr Software](/blog/best-multilingual-ocr-software.md)
- [Best Pdf Parsers For Rag](/blog/best-pdf-parsers-for-rag.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)
- [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)
- [Capex Vs Opex](/blog/capex-vs-opex.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)
- [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 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)
- [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)
- [Extend Alternatives](/blog/extend-alternatives.md)
- [Extract Patient Data On Premises](/blog/extract-patient-data-on-premises.md)
- [app.py](/blog/extract-text-from-pdf-using-python.md)
- [Fillable Pdf](/blog/fillable-pdf.md)
- [Google Document Ai Alternatives](/blog/google-document-ai-alternatives.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)
- [How To Build A Reactjs File Viewer](/blog/how-to-build-a-reactjs-file-viewer.md)
- [or](/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)
- [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 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 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 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)
- [Intelligent Data Extraction](/blog/intelligent-data-extraction.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)
- [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)
- [Low Code No Code Document Integrations](/blog/low-code-no-code-document-integrations.md)
- [Material Requisition](/blog/material-requisition.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)
- [`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)
- [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 Sdk Compliance Security Checklist](/blog/pdf-sdk-compliance-security-checklist.md)
- [Pdf Sdk Performance Benchmark](/blog/pdf-sdk-performance-benchmark.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 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)
- [or](/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 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 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)

