---
title: "How to generate PDFs in C# (2026)"
canonical_url: "https://www.nutrient.io/blog/how-to-generate-pdf-in-csharp/"
md_url: "https://www.nutrient.io/blog/how-to-generate-pdf-in-csharp.md"
last_updated: "2026-10-09T22:18:52.577Z"
description: "Generate PDFs in C# with Nutrient .NET SDK. Follow examples for fillable forms, paginated order tables, and image conversion, with setup and error checks."
---

# How to generate PDFs in C# with Nutrient .NET SDK

**TL;DR**

Nutrient.NET SDK (formerly GdPicture.NET) enables you to create PDFs from code, application data, or images. This tutorial builds a fillable form, draws an order table across pages, and converts an image to PDF. Each C# example uses the shared setup below. Linked guides cover HTML and Word-template generation.

A signup form needs interactive fields; an order report needs rows and page breaks; a scanned document starts as an image. The following examples show how to handle each with [Nutrient.NET SDK](https://www.nutrient.io/sdk/dotnet/). Choose the approach that matches your input and layout requirements.

## Which PDF generation approach fits the job?

| Source                         | Approach                                                           | Where it’s covered                                                                                                         |
| ------------------------------ | ------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------- |
| No source — build from code    | `NewPDF()` + draw APIs                                             | This tutorial                                                                                                              |
| Structured data (orders, rows) | Draw APIs in a loop + `NewPage()` pagination                       | This tutorial                                                                                                              |
| Images (scans, photos)         | `CreateGdPictureImageFromByteArray` + `AddImageFromGdPictureImage` | This tutorial                                                                                                              |
| HTML/CSS                       | HTML-to-PDF conversion                                             | [Invoices](https://www.nutrient.io/blog/how-to-generate-pdf-invoices-from-html-in-csharp/), [receipts](https://www.nutrient.io/blog/how-to-generate-pdf-receipts-from-html-in-csharp/), [reports](https://www.nutrient.io/blog/how-to-generate-pdf-reports-from-html-in-csharp/), [certificates](https://www.nutrient.io/blog/how-to-generate-pdf-certificates-from-html-in-csharp/) tutorials |
| Word templates with data       | Template-based generation                                          | [From a Word template guide](https://www.nutrient.io/guides/dotnet/pdf-generation/from-word-template.md)                                                                               |

## Setup

Use the.NET 8 SDK for the commands below and a Nutrient.NET SDK license or demo key with PDF processing enabled. The image example also requires the image documents feature. Check the [system compatibility guide](https://www.nutrient.io/guides/dotnet/about/system-compatibility.md) for supported operating systems and native dependencies.

Create a console project and install the SDK from NuGet:

```bash

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

```

Replace `Program.cs` with the shared setup below, enter your license key, and append exactly one of the three examples. The examples are alternatives, so run them separately. The [downloads guide](https://www.nutrient.io/guides/dotnet/downloads.md) explains the available packages and evaluation options.

```csharp

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using GdPicture14;

LicenseManager licence = new LicenseManager();
licence.RegisterKEY("YOUR_LICENSE_KEY");

string outputDirectory = Path.GetFullPath("output");
Directory.CreateDirectory(outputDirectory);

// Stop when an SDK operation reports a failure.
static void Check(GdPictureStatus status, string operation)
{
    if (status!= GdPictureStatus.OK)
    {
        throw new InvalidOperationException($"{operation} failed: {status}");
    }
}

```

Run the selected example from the project directory:

```bash

dotnet run

```

The PDF is written to the `output` directory. The image example also requires a `source.png` file in the project directory. These examples check document creation, drawing, and saving statuses so a failed SDK operation reports an error instead of silently continuing.

## Generate a PDF from scratch in C#

Create the document, set the coordinate system, add a page, and then draw. The example below produces a one-page signup form and saves it to disk. The form has a title in a text box, a red rectangle around it, two labels, and two fillable text fields:

```csharp

using GdPicturePDF gdpicturePDF = new GdPicturePDF();
// Create a new PDF document before setting the coordinate system.
Check(gdpicturePDF.NewPDF(), "NewPDF");
// Set the measurement unit and the origin.
gdpicturePDF.SetMeasurementUnit(PdfMeasurementUnit.PdfMeasurementUnitMillimeter);
gdpicturePDF.SetOrigin(PdfOrigin.PdfOriginTopLeft);
// Add a new A4-sized page to the document.
Check(gdpicturePDF.NewPage(PdfPageSizes.PdfPageSizeA4), "NewPage");
// Set the fonts to be used in the PDF document.
string fontHelvetica = gdpicturePDF.AddStandardFont(PdfStandardFont.PdfStandardFontHelvetica);
Check(gdpicturePDF.GetStat(), "Create font or form field");
string fontHelveticaBold = gdpicturePDF.AddStandardFont(PdfStandardFont.PdfStandardFontHelveticaBold);
Check(gdpicturePDF.GetStat(), "Create font or form field");
// Add the title.
Check(gdpicturePDF.SetTextSize(30), "SetTextSize");
Check(gdpicturePDF.DrawTextBox(fontHelveticaBold, 10, 5, 200, 25, TextAlignment.TextAlignmentCenter, TextAlignment.TextAlignmentCenter, "Dinner Signup Form"), "DrawTextBox");
// Draw a red rectangle around the title.
Check(gdpicturePDF.SetLineColor(255, 0, 0), "SetLineColor");
Check(gdpicturePDF.SetLineWidth(2), "SetLineWidth");
Check(gdpicturePDF.DrawRectangle(10, 5, 190, 20, false, true), "DrawRectangle");
// Add the form field descriptions.
Check(gdpicturePDF.SetTextSize(10), "SetTextSize");
Check(gdpicturePDF.DrawText(fontHelvetica, 15, 40, "Name"), "DrawText");
Check(gdpicturePDF.DrawText(fontHelvetica, 15, 50, "Dietary requirements"), "DrawText");
// Add the form fields.
int fieldNameId = gdpicturePDF.AddTextFormField(60, 35, 90, 8, "Name", "Enter your name", false, fontHelvetica, 8, 0, 0, 0);
Check(gdpicturePDF.GetStat(), "Create font or form field");
Check(gdpicturePDF.SetFormFieldMaxLen(fieldNameId, 50), "SetFormFieldMaxLen");
int fieldDietaryRequirementsId = gdpicturePDF.AddTextFormField(60, 45, 90, 30, "Dietary requirements", "Enter your dietary requirements", true, fontHelvetica, 8, 0, 0, 0);
Check(gdpicturePDF.GetStat(), "Create font or form field");
Check(gdpicturePDF.SetFormFieldMaxLen(fieldDietaryRequirementsId, 500), "SetFormFieldMaxLen");
// Save the PDF document.
Check(gdpicturePDF.SaveToFile(Path.Combine(outputDirectory, "output.pdf")), "SaveToFile");

```

What to know before adapting this to real documents:

- **The coordinate system is explicit.** `SetMeasurementUnit` picks the unit (millimeters here), and `SetOrigin` anchors coordinates to a corner (top-left here). In this example, `DrawText(font, 15, 40,...)` means 15 mm from the left and 40 mm from the top. Set both after `NewPDF()`, which resets these settings. Subsequent draw calls use them.

- **Fonts are registered, then referenced.** `AddStandardFont` returns a font resource name that the draw calls take as their first parameter. Standard PDF fonts need no embedding, and the `PdfStandardFont` enumeration lists them.

- **Text comes in two forms.** `DrawTextBox` places text inside a bounded, aligned box (good for titles and table cells). `DrawText` places it at a point (good for labels).

- **Form fields are built in.** `AddTextFormField` produces fillable fields. The output contains interactive fields that readers with AcroForm support can fill, without a separate forms step.

- **`SaveToFile` writes the result.** You can instead keep the document in memory to serve it from a web endpoint. The [save a file guide](https://www.nutrient.io/guides/dotnet/save-a-file.md) covers the stream variants.

The full walkthrough with parameter-by-parameter detail is in the [create PDFs from scratch guide](https://www.nutrient.io/guides/dotnet/pdf-generation/from-scratch.md).

## Generate a PDF from application data in C#

Most generation jobs render collections rather than a fixed layout: order lines, transactions, inventory rows. The same draw APIs handle this with a loop and a y-offset. The loop checks the available space and calls `NewPage()` when another page is needed. The example below renders a list of order items as a simple table. It has a header row, one line per item, and page breaks based on the available height, with space reserved for the total:

```csharp

var items = new List<OrderItem>
{
	new("Standing desk", 2, 499.00m),
	new("Monitor arm", 4, 89.50m),
	new("USB-C dock", 4, 129.00m),
	//... loaded from a database or API in a real application.
};

using GdPicturePDF gdpicturePDF = new GdPicturePDF();
Check(gdpicturePDF.NewPDF(), "NewPDF");
gdpicturePDF.SetMeasurementUnit(PdfMeasurementUnit.PdfMeasurementUnitMillimeter);
gdpicturePDF.SetOrigin(PdfOrigin.PdfOriginTopLeft);
Check(gdpicturePDF.NewPage(PdfPageSizes.PdfPageSizeA4), "NewPage");

string font = gdpicturePDF.AddStandardFont(PdfStandardFont.PdfStandardFontHelvetica);
Check(gdpicturePDF.GetStat(), "Create font or form field");
string fontBold = gdpicturePDF.AddStandardFont(PdfStandardFont.PdfStandardFontHelveticaBold);
Check(gdpicturePDF.GetStat(), "Create font or form field");

// Header row.
Check(gdpicturePDF.SetTextSize(11), "SetTextSize");
Check(gdpicturePDF.DrawText(fontBold, 15, 20, "Item"), "DrawText");
Check(gdpicturePDF.DrawText(fontBold, 120, 20, "Qty"), "DrawText");
Check(gdpicturePDF.DrawText(fontBold, 150, 20, "Price"), "DrawText");

// Reserve the bottom margin and space for the total on every page.
Check(gdpicturePDF.SetTextSize(10), "SetTextSize");
float y = 30;
const float rowHeight = 6;
const float bottomMargin = 15;
const float totalSpace = 12;
float lastRowY = gdpicturePDF.GetPageHeight() - bottomMargin - totalSpace;
Check(gdpicturePDF.GetStat(), "GetPageHeight");

foreach (var item in items)
{
	if (y > lastRowY)
	{
		Check(gdpicturePDF.NewPage(PdfPageSizes.PdfPageSizeA4), "NewPage");
		y = 20;
		Check(gdpicturePDF.SetTextSize(10), "SetTextSize");
	}

	Check(gdpicturePDF.DrawText(font, 15, y, item.Name), "DrawText");
	Check(gdpicturePDF.DrawText(font, 120, y, item.Quantity.ToString()), "DrawText");
	Check(gdpicturePDF.DrawText(font, 150, y, item.Price.ToString("C")), "DrawText");

	y += rowHeight;
}

// Total line.
decimal total = items.Sum(i => i.Quantity * i.Price);
Check(gdpicturePDF.SetTextSize(11), "SetTextSize");
Check(gdpicturePDF.DrawText(fontBold, 120, y + 6, "Total"), "DrawText");
Check(gdpicturePDF.DrawText(fontBold, 150, y + 6, total.ToString("C")), "DrawText");

Check(gdpicturePDF.SaveToFile(Path.Combine(outputDirectory, "order.pdf")), "SaveToFile");

record OrderItem(string Name, int Quantity, decimal Price);

```

For collections of short, single-line values, the loop tracks the vertical position, adds a page when needed, and resets `y` to 20. It uses the same drawing calls as the previous section. Language Integrated Query (LINQ) calculates the total, and `ToString("C")` formats currency using the current culture. When the document’s appearance matters more than how the data is assembled (branded invoices, styled reports), the from-HTML tutorials below are usually the better fit.

## Create a PDF from images in C#

Another common generation job is wrapping images (scans, photos, exported charts) into a PDF. Load the image with `GdPictureImaging`, create a PDF, and add the image to it:

```csharp

using GdPicturePDF gdpicturePDF = new GdPicturePDF();
using GdPictureImaging gdpictureImaging = new GdPictureImaging();
// Create a byte array from an image file.
byte[] byteArray = File.ReadAllBytes(Path.GetFullPath("source.png"));
// Load the source byte array.
int imageId = gdpictureImaging.CreateGdPictureImageFromByteArray(byteArray);
if (imageId == 0)
{
    throw new InvalidOperationException($"Load image failed: {gdpictureImaging.GetStat()}");
}

try
{
    // Create the output PDF document.
    Check(gdpicturePDF.NewPDF(), "NewPDF");
    // Add the image to the output PDF document.
    gdpicturePDF.AddImageFromGdPictureImage(imageId, false, true);
    Check(gdpicturePDF.GetStat(), "AddImageFromGdPictureImage");
    // Save the output PDF document.
    Check(gdpicturePDF.SaveToFile(Path.Combine(outputDirectory, "output.pdf")), "SaveToFile");
}
finally
{
    gdpictureImaging.ReleaseGdPictureImage(imageId);
}

```

Because the source is a byte array, this works the same for images from disk, uploads, database blobs, or HTTP responses. The [byte array guide](https://www.nutrient.io/guides/dotnet/pdf-generation/byte-array.md) covers the variants.

## Generating PDFs from HTML or templates

Data-driven business documents such as invoices, receipts, and reports are usually easier to style as HTML and convert than to draw coordinate by coordinate. That path has its own tutorials, one per document type: [invoices](https://www.nutrient.io/blog/how-to-generate-pdf-invoices-from-html-in-csharp/), [receipts](https://www.nutrient.io/blog/how-to-generate-pdf-receipts-from-html-in-csharp/), [reports](https://www.nutrient.io/blog/how-to-generate-pdf-reports-from-html-in-csharp/), and [certificates](https://www.nutrient.io/blog/how-to-generate-pdf-certificates-from-html-in-csharp/). For recurring documents whose layout lives in a Word file, the [Word template guide](https://www.nutrient.io/guides/dotnet/pdf-generation/from-word-template.md) fills placeholders with data instead. Use drawing APIs for precise positioning and interactive fields. Use HTML or Word templates to maintain the layout separately from the C# code.

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

## Conclusion

Generating a PDF in C# from scratch is a linear sequence: `NewPDF()`, `NewPage()`, register fonts, draw, `SaveToFile()`. An explicit coordinate system does the layout work, and the SDK also converts image bytes into PDF pages. The from-scratch example creates text and interactive form fields, while the order example draws text. The image example preserves raster content; making text in those images searchable requires a separate optical character recognition (OCR) step.

To compare libraries rather than learn the workflow, see the [C# PDF library comparison](https://www.nutrient.io/blog/best-csharp-pdf-library/). For the standards side of generated documents (PDF/A archival output, accessibility), see the [.NET generation guides](https://www.nutrient.io/guides/dotnet/pdf-generation.md).

## FAQ

#### How can a PDF be generated in C# without a source document?

Create a `GdPicturePDF` object; call `NewPDF()` and `NewPage()`; register fonts with `AddStandardFont`; and draw content with `DrawTextBox`, `DrawText`, and `DrawRectangle`. Then write the file with `SaveToFile()`. The example above, combined with the shared setup, produces a fillable one-page form this way.

#### How do coordinates work when drawing a PDF in C#?

`SetMeasurementUnit` selects the unit (such as millimeters), and `SetOrigin` anchors the coordinate system to a page corner. Every subsequent draw call positions content relative to that origin in that unit.

#### Can a C# application convert images to PDF?

Yes. Load the image bytes with `CreateGdPictureImageFromByteArray`, create a document with `NewPDF()`, and place the image with `AddImageFromGdPictureImage`. The byte-array input means uploads, blobs, and files all work the same way.

#### Should PDFs be generated from code or from HTML in C#?

Generate from code for precise coordinates and interactive form fields. Convert from HTML to reuse styled templates for invoices and reports. Both paths produce standard PDFs.

#### Are form fields in generated PDFs actually fillable?

Yes. `AddTextFormField` creates interactive AcroForm fields, so the generated document can be filled in PDF readers with AcroForm support. No separate form creation step is required.
---

## Related pages

- [The business case for accessibility: Five ways it drives enterprise value](/blog/5-ways-accessibility-drives-enterprise-value.md)
- [Accessibility Untangled Why It Matters Guide](/blog/accessibility-untangled-why-it-matters-guide.md)
- [Advanced Techniques For React Native Ui Components](/blog/advanced-techniques-for-react-native-ui-components.md)
- [`vector_store` holds your indexed documents (see the multimodal RAG post](/blog/agentic-rag.md)
- [Ai Assistant Agent Governance](/blog/ai-assistant-agent-governance.md)
- [How to build an AI agent for contract redlining against a compliance playbook](/blog/ai-contract-redlining-compliance-playbook.md)
- [Ai Document Automation Extraction To Action](/blog/ai-document-automation-extraction-to-action.md)
- [Ai Document Workflows Ocr Compliance Heavy Teams](/blog/ai-document-workflows-ocr-compliance-heavy-teams.md)
- [Ai Legal Assistant Document Authoring](/blog/ai-legal-assistant-document-authoring.md)
- [Ai Schema Generator Document Extraction](/blog/ai-schema-generator-document-extraction.md)
- [Amazon Textract Alternatives](/blog/amazon-textract-alternatives.md)
- [Start (clears any prior buffer), navigate the document, then stop into a file.](/blog/android-faster-pdf-rendering.md)
- [Android Pdf Out Of Memory Handling](/blog/android-pdf-out-of-memory-handling.md)
- [Angular File Viewer Pdf Image Office Files](/blog/angular-file-viewer-pdf-image-office-files.md)
- [Approval Workflow Software](/blog/approval-workflow-software.md)
- [Approvals Matrix](/blog/approvals-matrix.md)
- [Apryse To Nutrient Migration](/blog/apryse-to-nutrient-migration.md)
- [Auto Tagging And Document Accessibility In Dotnet Sdk](/blog/auto-tagging-and-document-accessibility-in-dotnet-sdk.md)
- [Simple PII redaction.](/blog/automated-pii-removal.md)
- [Azure Document Intelligence Alternatives](/blog/azure-document-intelligence-alternatives.md)
- [Best Ai Document Workflow Platforms](/blog/best-ai-document-workflow-platforms.md)
- [Best Document Ai Platforms](/blog/best-document-ai-platforms.md)
- [Best Document Classification Platforms](/blog/best-document-classification-platforms.md)
- [Best document parser for RAG: LlamaParse vs. Unstructured vs. Reducto vs. Nutrient](/blog/best-document-parser-llamaparse-unstructured-reducto.md)
- [Best Document Parsing Apis](/blog/best-document-parsing-apis.md)
- [Best Document Viewers](/blog/best-document-viewers.md)
- [Best Llm Document Understanding Platforms](/blog/best-llm-document-understanding-platforms.md)
- [Best Multilingual Ocr Software](/blog/best-multilingual-ocr-software.md)
- [Best Pdf Parsers For Rag](/blog/best-pdf-parsers-for-rag.md)
- [Best Salesforce Document Generation Apps](/blog/best-salesforce-document-generation-apps.md)
- [Best Secure Document Collaboration Platforms](/blog/best-secure-document-collaboration-platforms.md)
- [Bpm Guide](/blog/bpm-guide.md)
- [Bpm Tools](/blog/bpm-tools.md)
- [Build Vs Buy Document Extraction](/blog/build-vs-buy-document-extraction.md)
- [Business Automation](/blog/business-automation.md)
- [Capex Vs Opex](/blog/capex-vs-opex.md)
- [The CEO’s AI playbook: Why decision architecture beats model selection](/blog/ceo-ai-playbook-decision-architecture.md)
- [1. Extract and chunk the PDF.](/blog/chat-with-pdf.md)
- [Complete Guide To Pdfjs](/blog/complete-guide-to-pdfjs.md)
- [Construction Document Data Extraction](/blog/construction-document-data-extraction.md)
- [Convert One Drive Files To Pdf In Sharepoint](/blog/convert-one-drive-files-to-pdf-in-sharepoint.md)
- [Create And Edit Pdfs In Flutter](/blog/create-and-edit-pdfs-in-flutter.md)
- [Create Pdfs With React](/blog/create-pdfs-with-react.md)
- [Creating A Document Scanner With Ocr In Python](/blog/creating-a-document-scanner-with-ocr-in-python.md)
- [Creating And Filling Pdf Forms Programmatically In Javascript](/blog/creating-and-filling-pdf-forms-programmatically-in-javascript.md)
- [The CTO’s AI playbook: Why accountability architecture beats orchestration](/blog/cto-ai-playbook-accountability-architecture.md)
- [Digital Signatures](/blog/digital-signatures.md)
- [Digital Workflow Automation](/blog/digital-workflow-automation.md)
- [Docling Alternatives](/blog/docling-alternatives.md)
- [Document Ai Vs Ocr](/blog/document-ai-vs-ocr.md)
- [Document Authoring Audit Trail](/blog/document-authoring-audit-trail.md)
- [Document Extraction Confidence Scores](/blog/document-extraction-confidence-scores.md)
- [Document Extraction For Underwriting](/blog/document-extraction-for-underwriting.md)
- [Document Viewer](/blog/document-viewer.md)
- [Document Watermarking](/blog/document-watermarking.md)
- [Electronic signature API: How to sign PDFs programmatically](/blog/electronic-signature-api.md)
- [Emerging threats: Your logging system may be an agentic threat vector](/blog/emerging-threats-your-logging-system.md)
- [Extend Alternatives](/blog/extend-alternatives.md)
- [Extract Patient Data On Premises](/blog/extract-patient-data-on-premises.md)
- [app.py](/blog/extract-text-from-pdf-using-python.md)
- [Fillable Pdf](/blog/fillable-pdf.md)
- [Google Document Ai Alternatives](/blog/google-document-ai-alternatives.md)
- [How To Add Digital Signature To Pdf Using React](/blog/how-to-add-digital-signature-to-pdf-using-react.md)
- [How To Build A Dotnet Maui Pdf Viewer](/blog/how-to-build-a-dotnet-maui-pdf-viewer.md)
- [How To Build A Flutter Pdf Viewer](/blog/how-to-build-a-flutter-pdf-viewer.md)
- [or](/blog/how-to-build-a-javascript-pdf-viewer-with-pdfjs.md)
- [or](/blog/how-to-build-a-javascript-pdf-viewer.md)
- [How To Build A Nextjs Pdf Viewer](/blog/how-to-build-a-nextjs-pdf-viewer.md)
- [How To Build A Powerpoint Viewer Using Javascript](/blog/how-to-build-a-powerpoint-viewer-using-javascript.md)
- [Using Yarn](/blog/how-to-build-a-react-excel-viewer.md)
- [How To Build A React Native Pdf Viewer](/blog/how-to-build-a-react-native-pdf-viewer.md)
- [How To Build A React Powerpoint Viewer](/blog/how-to-build-a-react-powerpoint-viewer.md)
- [How To Build A Reactjs File Viewer](/blog/how-to-build-a-reactjs-file-viewer.md)
- [or](/blog/how-to-build-a-reactjs-pdf-viewer-with-react-pdf.md)
- [or](/blog/how-to-build-a-reactjs-pdf-viewer.md)
- [How To Build A Reactjs Viewer With Pdfjs](/blog/how-to-build-a-reactjs-viewer-with-pdfjs.md)
- [How To Build A Vuejs Pdf Viewer With Pdfjs](/blog/how-to-build-a-vuejs-pdf-viewer-with-pdfjs.md)
- [How To Build A Vuejs Pdf Viewer](/blog/how-to-build-a-vuejs-pdf-viewer.md)
- [How To Build An Android Pdf Viewer](/blog/how-to-build-an-android-pdf-viewer.md)
- [How To Build An Angular Pdf Viewer With Ng2 Pdf Viewer](/blog/how-to-build-an-angular-pdf-viewer-with-ng2-pdf-viewer.md)
- [How To Build An Angular Pdf Viewer With Pdfjs](/blog/how-to-build-an-angular-pdf-viewer-with-pdfjs.md)
- [How To Convert Docx To Pdf Using Javascript](/blog/how-to-convert-docx-to-pdf-using-javascript.md)
- [How To Convert Docx To Pdf Using Python](/blog/how-to-convert-docx-to-pdf-using-python.md)
- [How To Convert Html To Pdf Using Html2pdf](/blog/how-to-convert-html-to-pdf-using-html2pdf.md)
- [How To Convert Html To Pdf Using React](/blog/how-to-convert-html-to-pdf-using-react.md)
- [How To Convert Html To Pdf Using Wkhtmltopdf And Csharp](/blog/how-to-convert-html-to-pdf-using-wkhtmltopdf-and-csharp.md)
- [or](/blog/how-to-convert-html-to-pdf-using-wkhtmltopdf-and-python.md)
- [How To Convert Html To Pptx](/blog/how-to-convert-html-to-pptx.md)
- [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)
- [C# barcode scanner: How to scan and read 1D barcodes and QR codes](/blog/how-to-scan-barcodes-in-csharp.md)
- [Open an image.](/blog/how-to-use-tesseract-ocr-in-python.md)
- [From an HTML string.](/blog/html-in-pdf-format.md)
- [Html To Pdf In Javascript](/blog/html-to-pdf-in-javascript.md)
- [Intelligent Data Extraction](/blog/intelligent-data-extraction.md)
- [Invoice Approval Software](/blog/invoice-approval-software.md)
- [Javascript Document Editor](/blog/javascript-document-editor.md)
- [Javascript Pdf Editors](/blog/javascript-pdf-editors.md)
- [Javascript Pdf Libraries](/blog/javascript-pdf-libraries.md)
- [Landing Ai Alternatives](/blog/landing-ai-alternatives.md)
- [Langextract Vs Llamaindex Extraction Comparison](/blog/langextract-vs-llamaindex-extraction-comparison.md)
- [Linearized Pdf](/blog/linearized-pdf.md)
- [Uses OpenAI by default — set OPENAI_API_KEY.](/blog/llamaindex-vs-langchain-rag.md)
- [Llamaindex Vs Langchain Vs Haystack](/blog/llamaindex-vs-langchain-vs-haystack.md)
- [Llamaindex Workflows Vs Langgraph](/blog/llamaindex-workflows-vs-langgraph.md)
- [Llamaparse Alternatives](/blog/llamaparse-alternatives.md)
- [Low Code No Code Document Integrations](/blog/low-code-no-code-document-integrations.md)
- [Material Requisition](/blog/material-requisition.md)
- [or](/blog/merge-pdfs.md)
- [Migrating Observability Hyperdx To Dash0](/blog/migrating-observability-hyperdx-to-dash0.md)
- [Swift Package Manager](/blog/mobile-pdf-sdk.md)
- [`elements` come from your document parser — each has a type and content.](/blog/multimodal-rag.md)
- [Multipage Extraction Page Boundaries](/blog/multipage-extraction-page-boundaries.md)
- [Nutrient Flutter 6 Bindings Api](/blog/nutrient-flutter-6-bindings-api.md)
- [Nutrient Flutter Bindings Architecture](/blog/nutrient-flutter-bindings-architecture.md)
- [Nutrient Vs Conga Composer](/blog/nutrient-vs-conga-composer.md)
- [Ocr Api Comparison](/blog/ocr-api-comparison.md)
- [Online Document Viewer](/blog/online-document-viewer.md)
- [Open Pdf In Your Web App](/blog/open-pdf-in-your-web-app.md)
- [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)

