---
title: "How to digitally sign a PDF in C# (2026)"
canonical_url: "https://www.nutrient.io/blog/how-to-digitally-sign-pdf-in-csharp/"
md_url: "https://www.nutrient.io/blog/how-to-digitally-sign-pdf-in-csharp.md"
last_updated: "2026-10-22T13:02:16.929Z"
description: "Digitally sign PDFs in C# with Nutrient .NET SDK: certificate-based signing from a PFX digital ID, visible and invisible signatures, with complete code."
---

# How to digitally sign PDFs in C# with Nutrient .NET SDK

**TL;DR**

Nutrient.NET SDK (formerly GdPicture.NET) signs PDFs in C# with a certificate-based digital signature in four steps: install the [`GdPicture.API`](https://www.nutrient.io/guides/dotnet/downloads/) NuGet package, load the PDF, set the signing certificate from a PKCS#12 (`.pfx`) digital ID with `SetSignatureCertificateFromP12`, and apply the signature with `ApplySignature`. The signature can be invisible (cryptographic only) or visible with text and a handwritten-signature image. The C# examples for both are below, and the linked signing guide includes VB.NET variants.

This tutorial implements a certificate-based digital signature in C# that protects the signed revision and links it to a signing certificate. With [Nutrient.NET SDK](https://www.nutrient.io/sdk/dotnet/) and a PKCS#12 digital ID, the signature can be invisible or a visible stamp with text and an image.

## Three things “sign a PDF” can mean in C#

Each meaning calls for a different implementation:

- **A certificate-based digital signature** cryptographically binds a signer identity to the document and makes any later modification detectable. This tutorial implements this mechanism. Identifying the individual and recording consent depend on the surrounding workflow.

- **An ink or image eSignature** places a drawn or scanned signature on the page as visual content, with no cryptographic protection. Nutrient.NET SDK adds these with the ink annotation API.

- **A signature form field** reserves a place in the document for someone else to sign later. Nutrient.NET SDK creates and fills these fields. See the [signature field guide](https://www.nutrient.io/guides/dotnet/signatures/signature-field/fill-a-signature-field.md).

A visible digital signature (this tutorial’s second example) combines the first two: the cryptographic signature plus a visible appearance in the signed PDF.

## What signing a PDF in C# requires

Signing needs two inputs:

- **A digital ID** — A PKCS#12 file (`.pfx`/`.p12`) containing a certificate and its private key. Production documents use an ID issued by a certificate authority (CA); a self-signed certificate works for development and testing.

- **The SDK** — The signing API lives on the `GdPicturePDF` class, and one method call applies the signature and writes the output file.

Adobe Acrobat and other compatible readers can validate the resulting signature and show the supplied signer name, reason for signing, and changes since signing.

## Setup

Use the.NET 8 SDK for the commands below and a Nutrient.NET SDK license or demo key that includes DigitalSignatures and PDF Processing. Check the [system compatibility guide](https://www.nutrient.io/guides/dotnet/about/system-compatibility.md) for supported platforms and native dependencies.

Create a console project and install the SDK:

```bash

dotnet new console -n SignPdf -f net8.0
cd SignPdf
dotnet add package GdPicture.API

```

Place an unencrypted `source.pdf` and a `certificate.pfx` digital ID in the project directory. The visible example also needs a JPEG signature image named `source.jpg`. Use a test certificate and sample document while evaluating, and keep private keys and passwords out of source control.

Replace `Program.cs` with the shared setup below, enter the SDK key and PFX password, and append exactly one signing example. Run the examples separately. See the [downloads guide](https://www.nutrient.io/guides/dotnet/downloads.md) for evaluation options.

```csharp

using System;
using System.IO;
using GdPicture14;
using GdPicture14.Imaging;

const string licenseKey = "YOUR_LICENSE_KEY";
const string certificatePassword = "YOUR_PFX_PASSWORD";

static string RequireFile(string fileName)
{
    string path = Path.GetFullPath(fileName);
    if (!File.Exists(path))
        throw new FileNotFoundException($"Required input is missing: {path}", path);
    return path;
}

static void Check(GdPictureStatus status, string operation)
{
    if (status!= GdPictureStatus.OK)
        throw new InvalidOperationException($"{operation} failed: {status}");
}

static void Run(Action sign)
{
    try
    {
        sign();
    }
    catch (Exception error)
    {
        Console.Error.WriteLine($"Signing failed: {error.Message}");
        Environment.ExitCode = 1;
    }
}

```

After appending one example, run it from the project directory:

```bash

dotnet run

```

A successful run prints the output path. A failed run prints an error and exits with a nonzero status. SDK licensing failures can throw exceptions, while other operations return a status. The examples handle both. They write separate output files and leave `source.pdf` unchanged. A rerun overwrites the corresponding output file, so choose a new path to retain earlier results.

## Sign a PDF with an invisible digital signature

The minimal signing flow loads the document, sets the certificate, and applies the signature. Skipping the signature-position step makes the signature invisible. The PDF is cryptographically signed, but nothing is drawn on the page:

```csharp

Run(() =>
{
    string sourcePath = RequireFile("source.pdf");
    string certificatePath = RequireFile("certificate.pfx");
    LicenseManager licence = new LicenseManager();
    licence.RegisterKEY(licenseKey);
    using GdPicturePDF gdPicturePDF = new GdPicturePDF();
    Check(gdPicturePDF.LoadFromFile(sourcePath), "LoadFromFile");
    Check(gdPicturePDF.SetSignatureCertificateFromP12(certificatePath, certificatePassword), "SetSignatureCertificateFromP12");
    Check(gdPicturePDF.SetSignatureInfo("John Smith", "Document approval", "Vienna (Austria)", "john.smith@example.com"), "SetSignatureInfo");
    string outputPath = Path.GetFullPath("signed-invisible.pdf");
    Check(gdPicturePDF.ApplySignature(outputPath, PdfSignatureMode.PdfSignatureModeAdobePPKMS, false), "ApplySignature");
    Console.WriteLine($"Signed PDF saved to {outputPath}");
});

```

`SetSignatureInfo` is optional. The name, reason, location, and contact information it records are what signature validators display. The second parameter of `SetSignatureCertificateFromP12` is the digital ID’s password.

This signing API requires an unencrypted PDF.

## Sign a PDF with a visible text and image signature

A visible signature adds a positioning step and a drawing step. The example below places a signature box on the last page, draws the signer’s name as text, and stamps a handwritten-signature image next to it:

```csharp

Run(() =>
{
    string sourcePath = RequireFile("source.pdf");
    string certificatePath = RequireFile("certificate.pfx");
    LicenseManager licence = new LicenseManager();
    licence.RegisterKEY(licenseKey);
    using GdPicturePDF gdPicturePDF = new GdPicturePDF();
    Check(gdPicturePDF.LoadFromFile(sourcePath), "LoadFromFile");
    Check(gdPicturePDF.SetSignatureCertificateFromP12(certificatePath, certificatePassword), "SetSignatureCertificateFromP12");
    Check(gdPicturePDF.SetSignatureInfo("John Smith", "Document approval", "Vienna (Austria)", "john.smith@example.com"), "SetSignatureInfo");
    string imagePath = RequireFile("source.jpg");
    gdPicturePDF.SetMeasurementUnit(PdfMeasurementUnit.PdfMeasurementUnitCentimeter);
    gdPicturePDF.SetOrigin(PdfOrigin.PdfOriginTopLeft);
    int pageCount = gdPicturePDF.GetPageCount();
    Check(gdPicturePDF.GetStat(), "GetPageCount");
    Check(gdPicturePDF.SelectPage(pageCount), "SelectPage");
    float width = gdPicturePDF.GetPageWidth();
    Check(gdPicturePDF.GetStat(), "GetPageWidth");
    float height = gdPicturePDF.GetPageHeight();
    Check(gdPicturePDF.GetStat(), "GetPageHeight");
    // Reserve a 5 by 2 cm box with 2 cm right and bottom margins.
    if (width < 7 || height < 4)
        throw new InvalidOperationException("The last page is too small for this signature layout.");
    Check(gdPicturePDF.SetSignaturePos(width - 7, height - 4, 5, 2), "SetSignaturePos");
    // Use a standard PDF font without requiring an installed script font.
    string fontName = gdPicturePDF.AddStandardFont(PdfStandardFont.PdfStandardFontHelvetica);
    Check(gdPicturePDF.GetStat(), "AddStandardFont");
    var center = TextAlignment.TextAlignmentCenter;
    Check(gdPicturePDF.SetSignatureText("John Smith", fontName, 12, GdPictureColor.Blue, center, center, true), "SetSignatureText");
    string stampImage = gdPicturePDF.AddJpegImageFromFile(imagePath);
    Check(gdPicturePDF.GetStat(), "AddJpegImageFromFile");
    Check(gdPicturePDF.SetSignatureStampImage(stampImage), "SetSignatureStampImage");
    string outputPath = Path.GetFullPath("signed-visible.pdf");
    Check(gdPicturePDF.ApplySignature(outputPath, PdfSignatureMode.PdfSignatureModeAdobePPKMS, false), "ApplySignature");
    Console.WriteLine($"Signed PDF saved to {outputPath}");
});

```

What each call does:

- **`SetSignaturePos(x, y, width, height)`** places the signature bounding box on the currently selected page, in the unit set by `SetMeasurementUnit`. The example sets a top-left origin and uses `width - 7` and `height - 4` for a 5 × 2 cm box with 2 cm right and bottom margins. It rejects pages too small for that layout.

- **`SetSignatureText`** draws text inside the box. Passing an empty string displays the data from `SetSignatureInfo` instead.

- **`SetSignatureStampImage`** places an image resource (added with `AddJpegImageFromFile`) inside the box. When text is also set, the image sits at the right side of the box.

- **`ApplySignature`** signs the document and writes the output. The `PdfSignatureMode` enumeration selects the signature technology, and the final Boolean controls linearization of the output.

The same flow in VB.NET is in the [add a digital signature guide](https://www.nutrient.io/guides/dotnet/signatures/digital-signatures/add-a-digital-signature.md), along with signing from certificate stores and other sources.

## Verify it worked

Open the output PDF in a conforming reader. The signature panel shows the signer name, reason, and location from `SetSignatureInfo`, and it reports whether the document has been modified since signing. A self-signed development certificate shows as untrusted until its certificate is added to the reader’s trust store. A CA-issued digital ID also needs a certificate chain trusted by the reader. Validation depends on the reader’s trust settings, certificate status, and any timestamp and revocation information.

## Timestamps, hash algorithms, and certification levels

Timestamping, the hash algorithm, and permitted changes are configured between `SetSignatureCertificateFromP12` and `ApplySignature`:

- **Timestamping** — `SetSignatureTimestampInfo` adds trusted timestamp information to the signature, so its signing time doesn’t depend on the local clock.

- **Hash algorithm** — `SetSignatureHash` selects the digest algorithm used in signing, via the `PdfSignatureHash` enumeration.

- **Certification level** — `SetSignatureCertificationLevel` defines what changes remain permitted after signing (form filling, annotations, or none), via the `PdfSignatureCertificationLevel` enumeration.

The [add a digital signature guide](https://www.nutrient.io/guides/dotnet/signatures/digital-signatures/add-a-digital-signature.md) documents these options under additional signing settings.

## Beyond a single signature

- **Certifying a document** — A certification signature restricts what changes are allowed after signing (form filling, annotations, or nothing at all). See the [certify a document guide](https://www.nutrient.io/guides/dotnet/signatures/digital-signatures/certify-a-document.md).

- **Signing PDF/UA documents** — Signatures can be applied without breaking PDF/UA accessibility conformance. See [sign a PDF/UA document](https://www.nutrient.io/guides/dotnet/signatures/digital-signatures/sign-a-pdf-ua-document.md).

- **Signature workflows in an app UI** — For letting end users draw, type, or place signatures interactively, the [.NET PDF signing page](https://www.nutrient.io/sdk/dotnet/pdf-signing/) covers the UI-level options.

[Try Nutrient.NET SDK for free](https://www.nutrient.io/try/)

## Conclusion

To digitally sign a PDF in C#, load the PDF, set the PKCS#12 certificate, configure any visible appearance, and apply the signature. Compatible PDF readers can then validate the signature and its certificate chain. A certificate-backed signature gives attribution and tamper evidence that a plain image stamp can’t.

For the standards and legal side of digital signatures — including PDF Advanced Electronic Signatures (PAdES), the electronic IDentification, Authentication and trust Services (eIDAS) regulation, and the Electronic Signatures in Global and National Commerce (ESIGN) Act — see the [digital signatures explainer](https://www.nutrient.io/blog/digital-signatures.md).

## FAQ

#### How do I digitally sign a PDF in C#?

Load the PDF with the `GdPicturePDF` class, set the signing certificate from a PKCS#12 (`.pfx`) file with `SetSignatureCertificateFromP12`, optionally record signer details with `SetSignatureInfo`, and call `ApplySignature` to sign and save the document.

#### What do I need to sign a PDF programmatically?

A digital ID (a PKCS#12 file containing a certificate and private key) and a PDF library with a signing API. Production signatures use a CA-issued digital ID; a self-signed certificate works for development.

#### What is the difference between a visible and an invisible digital signature?

Both use the same certificate-based signing mechanism. A visible signature additionally draws an appearance (text, an image, or both) inside a bounding box on a page. Skipping the position step produces an invisible signature that still validates in the signature panel.

#### Can a digitally signed PDF be modified?

A signature protects the signed revision. Changes to signed content invalidate its integrity check, but permitted incremental updates, such as form filling or additional signatures, can preserve the earlier signature’s validity. A certification signature specifies which changes are allowed. Check the reader’s validation report for both signature validity and subsequent changes.

#### Does this work in VB.NET as well as C#?

Yes. The signing API is the same in C# and VB.NET, and the [add a digital signature guide](https://www.nutrient.io/guides/dotnet/signatures/digital-signatures/add-a-digital-signature.md) shows each sample in both languages.

#### What is the difference between a digital signature and an electronic signature in a PDF?

A digital signature is cryptographic: It binds a certificate-backed identity to the document and makes tampering detectable. An ink or image signature alone adds visual content but doesn’t cryptographically protect the PDF. The two can be combined. A visible digital signature shows a signature appearance backed by a certificate.

#### Can a timestamp be added to a PDF signature in C#?

Yes. Calling `SetSignatureTimestampInfo` before `ApplySignature` adds trusted timestamp information to the signature, so the signing time doesn’t depend on the signer’s local clock.
---

## 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)
- [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 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)
- [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)
- [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)
- [One segment per document found, in page order:](/blog/mailroom-automation-api.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)
- [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 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)

