---
title: "How to scan and read barcodes in C#"
canonical_url: "https://www.nutrient.io/blog/how-to-scan-barcodes-in-csharp/"
md_url: "https://www.nutrient.io/blog/how-to-scan-barcodes-in-csharp.md"
last_updated: "2026-10-07T13:31:22.092Z"
description: "Build a C# barcode scanner with Nutrient .NET SDK: Read 1D barcodes, QR codes, and other 2D formats from images, with complete code examples."
---

# C# barcode scanner: How to scan and read 1D barcodes and QR codes

**TL;DR**

Nutrient.NET SDK (formerly GdPicture.NET) reads every common 1D barcode format and six 2D formats from images and PDFs in C#. The 2D formats include QR, Data Matrix, and PDF417. The workflow has four steps. Install the [`GdPicture.API`](https://www.nuget.org/packages/GdPicture.API) NuGet package, load an image, scan it with the reader for the chosen format, and read each detected value by index. Format-specific readers follow the same scan, count, and read-by-index pattern.

Barcode scanning in C# usually means one of two jobs. The first is pulling product or shipment identifiers out of linear barcodes for inventory and logistics pipelines. The second is decoding QR codes and other 2D symbologies that carry URLs, IDs, or structured payloads. This tutorial covers both jobs, from images and PDF pages, with [Nutrient.NET SDK](https://www.nutrient.io/sdk/dotnet/). It’s a single barcode reader API that handles every common format without training data or per-format configuration.

## Which barcode formats can a C# barcode scanner read?

The SDK recognizes common one-dimensional (linear) barcode formats, including:

- Code 128

- Code 39

- UPC-A and UPC-E

- EAN-13 and EAN-8

- Code 93

- Interleaved 2 of 5

It also reads the following two-dimensional formats:

- Aztec Code

- Data Matrix

- MaxiCode

- Micro QR

- PDF417

- QR

Each symbology family has its own reader on the `GdPictureImaging` class, and all of them follow the same scan → count → read-by-index pattern shown below.

## Setup

Install the.NET SDK version 8 or later. Then create a console project and add the SDK package:

```bash

dotnet new console -n BarcodeScanner
cd BarcodeScanner
dotnet add package GdPicture.API

```

Replace the contents of `Program.cs` with the setup below. Then append one scanning example from this tutorial. Replace `YOUR_LICENSE_KEY` with a valid demo or commercial key. See the [downloads guide](https://www.nutrient.io/guides/dotnet/downloads.md) for licensing details.

```csharp

using GdPicture14;

if (args.Length!= 1)
{
    throw new ArgumentException("Usage: dotnet run -- <path-to-input-file>");
}

LicenseManager licence = new LicenseManager();
if (!licence.RegisterKEY("YOUR_LICENSE_KEY"))
{
    throw new InvalidOperationException("Set a valid Nutrient.NET SDK license key.");
}

```

Run the project with the path to your barcode image. Quote paths that contain spaces:

```bash

dotnet run -- "source.png"

```

Use an image containing 1D barcodes for the first example, a QR-code image for the QR example, or a PDF for the PDF example. Relative paths resolve from the project directory. Each example prints the decoded values, reports zero detections, or throws an error if processing fails.

## Read 1D barcodes from an image

The workflow loads an image, runs a barcode scan, counts the detections, and reads each value by index:

```csharp

using GdPictureImaging gdpictureImaging = new GdPictureImaging();
int imageID = gdpictureImaging.CreateGdPictureImageFromFile(args[0]);
try
{
    GdPictureStatus status = gdpictureImaging.GetStat();
    if (status!= GdPictureStatus.OK || imageID == 0)
    {
        throw new InvalidOperationException($"Could not load the image: {status}");
    }
    status = gdpictureImaging.Barcode1DReaderDoScan(imageID);
    if (status!= GdPictureStatus.OK)
    {
        throw new InvalidOperationException($"Barcode scan failed: {status}");
    }
    int barcodeCount = gdpictureImaging.Barcode1DReaderGetBarcodeCount();
    if (barcodeCount == 0)
    {
        Console.WriteLine("No barcodes detected.");
    }
    for (int i = 1; i <= barcodeCount; i++)
    {
        Console.WriteLine($"Barcode {i}: {gdpictureImaging.Barcode1DReaderGetBarcodeValue(i)}");
    }
}
finally
{
    gdpictureImaging.Barcode1DReaderClear();
    if (imageID!= 0)
    {
        gdpictureImaging.ReleaseGdPictureImage(imageID);
    }
}

```

Keep two details in mind:

- **Barcode indexes are 1-based.** The loop runs from `1` to `barcodeCount`, and `Barcode1DReaderGetBarcodeValue(1)` returns the first result. A `0`-based loop silently skips the last barcode and asks for one that doesn’t exist.

- **One scan handles multiple barcodes.** A packing slip or label sheet with several barcodes needs a single `Barcode1DReaderDoScan` call. The count and index API exposes every detection.

The [1D barcode guide](https://www.nutrient.io/guides/dotnet/barcodes/read-scan/read-1d-barcode-from-image.md) covers this workflow in more depth.

## Read QR codes from an image

QR codes use the same pattern with the `BarcodeQRReader` methods:

```csharp

using GdPictureImaging imaging = new GdPictureImaging();
int imageId = imaging.CreateGdPictureImageFromFile(args[0]);
try
{
    GdPictureStatus status = imaging.GetStat();
    if (status!= GdPictureStatus.OK || imageId == 0)
    {
        throw new InvalidOperationException($"Could not load the QR code image: {status}");
    }
    status = imaging.BarcodeQRReaderDoScan(imageId);
    if (status!= GdPictureStatus.OK)
    {
        throw new InvalidOperationException($"QR scan failed: {status}");
    }
    int barcodesCount = imaging.BarcodeQRReaderGetBarcodeCount();
    if (barcodesCount == 0)
    {
        Console.WriteLine("No QR codes detected.");
    }
    for (int i = 1; i <= barcodesCount; i++)
    {
        Console.WriteLine(imaging.BarcodeQRReaderGetBarcodeValue(i));
    }
}
finally
{
    imaging.BarcodeQRReaderClear();
    if (imageId!= 0)
    {
        imaging.ReleaseGdPictureImage(imageId);
    }
}

```

The decoded value is whatever the QR code carries — a URL, an identifier, or free text — ready for downstream routing logic. See the [QR code guide](https://www.nutrient.io/guides/dotnet/barcodes/read-scan/read-qr-code-from-image.md) for the full walkthrough.

## Read other 2D formats

Every other 2D symbology follows the identical scan → count → read pattern; only the method prefix changes:

| Format      | Scan method                     | Count/value methods                                             |
| ----------- | ------------------------------- | --------------------------------------------------------------- |
| Aztec Code  | `BarcodeAztecReaderDoScan`      | `BarcodeAztecReaderGetBarcodeCount` / `...GetBarcodeValue`      |
| Data Matrix | `BarcodeDataMatrixReaderDoScan` | `BarcodeDataMatrixReaderGetBarcodeCount` / `...GetBarcodeValue` |
| MaxiCode    | `BarcodeMaxiCodeReaderDoScan`   | `BarcodeMaxiCodeReaderGetBarcodeCount` / `...GetBarcodeValue`   |
| Micro QR    | `BarcodeMicroQRReaderDoScan`    | `BarcodeMicroQRReaderGetBarcodeCount` / `...GetBarcodeValue`    |
| PDF417      | `BarcodePDF417ReaderDoScan`     | `BarcodePDF417ReaderGetBarcodeCount` / `...GetBarcodeValue`     |

Swap the prefix into the 1D example above, and the rest of the code is unchanged. See the guides for [Aztec Code](https://www.nutrient.io/guides/dotnet/barcodes/read-scan/aztec-code.md), [Data Matrix](https://www.nutrient.io/guides/dotnet/barcodes/read-scan/datamatrix.md), [MaxiCode](https://www.nutrient.io/guides/dotnet/barcodes/read-scan/maxicode.md), [Micro QR](https://www.nutrient.io/guides/dotnet/barcodes/read-scan/microqr.md), and [PDF417](https://www.nutrient.io/guides/dotnet/barcodes/read-scan/pdf417.md); the [barcode read/scan index](https://www.nutrient.io/guides/dotnet/barcodes/read-scan.md) lists them all.

## Read barcodes from a PDF

The barcode readers operate on images, so scanning a PDF takes two steps. Render the page to an image with `GdPicturePDF`. Then pass the resulting image ID to the same reader methods:

```csharp

using GdPicturePDF gdpicturePDF = new GdPicturePDF();
using GdPictureImaging gdpictureImaging = new GdPictureImaging();
GdPictureStatus status = gdpicturePDF.LoadFromFile(args[0]);
if (status!= GdPictureStatus.OK)
{
    throw new InvalidOperationException($"Could not load the PDF: {status}");
}
status = gdpicturePDF.SelectPage(1);
if (status!= GdPictureStatus.OK)
{
    throw new InvalidOperationException($"Could not select the PDF page: {status}");
}
// Request 200 DPI; pages containing a single full-page image retain its original DPI.
int rasterPageID = gdpicturePDF.RenderPageToGdPictureImageEx(200, true);
try
{
    status = gdpicturePDF.GetStat();
    if (status!= GdPictureStatus.OK || rasterPageID == 0)
    {
        throw new InvalidOperationException($"Could not render the PDF page: {status}");
    }
    status = gdpictureImaging.Barcode1DReaderDoScan(rasterPageID);
    if (status!= GdPictureStatus.OK)
    {
        throw new InvalidOperationException($"Barcode scan failed: {status}");
    }
    int barcodeCount = gdpictureImaging.Barcode1DReaderGetBarcodeCount();
    if (barcodeCount == 0)
    {
        Console.WriteLine("No barcodes detected on this page.");
    }
    for (int i = 1; i <= barcodeCount; i++)
    {
        Console.WriteLine(gdpictureImaging.Barcode1DReaderGetBarcodeValue(i));
    }
}
finally
{
    gdpictureImaging.Barcode1DReaderClear();
    if (rasterPageID!= 0)
    {
        gdpictureImaging.ReleaseGdPictureImage(rasterPageID);
    }
}

```

Pass a PDF path when running this example, such as `dotnet run -- "source.pdf"`. `RenderPageToGdPictureImageEx` preserves the original resolution of a single image covering the page. Use `RenderPageToGdPictureImage` if you need to resample those pages to the requested dots per inch (DPI).

To sweep a multipage document, loop `SelectPage` from `1` to `GetPageCount()` and repeat the render-and-scan step per page, including its status checks and `finally` cleanup. Any other reader from the table above works the same way. To look for QR codes on the rendered page, replace the `Barcode1DReader` prefix with `BarcodeQRReader` in all four calls: scan, count, value, and clear.

## Production notes

- **Release resources explicitly.** Call `...ReaderClear()` after processing results and `ReleaseGdPictureImage(imageID)` when you finish with the image. Both appear in the examples above. In batch pipelines, skipping these leaks native resources.

- **Handle failures separately from zero detections.** The examples check load and scan statuses before reading results. In batch processing, catch errors per file and record the failure before continuing with the next input.

- **Generation is also available.** The same SDK also generates barcodes. See the [barcode generation guides](https://www.nutrient.io/guides/dotnet/barcodes/generation.md) when the pipeline needs to write labels, not just read them.

## Conclusion

A C# barcode scanner with Nutrient.NET SDK follows a short sequence. Load the image, call the reader for the symbology, loop the results by `1`-based index, and release the resources. The same `GdPictureImaging` class covers every common 1D and 2D format, and the [read/scan guides](https://www.nutrient.io/guides/dotnet/barcodes/read-scan.md) document each one.

To try it on a real label and document mix, [download the SDK](https://www.nutrient.io/guides/dotnet/downloads.md) and run the examples above with a demo key.

**Call to Action**

*Every common 1D and 2D format, from images and PDFs, with a free demo key*

Download Nutrient.NET SDK

[Learn More](https://www.nutrient.io/guides/dotnet/downloads.md)

## FAQ

#### Which barcode formats can a C# barcode scanner read with Nutrient.NET SDK?

It reads common one-dimensional (linear) formats, including Code 128, Code 39, UPC-A/UPC-E, EAN-13/EAN-8, Code 93, and Interleaved 2 of 5. It also reads six two-dimensional formats: Aztec Code, Data Matrix, MaxiCode, Micro QR, PDF417, and QR.

#### Can one scan detect multiple barcodes in the same image?

Yes. A single `...ReaderDoScan` call can detect multiple barcodes of that symbology in the image. Resolution, contrast, damage, and occlusion affect which barcodes are detected. `...ReaderGetBarcodeCount()` returns how many were found, and `...ReaderGetBarcodeValue(i)` reads each one by `1`-based index.

#### Can a C# barcode scanner read barcodes from a PDF?

Yes. Render each PDF page to an image with `GdPicturePDF.RenderPageToGdPictureImageEx`. Then pass the resulting image ID to the barcode reader. The “Read barcodes from a PDF” section above shows the complete workflow, and looping `SelectPage` over `GetPageCount()` covers multipage documents.

#### Does reading barcodes in C# require OCR?

No. Barcode recognition decodes the symbology’s encoding directly. Optical character recognition (OCR) enters the picture when you must read the value from human-readable text printed near the barcode. See [barcode OCR vs. traditional barcode scanners](https://www.nutrient.io/blog/barcode-ocr/) for when each applies.

#### How do I generate barcodes in C# with the same SDK?

The SDK includes barcode writers alongside the readers, covering the same 1D and 2D formats. The [barcode generation guides](https://www.nutrient.io/guides/dotnet/barcodes/generation.md) show the per-format APIs.
---

## 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)
- [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)
- [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)
- [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)
- [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)
- [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)
- [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)

