Nutrient vs. QuestPDF: Complete comparison for .NET developers
Table of contents
Compare Nutrient .NET SDK and QuestPDF for .NET developers. QuestPDF generates PDFs with a fluent C# API. Nutrient processes documents with OCR, support for 100+ formats, and compliance features. This article includes feature comparisons, code examples, performance data, and use cases.
Quick decision — If you only need to generate PDFs and your revenue is under $1M, QuestPDF is cost-effective. If you need OCR, data extraction, or document processing, explore Nutrient features.
Key differences at a glance
Scope
QuestPDF: PDF generation only
Nutrient: Full document lifecycle (create, read, modify, extract, convert)
Data extraction
QuestPDF: None
Nutrient: Built-in ML-powered extraction for forms, tables, and key-value pairs
Direct feature comparison
| Feature | Nutrient .NET SDK | QuestPDF |
|---|---|---|
| PDF generation | ✅ Full support | ✅ Primary focus |
| Fluent C# API | Traditional API | ✅ Native fluent design |
| PDF editing | ✅ Content-level edits | ❌ Not supported |
| Text extraction | ✅ Advanced extraction | ❌ Not supported |
| OCR | ✅ Built-in OCR, 100+ languages (Arabic, Chinese, Cyrillic) | ❌ Not supported |
| Form processing | ✅ Create, fill, flatten | ❌ Not supported |
| Digital signatures | ✅ Certificates, timestamps | ❌ Not supported |
| Document operations | ✅ Merge, split | ✅ Merge, overlay, selection |
| ML-powered data extraction | ✅ Key-value pairs, tables | ❌ Not supported |
| Format support | ✅ 100+ formats | ❌ PDF only |
| PDF/A compliance | ✅ Full suite (A-1 to A-4) | ✅ Partial — A-2, A-3 (v2025.7+) |
| PDF/UA accessibility | ✅ Supported | ⚠️ Limited — basic tagging (v2025.7+) |
| Barcode generation/reading | ✅ Generate and read 1D/2D | ❌ Not built-in (requires external library) |
| Image preprocessing | ✅ Deskew, denoise, remove noise/lines/holes | ❌ Not supported |
| Document scanning | ✅ TWAIN/WIA scanner support | ❌ Not supported |
| OMR (optical mark recognition) | ✅ Extract checkboxes, bubbles | ❌ Not supported |
| MRZ extraction | ✅ Passports, IDs, visas, licenses | ❌ Not supported |
| Hyper-compression | ✅ MRC compression for scanned docs | ❌ Not supported |
| Desktop PDF viewer | ✅ WinForms/WPF viewer with search, bookmarks | ❌ Not applicable |
| Live preview | ❌ Not available | ✅ Hot-reload preview |
| Cross-platform | ✅ Windows, Linux, macOS (.NET 6/7/8, Framework 4.6.2) | ✅ Windows, Linux, macOS |
| Large document handling | ✅ Optimized for large files | ✅ Efficient, but watch large docs |
| Community | Commercial support with SLA | ✅ 13.5K GitHub stars (primarily one maintainer) |
| Licensing | Commercial | MIT (under $1M revenue) |
| Pricing | Contact for quote | $1,999/year commercial (revenue over $1M) |
Without Nutrient, you need separate libraries — a PDF reader, Tesseract for OCR, and ZXing for barcodes, plus converters and validators. Nutrient combines these in one SDK.
Advanced AI extraction — For LLM-powered natural language extraction and document classification, Nutrient offers the AI document processing SDK as a separate product with its own license. This adds advanced capabilities like intelligent invoice processing with machine learning (ML) templates and confidence scores.
Testing document features? Try Nutrient with your documents to evaluate OCR, extraction, and format support.
Code example comparisons
The following examples compare how each library handles common PDF tasks: generating a simple document, extracting text from an existing PDF, performing OCR on scanned documents, and merging multiple files.
Example 1: Generating a simple PDF with text
QuestPDF approach:
var document = Document.Create(document =>{ document.Page(page => { page.Content().Text("Your invoice content"); });});
// Generate PDF and save it to a file.document.GeneratePdf("document.pdf");
// Generate PDF and return it as a byte array.var byteArray = document.GeneratePdf();
// Generate PDF and save it to a stream.using var stream = new FileStream("document.pdf", FileMode.Create);document.GeneratePdf(stream);Nutrient .NET SDK approach:
Prerequisites — Install Nutrient .NET SDK via NuGet (GdPicture.API for .NET 8+ or GdPicture for .NET Framework 4.6.2) and register your license key. See the getting started section below for setup instructions.
using GdPicturePDF gdpicturePDF = new GdPicturePDF();// Create a new PDF document.gdpicturePDF.NewPDF();// Add a new A4-sized page to the document.gdpicturePDF.NewPage(PdfPageSizes.PdfPageSizeA4);// Set the font to be used.string fontHelvetica = gdpicturePDF.AddStandardFont(PdfStandardFont.PdfStandardFontHelvetica);// Add text to the page.gdpicturePDF.SetTextSize(12);gdpicturePDF.DrawText(fontHelvetica, 10, 10, "Your invoice content");// Save the PDF document.gdpicturePDF.SaveToFile("document.pdf");QuestPDF’s fluent API handles layout automatically. Nutrient requires explicit coordinates for direct control over positioning and page breaks.
Example 2: Extracting text from an existing PDF
QuestPDF:
Not supported — QuestPDF focuses on PDF generation only.
Nutrient .NET SDK:
using GdPicturePDF gdpicturePDF = new GdPicturePDF();// Load the source document.gdpicturePDF.LoadFromFile("input.pdf");
// Select the first page.gdpicturePDF.SelectPage(page);
// Extract the text from the page.string extractedText = gdpicturePDF.GetPageText();
// Save the extracted text to a file.File.WriteAllText("ExtractedText.txt", extractedText);Nutrient loads existing PDFs with LoadFromFile(). It then extracts text from each page using GetPageText(). The SetTextExtractionOptions() improves word boundary detection. QuestPDF generates new documents only — no text extraction from existing files.
Example 3: Performing OCR on a scanned PDF
QuestPDF:
Not supported — QuestPDF doesn’t include OCR capabilities.
using GdPicturePDF gdpicturePDF = new GdPicturePDF();
// Load the source document.gdpicturePDF.LoadFromFile("input.pdf");
// Run the OCR process on all pages with maximum multithreading support.gdpicturePDF.OcrPages("*", 0, "eng", "", "", 300);// Save the result in a PDF document.gdpicturePDF.SaveToFile(@"C:\temp\output.pdf");The code loads a scanned PDF and runs OCR to make the document searchable. The OcrPages() method recognizes text at 300 DPI using Nutrient’s OCR engine. QuestPDF has no OCR capabilities.
Example 4: Merging multiple PDFs
QuestPDF approach:
using QuestPDF.Fluent;using QuestPDF.Infrastructure;
// Option 1: Merge existing PDF files (version 2024.12+).DocumentOperation .LoadFile("document1.pdf") .MergeFile("document2.pdf") .MergeFile("document3.pdf") .Save("merged.pdf");
// Option 2: Merge generated documents with continuous page numbers. (1,2,3,4,5)Document .Merge( GenerateReport("Report 1", 5), GenerateReport("Report 2", 10), GenerateReport("Report 3", 15)) .UseContinuousPageNumbers() .GeneratePdf("merged.pdf");
// Option 3: Merge with original page numbers (each document keeps its own numbering: 1,2,1,2,3).Document .Merge( GenerateReport("Report 1", 5), GenerateReport("Report 2", 10), GenerateReport("Report 3", 15)) .UseOriginalPageNumbers() .GeneratePdf("merged-original.pdf");Nutrient .NET SDK approach:
using GdPictureDocumentConverter gdpictureConverter = new GdPictureDocumentConverter();IEnumerable<string> source = new List<string>(new string[] { @"C:\temp\source1.jpg", @"C:\temp\source2.xlsx" });gdpictureConverter.CombineToPDF(source, @"C:\temp\output.pdf", PdfConformance.PDF1_5);Nutrient’s CombineToPDF() accepts different file types — here, a JPG image and an Excel spreadsheet — and converts them before merging. The method handles 100+ formats in one operation. QuestPDF (version 2024.12+) only merges existing PDFs.
Performance characteristics
Each library optimizes for different use cases. QuestPDF focuses on fast PDF generation. Nutrient prioritizes document processing capabilities across multiple formats.
What QuestPDF optimizes for
- Fast PDF generation from code
- Efficient memory for typical documents (fewer than 1,000 pages)
- Fluent API reduces development time
- Hot-reload preview speeds up design iteration
Known limitations:
- Single-threaded document processing limits CPU scalability
- Large documents (6,000+ pages) can consume 7GB+ RAM without
.Lazyelement - Font embedding via SkiaSharp increases PDF file sizes
What Nutrient optimizes for
- Processing existing documents (reading, editing, extracting)
- Memory-efficient handling of multi-gigabyte files through disk streaming
- Smaller output files through advanced compression
- Multi-format support (100+ file types) with minimal overhead
Document processing performance:
| Operation | Nutrient .NET SDK | QuestPDF |
|---|---|---|
| Text extraction from a 100-page PDF | 1.8 seconds | Not supported |
| OCR on a 50-page scanned PDF | 42 seconds | Not supported |
| Format conversion (DOCX/images to PDF) | Supported | Not supported |
| Large file handling (1GB+ documents) | Optimized with streaming | Memory issues reported |
Performance varies based on document complexity, image content, and processing requirements. Test with your actual documents →
Pricing comparison
QuestPDF
Free tier
- Revenue under $1M
- Open source projects
- Individuals and non-profits
- No per-developer limits
Commercial licensing
- $1,999/year (revenue over $1M)
- Perpetual license available
- Community support
Note — QuestPDF uses an MIT-style license with revenue restrictions. It isn’t OSI-approved and may conflict with organizational open source policies.
Nutrient .NET SDK
Enterprise licensing
- Custom pricing (contact Sales)
- Enterprise support with SLA
- No revenue restrictions
- Flexible licensing models
- All features included (OCR, ML-powered extraction, 100+ formats)
- Optional AI document processing SDK available
Value add
- OCR, format conversion, compliance built-in
- Consolidates 3–5 separate libraries
- Reduces integration complexity
- Enterprise-grade support
Total cost of ownership comparison
| Factor | QuestPDF | Nutrient .NET SDK |
|---|---|---|
| Initial cost | $0–$1,999/year | Contact for pricing |
| Additional libraries needed | May need OCR, conversion tools | All-in-one solution |
| Support | Community forums | Enterprise support included |
| Updates | Regular open source releases | Commercial updates + patches |
| Compliance | Limited (basic PDF/A, PDF/UA) | Complete (PDF/A, PDF/UA, signatures) |
| Training | Minimal learning curve | Comprehensive documentation |
| Maintenance | Self-supported | Vendor-supported |
Getting started with Nutrient .NET SDK
Install via NuGet
From the command line:
# Create a new project (optional).dotnet new console -n <ProjectName>
# Add the package (.NET 8.0 or higher).dotnet add <ProjectName>.csproj package GdPicture.API
# For .NET Framework 4.6.2, use:# dotnet add <ProjectName>.csproj package GdPictureFrom Visual Studio: Right-click your project → Manage NuGet Packages → Search for GdPicture.API (for .NET 8.0+) or GdPicture (for .NET Framework 4.6.2) → Install.
Configure licensing:
using GdPicture14;
// Set license key once before using any SDK methods.// Use empty string for trial mode.LicenseManager licenseManager = new LicenseManager();licenseManager.RegisterKEY(""); // Empty string activates trial mode
// After purchasing, replace with your license key:// licenseManager.RegisterKEY("YOUR-LICENSE-KEY");Note — Nutrient .NET SDK uses the GdPicture namespace for historical reasons. When you see GdPicturePDF or GdPictureImaging in code examples, these refer to Nutrient’s PDF and imaging capabilities.
Additional Nutrient capabilities
- OCR and text extraction — Make scanned documents searchable (see example 3)
- ML-powered data extraction — Extract form fields, tables, and key-value pairs automatically
- Compliance — PDF/A archival conversion and PDF/UA accessibility tagging
- Redaction — Remove sensitive data with regex patterns or manual selection
- Digital signatures — Cryptographic signing with certificates and timestamps
- Format conversion — Convert Office documents, images, or CAD files to PDF
Refer to the Nutrient .NET SDK guides for implementation details.
Use case recommendations
The right choice depends on your project requirements. Here’s when each library fits best, plus a hybrid approach for teams that need both.
Choose QuestPDF for
| Use case | Description |
|---|---|
| Budget-conscious projects | Revenue under $1M. Generation-only scenarios with limited budget. |
| Pure PDF generation | Creating PDFs from code without manipulation, OCR, or processing. |
| Modern C# fluent API | Team prefers fluent, declarative APIs that mirror document structure. |
| Consistent layouts | Documents follow standard structures: invoices, reports, certificates. |
Choose Nutrient for
| Use case | Description |
|---|---|
| Reading/editing existing PDFs | Workflows require opening, modifying, or analyzing uploaded documents. |
| OCR and scanned documents | Processing scanned documents, text recognition, or image preprocessing (deskew, denoise). |
| Data extraction | ML-powered extraction from forms, invoices, or documents: key-value pairs, tables, checkboxes (OMR), and passport data (MRZ). |
| Multi-format handling | Processing Office files, images, CAD drawings, or DICOM medical images beyond PDFs. |
| Compliance requirements | Must meet PDF/A archival standards, PDF/UA accessibility, or apply digital signatures for regulated industries. |
| Scanner integration | Capture documents from physical scanners (TWAIN/WIA) directly in the application. |
Hybrid approach considerations
Some teams run both libraries:
- Use QuestPDF for generating new documents with complex layouts.
- Use Nutrient for processing, OCR, extraction, and compliance features.
- Generate with QuestPDF, and then load into Nutrient for enhancement.
Example implementation:
// Generate base document with QuestPDF's fluent API.Document.Create(container => { /* Complex layout */ }) .GeneratePdf("base.pdf");
// Load into Nutrient for advanced processing.using GdPicturePDF gdpicturePDF = new GdPicturePDF();gdpicturePDF.LoadFromFile("base.pdf");
// Add OCR, watermarks, or compliance features.gdpicturePDF.OcrPage("eng", ocrPath, "", 300);gdpicturePDF.SaveToFile("final.pdf");gdpicturePDF.CloseDocument();This requires both libraries in your project, adding complexity but using each tool’s strengths.
What Nutrient consolidates
Without Nutrient
- PDF library (iText/PdfSharp)
- OCR engine (Tesseract)
- Barcode reader (ZXing)
- Document converter
- Compliance validators
- Form processor
- Scanner integration
❌ 5–7 separate integrations
Integration challenges
- Multiple licenses to manage
- Different APIs to learn
- Version conflicts
- Support fragmentation
- Complex maintenance
- Higher total cost
With Nutrient
- Single SDK
- Unified API
- One license
- Enterprise support
- 100+ formats
- ML-powered data extraction
- Simplified architecture
Comparison summary
QuestPDF is built for generating PDFs from code with a fluent API — free under $1M revenue, $1,999/year for commercial use.
Nutrient delivers document processing across 100+ formats with ML-powered data extraction, OCR, and compliance features.
Try Nutrient free or contact Sales for pricing.
FAQ
Nutrient processes 100+ formats, including PDF, Word (DOC/DOCX), Excel (XLS/XLSX), PowerPoint, images (JPEG, PNG, TIFF), CAD files (DWG, DXF), and DICOM medical images. Convert between formats, extract content, apply OCR, and combine multiple file types into a single PDF. QuestPDF only generates PDFs and cannot read or convert other formats.
Nutrient’s OCR engine supports 100+ languages (including Arabic, Chinese, and Cyrillic scripts) with high accuracy for printed text. It includes image preprocessing (deskew, denoise, despeckle) to improve recognition on poor-quality scans. Process documents at various DPI settings (300 DPI for optimal results) and get searchable PDFs with selectable text. The SDK handles mixed-language documents and complex layouts. QuestPDF has no OCR capabilities.
Yes. Nutrient .NET SDK includes ML-powered data extraction that extracts key-value pairs, recognizes tables, and parses form fields automatically — all built into the base product. For advanced natural language extraction and document classification using LLMs, Nutrient offers the AI document processing SDK as a separate product with its own license. It includes preconfigured templates for common documents (invoices, receipts, purchase orders) and supports custom field definitions with validation rules. It also enables automated workflows for accounts payable, HR systems, and document management platforms.
Nutrient is optimized for multi-gigabyte documents through disk streaming and memory-efficient processing. It handles PDFs with thousands of pages without loading the entire file into memory. QuestPDF users report memory issues with large documents (6,000+ pages consuming 7GB+), while Nutrient’s architecture processes larger files on the same hardware.
Nutrient provides full PDF/A compliance (PDF/A-1 through PDF/A-4) for long-term archiving, PDF/UA for accessibility standards, and digital signature capabilities with certificate-based signing and timestamps. Validate existing documents against these standards, convert documents to compliant formats, and add required metadata. Used in regulated industries like healthcare, finance, and government. QuestPDF offers basic PDF/A-2 and PDF/A-3 support with limited PDF/UA tagging.
Yes. Nutrient .NET SDK supports Windows, Linux, and macOS with documented deployment patterns for Azure App Service, AWS Lambda, containerized environments (Docker/Kubernetes), and serverless architectures. The SDK includes guidance for configuring dependencies and optimizing performance in cloud environments. Install via NuGet. Licensing works across distributed cloud deployments.