---
title: "LlamaIndex vs. LangChain: Which should you use in 2026?"
canonical_url: "https://www.nutrient.io/blog/llamaindex-vs-langchain-rag/"
md_url: "https://www.nutrient.io/blog/llamaindex-vs-langchain-rag.md"
last_updated: "2026-09-08T10:04:13.899Z"
description: "Compare LlamaIndex vs. LangChain for RAG in 2026: retrieval, agents, integrations, and why PDF parsing can determine answer quality before either runs."
---

**TL;DR**

- **LlamaIndex and LangChain focus on different parts of RAG.** LlamaIndex emphasizes retrieval and indexing over private data; LangChain emphasizes orchestration and agents. Teams can use them together.

- **Choose based on the hard part.** Pick LlamaIndex when retrieval quality over private data is the challenge. Pick LangChain when the task requires orchestrating multistep agents and tools across many integrations.

- **They’re not mutually exclusive.** LangChain ships a retriever that wraps a LlamaIndex index.

- **Document extraction often decides the outcome.** Basic loaders commonly used with either framework can lose PDF structure, so complex tables, layouts, and scans cap answer quality before retrieval starts. [Nutrient](https://www.nutrient.io/api/data-extraction-api/) fits here as the extraction layer that feeds either framework; it’s not a replacement for one.

For retrieval-augmented generation (RAG), LlamaIndex is usually the stronger starting point when retrieval over private data is the hard part. LangChain is usually better when a large language model (LLM) application needs multistep agents, tools, and durable orchestration. They can work together, and either framework still depends on the quality of the documents entering the pipeline.

## LlamaIndex vs. LangChain at a glance

The table below summarizes each framework’s primary strengths. Their capabilities have converged over time: LlamaIndex added agents and workflows, while LangChain added retrieval, as the frameworks’ [official comparison](https://www.langchain.com/resources/langchain-vs-llamaindex) explains. The details were verified against the [LangChain 1.x documentation](https://docs.langchain.com/oss/python/releases/langchain-v1), [LlamaIndex releases](https://github.com/run-llama/llama_index/releases), and LangGraph 1.x in mid-2026; check the current releases before choosing a version. LlamaIndex staying on a 0.x version is a versioning convention, not a maturity signal.

| Dimension                | LlamaIndex                                                    | LangChain                                                               |
| ------------------------ | ------------------------------------------------------------- | ----------------------------------------------------------------------- |
| Primary focus            | Data framework for retrieval and indexing (RAG over own data) | General LLM-app framework for orchestration and agents                  |
| Retrieval and indexing   | Core strength: indices, query engines, retrievers             | Supported, with a broad retriever ecosystem                             |
| Agents and orchestration | LlamaIndex Workflows (event-driven, step-based)               | Agents built on LangGraph (stateful, multi-actor)                       |
| Integrations             | LlamaHub connector marketplace                                | Very broad integration surface across providers                         |
| Observability            | Available via integrations                                    | LangSmith (tracing, evaluation)                                         |
| Document ingestion       | Built-in readers; LlamaParse is a separate managed parser     | DocumentLoaders ecosystem (PyPDF, PDFPlumber, Unstructured, and others) |
| Use together?            | Yes — both expose interfaces for the other                    | Yes — ships a retriever that wraps a LlamaIndex index                   |
| License (core)           | MIT, open source                                              | MIT, open source                                                        |
| Paid add-ons             | LlamaParse/LlamaCloud (credit-based parsing)                  | LangSmith (observability, evaluation, deployment)                       |
| Learning curve           | Fewer concepts for basic RAG                                  | More building blocks; steeper but more flexible                         |

## What LlamaIndex is for

LlamaIndex describes itself as a data framework for LLM apps, built around loading, indexing, storing, and querying private data — the classic RAG pipeline. Its strengths are retrieval and indexing: indices, query engines, and a large connector marketplace (LlamaHub) for getting data in. It has since expanded into agents via LlamaIndex Workflows (an event-driven, step-based execution model) and now positions itself around document agents, but retrieval over private data is still its core.

## What LangChain is for

LangChain is a general framework for LLM applications, with a broad integration surface and a current emphasis on agents. Its documentation now leads with a configurable agent harness built on LangGraph. LangGraph is a separate, low-level runtime for building stateful, multi-actor agents, with durable execution and human-in-the-loop support. LangChain also offers LangSmith for tracing and evaluation. It supports retrieval and RAG too, but its primary focus remains orchestration rather than retrieval.

## The same RAG pipeline in each framework

The clearest way to see the difference is a minimal RAG pipeline in each framework. LlamaIndex reaches a working query engine in a few lines, with sensible RAG defaults baked in:

```python

from llama_index.core import VectorStoreIndex, SimpleDirectoryReader

# Uses OpenAI by default — set OPENAI_API_KEY.

documents = SimpleDirectoryReader("data").load_data()
index = VectorStoreIndex.from_documents(documents)
query_engine = index.as_query_engine()
print(query_engine.query("What changed in Q2 revenue?"))

```

LangChain expects each step to be assembled by hand — load, split, embed, retrieve, and wire the chain. That means more surface area, but more control over each stage. On LangChain 1.x, the legacy retrieval-chain helpers are maintained in the separate `langchain-classic` package, so install it along with the integration packages used below:

```python

from langchain_community.document_loaders import TextLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain_core.vectorstores import InMemoryVectorStore
from langchain_core.prompts import ChatPromptTemplate
from langchain_classic.chains import create_retrieval_chain
from langchain_classic.chains.combine_documents import create_stuff_documents_chain

# Load > split > embed > retrieve > generate (set OPENAI_API_KEY).

docs = TextLoader("data.txt").load()
splits = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200).split_documents(docs)
vectorstore = InMemoryVectorStore.from_documents(splits, OpenAIEmbeddings())
retriever = vectorstore.as_retriever(search_kwargs={"k": 3})

prompt = ChatPromptTemplate.from_template(
    "Answer using only the context:\n\n{context}\n\nQuestion: {input}"
)
chain = create_retrieval_chain(retriever, create_stuff_documents_chain(ChatOpenAI(), prompt))
print(chain.invoke({"input": "What changed in Q2 revenue?"})["answer"])

```

LlamaIndex supplies more RAG defaults, while LangChain exposes the pipeline stages for broader composition.

## Retrieval, agents, and interoperability

The familiar shorthand — “LlamaIndex for retrieval, LangChain for orchestration” — still describes their main strengths, although both now cover more of the pipeline. LangChain also ships a `LlamaIndexRetriever`, which lets a LlamaIndex index serve as a retriever inside a LangChain chain. A pipeline can therefore use LlamaIndex for ingestion, indexing, and retrieval, and LangChain for orchestration and generation.![One RAG pipeline showing where each tool fits: Documents flow through an extraction layer (e.g. Nutrient). LlamaIndex then handles ingestion, indexing, and retrieval, and LangChain handles orchestration and generation. Extraction quality sets the ceiling for both frameworks.](@/assets/images/blog/2026/llamaindex-vs-langchain-rag/rag-pipeline-roles.png)

## Which one to use (is LlamaIndex better than LangChain?)

Neither framework is better for every RAG system. Start with LlamaIndex when retrieval over private documents is the main challenge, and start with LangChain when the pipeline needs broad orchestration across tools and providers. Because they interoperate, a pipeline can also use both. Match the initial choice to the requirements below:

| If the priority is…                                 | Start with             | Why                                                           |
| --------------------------------------------------- | ---------------------- | ------------------------------------------------------------- |
| Retrieval quality over private documents            | LlamaIndex             | Indices, query engines, and retrievers are its core           |
| Fastest path to a working RAG query engine          | LlamaIndex             | Loading-to-querying is the default workflow                   |
| Multistep agents and tool orchestration             | LangChain              | Broad agent harness built on LangGraph                        |
| Stateful, multi-actor agents with durable execution | LangChain (LangGraph)  | Purpose-built low-level runtime for exactly this              |
| The broadest integration surface across providers   | LangChain              | Widest ecosystem of loaders, tools, and model providers       |
| Production tracing and evaluation                   | LangChain (LangSmith)  | First-party observability and evaluation tooling              |
| Using both                                          | LlamaIndex + LangChain | LlamaIndex to ingest/index/retrieve, LangChain to orchestrate |

Most teams can start with one framework and add the other when a specific requirement appears. Their interoperability makes that change less disruptive than replacing the pipeline.

Both core frameworks are free, but their defaults affect LLM token costs. Chunk size, retrieval depth, agent retries, and multistep chains determine how much context each query sends to the model. LlamaIndex handles more of these choices through retrieval defaults, while LangChain exposes them in the pipeline configuration. Measure token use per query before traffic grows.

Before tuning either framework, check the input. A parser that loses content or structure limits the retrieval quality of both.

**Featured Content**

**The extraction layer under both frameworks**

Structured output with per-field confidence scores through the Nutrient Data Extraction API — free tier included.

[Explore the Data Extraction API](https://www.nutrient.io/api/data-extraction-api/)

## How document extraction affects both frameworks

A RAG pipeline can retrieve only what its parser preserves. LlamaIndex’s own team calls parsing [“the silent bottleneck,”](https://www.llamaindex.ai/insights/best-llm-document-parser-2025) noting that “if your parser destroys table structure, loses reading order, or flattens charts into garbage text, the rest of the stack does not matter.” Both frameworks support a range of [document loaders](https://docs.langchain.com/oss/python/integrations/document_loaders/index) and parsing integrations. A basic loader such as LangChain’s `PyPDFLoader` isn’t designed to preserve every scanned page or complex layout, so high-fidelity tables and scans can require a dedicated parser such as LlamaParse, Unstructured, or a commercial extraction API. The [Extract document elements](https://www.nutrient.io/guides/dws-data-extraction/parsing/extract-document-elements.md) guide shows how typed elements, bounding boxes, and reading order can be preserved across PDFs, images, and scans.

Here’s what that looks like. A basic loader on a financial table often returns a flat run of numbers, with the row and column relationships gone:

```text

Revenue Q1 Q2 Q3 4.2 4.9 5.1 Growth 12% 17% 4%

```

A structure-preserving extractor keeps the table intact, so a retrieved chunk still answers “Q2 growth”:

```text

| Metric  | Q1  | Q2  | Q3  |
| ------- | --- | --- | --- |
| Revenue | 4.2 | 4.9 | 5.1 |
| Growth  | 12% | 17% | 4%  |

```

No embedding model or retriever can recover the association the parser threw away.

### Why structure matters more than one score

An aggregate accuracy score can hide structural failures. If a parser loses row-to-column associations, retrieval tuning can’t reconstruct them. An evaluation should therefore check whether the system returns the correct value from the correct table location, not just whether an answer appears plausible.

No independent benchmark compares LangChain’s `PyPDFLoader`, LlamaParse, and Nutrient in one controlled test. However, a [2026 study of PDF parsing in RAG](https://www.mdpi.com/2076-3417/16/10/5069) evaluated `PyPDFLoader` alongside PDF-to-Markdown pipelines and found that preprocessing and structure-aware chunking materially affected downstream answer accuracy. For how extraction quality can be measured reproducibly, our [benchmark methodology](https://www.nutrient.io/blog/pdf-extraction-benchmark-opendataloader-bench.md) documents the corpus and harness in full.

Evaluate the ingestion paths on the documents the application will process:

1. Pull 50–100 documents representative of the real distribution — the multicolumn, scanned, and table-heavy cases, not just the clean PDFs.

2. Run each ingestion path and inspect the parsed output directly before embedding.

3. Check whether table rows keep their column associations and whether reading order survives on multicolumn pages.

4. Only then measure end-to-end answer quality. A retrieval problem and an extraction problem look identical from the answer alone.

## Where Nutrient fits

Nutrient isn’t a RAG framework and doesn’t replace LangChain or LlamaIndex; it sits earlier in the pipeline. The [Nutrient document extraction API](https://www.nutrient.io/api/data-extraction-api/) and [AI Document Processing](https://www.nutrient.io/sdk/ai-document-processing/) turn [tables](https://www.nutrient.io/api/table-extraction-api/), [key-value pairs](https://www.nutrient.io/api/key-value-pair-extraction-api/), multicolumn layouts, and scans into structured, source-grounded output, with optical character recognition (OCR) built in.

Each extracted value includes a bounding box, confidence score, and interpretable match label, so teams can audit the input before it reaches the index. The platform can also be self-hosted. Its deterministic OCR and intelligent character recognition (ICR) modes run without an external model dependency. Some AI-augmented modes use a hosted LLM.

Nutrient is SOC 2 Type 2 audited. The platform serves more than 3,000 organizations, including 15 percent of Global 500 companies, and processes more than 1 billion document interactions annually. The [Data Extraction API](https://www.nutrient.io/guides/dws-data-extraction/getting-started.md) takes a few minutes to set up. For a direct comparison with LlamaIndex’s parser, see the [Nutrient vs. LlamaIndex breakdown](https://www.nutrient.io/api/data-extraction-api/vs/llamaindex/).

<!-- For the multi-framework view, see [LlamaIndex vs. LangChain vs. Haystack][vs-haystack]. -->

### Try it on a document

A free API key returns structured elements — each with a bounding box and confidence score — in a few lines:

```py

import requests

response = requests.post(
    "https://api.nutrient.io/extraction/parse",
    headers={"Authorization": "Bearer YOUR_API_KEY"},
    files={"file": open("document.pdf", "rb")},
    data={"instructions": '{"mode":"understand","output":{"format":"spatial"}}'},
)
print(response.json())

```

[Get a free API key](https://dashboard.nutrient.io/sign_up/?product=data-extraction) and follow the [RAG ingestion guide](https://www.nutrient.io/guides/dws-data-extraction/examples/build-rag-ingestion-pipeline.md) to wire Nutrient into an existing pipeline.

## Conclusion

LlamaIndex is a strong starting point for retrieval-heavy RAG, while LangChain suits pipelines that need broad orchestration. They can also run together. In either case, evaluate parsing before tuning retrieval because lost table structure, reading order, or scanned content can’t be recovered downstream. [Start with Nutrient’s free tier](https://dashboard.nutrient.io/sign_up/?product=data-extraction) to test the extraction layer on representative documents.

## FAQ

#### What is the difference between LangChain and LlamaIndex for RAG?

LlamaIndex focuses on retrieval and indexing over private data. LangChain provides broader orchestration and agent tooling. Both support RAG and can be used in the same pipeline.

#### Can you use LlamaIndex and LangChain together?

Yes. LangChain’s `LlamaIndexRetriever` lets a LlamaIndex index act as a retriever inside a LangChain chain. This supports using LlamaIndex for retrieval and LangChain for orchestration.

#### Does document parsing affect RAG quality?

Yes. Lost table structure, reading order, or scanned content reduces retrieval quality regardless of framework. The [Nutrient Data Extraction API](https://www.nutrient.io/api/data-extraction-api/) returns confidence scores and page locations so teams can audit extracted values before indexing them.

#### Does Nutrient replace LlamaIndex or LangChain?

No. Nutrient prepares structured input from PDFs, scans, and complex tables. LlamaIndex or LangChain still handles retrieval, orchestration, and generation.

#### Do I need LangChain if I use LlamaIndex?

No. LlamaIndex can load, index, retrieve, and query data without LangChain. Add LangChain if the pipeline needs broader agent orchestration, more tool integrations, or stateful multistep workflows through LangGraph.

#### Is LlamaIndex faster than LangChain for retrieval?

There’s no universal performance advantage. Latency depends on the index type, embedding model, vector store, and data, so benchmark both frameworks against a representative corpus.

#### Are LlamaIndex and LangChain free and open source?

Yes. Both core frameworks use the MIT license and are free to self-host. LlamaCloud, LlamaParse, and LangSmith provide optional managed services with separate pricing.

<!-- [vs-haystack]: /blog/llamaindex-vs-langchain-vs-haystack/ -->
---

## 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)
- [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 Legal Assistant Document Authoring](/blog/ai-legal-assistant-document-authoring.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)
- [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)
- [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 Multilingual Ocr Software](/blog/best-multilingual-ocr-software.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)
- [Document Ai Vs Ocr](/blog/document-ai-vs-ocr.md)
- [Document Extraction Confidence Scores](/blog/document-extraction-confidence-scores.md)
- [Document Viewer](/blog/document-viewer.md)
- [Document Watermarking](/blog/document-watermarking.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)
- [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)
- [How To Build A Javascript Pdf Viewer](/blog/how-to-build-a-javascript-pdf-viewer.md)
- [or](/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)
- [or](/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)
- [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)
- [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)
- [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)
- [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)
- [Langextract Vs Llamaindex Extraction Comparison](/blog/langextract-vs-llamaindex-extraction-comparison.md)
- [Linearized Pdf](/blog/linearized-pdf.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)
- [Swift Package Manager](/blog/mobile-pdf-sdk.md)
- [`elements` come from your document parser — each has a type and content.](/blog/multimodal-rag.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)
- [Online Document Viewer](/blog/online-document-viewer.md)
- [Open Pdf In Your Web App](/blog/open-pdf-in-your-web-app.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)
- [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)
- [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 Outline Table Of Contents](/blog/react-pdf-outline-table-of-contents.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)
- [Convert an HTML file to PDF.](/blog/top-ten-ways-to-convert-html-to-pdf.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 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)

