QuestPDF 2026.8.0

QuestPDF - Modern PDF library for C# developers

QuestPDF is a production-ready library that lets you design documents the way you design software: with clean, maintainable, strong-typed C# code.

Stop fighting with HTML-to-PDF conversion. Build pixel-perfect reports, invoices, and exports using the language and tools you already love.

The library is free for individuals, non-profits, open-source projects, and organizations under $1M in annual gross revenue. Read more

GitHub Stars and Stargazers

Nuget package download

QuestPDF License


Home Page

Quick Start

Real-world Invoice Tutorial

Features Overview

Pricing

License

NuGet


πŸš€ Quick start

Learn how easy it is to design, implement and generate PDF documents using QuestPDF. Effortlessly create documents of all types such as invoices and reports.

using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;

// set your license here:
// QuestPDF.Settings.License = LicenseType.Evaluation;

Document.Create(container =>
{
    container.Page(page =>
    {
        page.Size(PageSizes.A4);
        page.Margin(2, Unit.Centimetre);
        page.PageColor(Colors.White);
        page.DefaultTextStyle(x => x.FontSize(20));
        
        page.Header()
            .Text("Hello PDF!")
            .SemiBold().FontSize(36).FontColor(Colors.Blue.Medium);
        
        page.Content()
            .PaddingVertical(1, Unit.Centimetre)
            .Column(x =>
            {
                x.Spacing(20);
                
                x.Item().Text(Placeholders.LoremIpsum());
                x.Item().Image(Placeholders.Image(200, 100));
            });
        
        page.Footer()
            .AlignCenter()
            .Text(x =>
            {
                x.Span("Page ");
                x.CurrentPageNumber();
            });
    });
})
.GeneratePdf("hello.pdf");

The code above produces the following PDF document:

Preview of a PDF document showing the Hello World example

Quick Start Tutorial

Everything you need to generate PDFs

QuestPDF provides 60+ production-ready features for building complex, data-driven PDF documents with clean and maintainable C# code.

🧱 Layout: Page setup, headers, footers, watermarks, tables, rows, columns, lists, layers, inlined content, multi-column flow, sections, decorations

🎨 Visual Content: Rich text, fonts, colors, backgrounds, borders, rounded corners, shadows, lines, raster images, SVG, placeholders, canvas graphics

πŸ“ Positioning: Alignment, width, height, padding, aspect ratio, rotation, scaling, scale-to-fit, offset, flip, extend, shrink, unconstrained layout, Z-index

🌊 Content Flow: Page breaks, prevent page breaks, ensure space, show entire, repeat, show once, skip once, conditional rendering, stop paging

🧩 Dynamic Documents: Loops, conditions, reusable components, dynamic components, lazy loading, custom helpers, extension methods, strongly-typed models

🌍 Internationalization: RTL layout direction, bidirectional text, advanced text shaping, font fallback, multilingual documents, accessibility support

Explore All QuestPDF Features

Familiar Programming Patterns

Use your existing programming language and patterns to ship faster with less training.

Loops, conditionals, functions are natively supported. Leverage IntelliSense, inspections, navigation, and safe refactoring.

container.Column(column =>
{
    column.Item().Text("Order Items").Bold();

    if (Model.ShowSummary)
        column.Item().Element(ComposeOrderSummary);

    foreach (var item in Model.Items)
        column.Item().Element(c => ComposeItem(c, item));
});

Review document changes like any other code. Get clean diffs, PR approvals, and traceable history.

void ComposeItem(IContainer container, OrderItem item)
{
    container
        .Border(1, Colors.Grey.Darken2)
        .Background(item.HighlightColor)
-       .Padding(12)
+       .Padding(16)
        .Row(row =>
        {
            row.RelativeItem().Text(item.Name);
            row.AutoItem().Text($"{item.Price:F2} USD");
        });
}

Companion App

Accelerate development with live document preview and hot-reload capability. See your changes instantly without recompiling.

  • 🧭 Explore PDF document hierarchy and navigate its structure
  • πŸ” Quickly magnify and measure content
  • 🐞 Debug runtime exceptions with stack traces and code snippets
  • πŸ› οΈ Identify, understand and solve layout errors

Screenshot showing the QuestPDF Companion App

Learn about QuestPDF Companion App

Learn about QuestPDF Companion App

Enterprise-grade foundations

🧩 Dynamic Content Is Just Code Use your existing programming language and development patterns to ship faster with less training. Loops, conditionals, functions, reusable components, and data-driven generation are supported natively.

πŸ”€ Version Control Friendly Review document changes like any other code. Get clean diffs, pull request approvals, traceable history, and safer collaboration across your team.

✨ Ready for AI QuestPDF’s semantic Fluent API helps AI assistants generate layouts, refactor components, explain document structure, and troubleshoot issues more effectively.

🎯 Predictable Development Eliminate CSS debugging, browser quirks, and layout surprises common with HTML-to-PDF tools. What you code is what you get.

πŸ‘οΈ Source-available Entire QuestPDF source code is available for review and customization, ensuring transparency and compliance with your organization's requirements.

πŸ”’ Complete Data Privacy QuestPDF runs entirely within your infrastructure with no external API calls, internet requirement, or background data collection. As a company, we do not access, collect, store, or process your private data.

πŸ—οΈ Comprehensive Layout Engine A powerful layout engine built specifically for PDF generation. Gain full control over document structure, precise content positioning, and automatic pagination.

🌐 Advanced Language Support Create multilingual documents with full RTL language support, advanced text shaping, and bi-directional layout handling.

⚑ High Performance Generate thousands of pages per second while maintaining minimal CPU and memory usage. Perfect for high-throughput enterprise applications.

πŸ“¦ Optimized File Size Drastically reduce file sizes without compromising quality. Benefit from automatic font subsetting, optimal image compression, and efficient file compression.

Perform common PDF operations

Leverage a powerful C# Fluent API to create, customize, and manage your PDF documents with ease.

  • πŸ”— Merge documents
  • πŸ“Ž Attach files
  • βœ‚οΈ Extract pages
  • πŸ” Encrypt / decrypt
  • 🏷️ Extend metadata
  • 🚫 Limit access
  • ⚑ Optimize for Web
  • πŸ“‘ Overlay / underlay
DocumentOperation
    .LoadFile("input.pdf")
    .TakePages("1-10")
    .MergeFile("appendix.pdf", "1-z") // all pages
    .AddAttachment(new DocumentAttachment
    {
        FilePath = "metadata.xml"
    })
    .Encrypt(new Encryption256Bit
    {
        OwnerPassword = "mypassword",
        AllowPrinting = true,
        AllowContentExtraction = false
    })
    .Save("final-document.pdf");

Learn Document Operation API

Works everywhere you do

Deploy on any major operating system and integrate seamlessly with your favorite IDEs, cloud platforms, and development tools.

Platform Support
Operating Systems Windows, Linux, macOS
Frameworks .NET 6+ and .NET Framework 4.6.2+
Cloud Azure, AWS, Google Cloud, Others
Containers Docker, Kubernetes
IDEs Visual Studio, VS Code, JetBrains Rider, Others

Industry-standard PDF compliance

Generate PDF documents that meet the strictest archival and accessibility requirements. Every build is automatically validated using the open-source veraPDF and Mustang tools.

πŸ—„οΈ PDF/A (Archival)

  • Purpose: ISO 19005 standard for long-term preservation. Ensures PDFs remain readable and visually identical for decades without external dependencies.
  • Supported Standards: PDF/A-2b, PDF/A-2u, PDF/A-2a, PDF/A-3b, PDF/A-3u, PDF/A-3a

β™Ώ PDF/UA (Accessibility)

  • Purpose: ISO 14289 standard for universal accessibility. Includes full support for screen readers and assistive technologies for people with disabilities.
  • Supported Standards: PDF/UA-1

🧾 EN 16931 (E-Invoicing):

  • Purpose: European standard for electronic invoicing. Embeds structured invoice data (XML) within PDF documents for automated processing.
  • Supported Standards: ZUGFeRD, Factur-X

Fair and Sustainable License

A model that benefits everyone. Commercial licensing provides businesses with legal safety and long-term stability, while funding a feature-complete, unrestricted library for the open-source community.

  • Actively maintained with regular feature, quality, and security updates
  • Full source code available on GitHub
  • All features included in every tier without restrictions
  • Predictable pricing: no per-seat, per-server, or usage fees

The library is free for individuals, non-profits, open-source projects, and organizations under $1M in annual gross revenue.

QuestPDF Pricing

QuestPDF License Terms

See a real-world example

Follow our detailed tutorial and see how easy it is to generate a fully functional invoice with fewer than 250 lines of C# code.

  • Step-by-step guidance
  • Production-ready code
  • Best practices included

Preview of a PDF document being an output of the Real-World Invoice tutorial

Read Real-world Invoice Tutorial

Community QuestPDF

We are incredibly grateful to our .NET Community for their positive reviews and recommendations of the QuestPDF library. Your support and feedback are invaluable and motivate us to keep improving and expanding this project. Thank you for helping us grow and reach more developers!

Nick Chapsas: The Easiest Way to Create PDFs in .NET

Nick Chapsas The Easiest Way to Create PDFs in .NET

JetBrains: OSS Power-Ups: QuestPDF

JetBrains OSS Power-Ups: QuestPDF

No packages depend on QuestPDF.

This release is dedicated to performance, parallelism, and use of available resources. Documents render faster, allocate a fraction of the memory they used to, and scale across all available CPU cores. No code changes are required β€” existing documents benefit simply by upgrading the package.

The numbers below were measured on a MacBook Pro M5 (18-core CPU), using the invoice document from the Getting Started tutorial, across various levels of parallelism, over a sample of 5,000 documents.

  • Reduced allocated memory amount and allocated object count by 85%.
  • Improved single-threaded performance by around 15%.
  • Substantially improved parallel scaling: throughput previously peaked at 4 threads and flattened beyond that, and now scales with available CPU cores β€” with around 4x better scaling.
  • Improved performance and scalability for text-heavy documents.
  • Improved cache usage (mainly for fonts) and significantly reduced locking.

Other improvements:

  • Added support for soft hyphens: the library does not hyphenate text automatically, but soft hyphen characters (U+00AD) are now correctly interpreted as optional break points and rendered as hyphens when a line breaks.
  • Added the TextStyle.BreakAnywhere API, which allows a text span to break between any two characters, not only at word boundaries such as spaces or hyphens. Useful for content without natural break points, e.g. long URLs, identifiers, hashes, or file paths.
  • Improved the visual position of the underline and double underline text decorations.
  • Improved reliability of the Companion App integration: document previews are now refreshed from a consistent snapshot, and rendered pages are transferred more efficiently.
  • Increased the zlib compression level used for PDF generation from 1 to 3, which produces significantly smaller files (for text-heavy documents) with a minimal increase in generation time.
  • Updated the Skia native dependency to version m152.

Breaking change: XPS generation has been removed. The format was supported only on Windows, had several rendering issues that could not be reliably resolved, and had negligible adoption. The GenerateXps and GenerateXpsAndShow methods are still present, but calling them now results in a compilation error, and code compiled against an earlier version throws an exception at runtime. Please use PDF generation instead.

.NET 10.0

  • No dependencies.

.NET 5.0

  • No dependencies.

.NET 6.0

  • No dependencies.

.NET 8.0

  • No dependencies.

.NET Standard 2.0

Version Downloads Last updated
2026.9.0 7 09/14/2026
2026.8.0 14 08/25/2026
2026.7.3 24 08/13/2026
2026.7.2 12 07/31/2026
2026.7.1 21 07/11/2026
2026.7.0 18 07/05/2026
2026.6.1 20 06/25/2026
2026.6.0 25 06/10/2026
2026.5.0 40 05/14/2026
2026.2.4 22 05/14/2026
2026.2.3 27 05/14/2026
2026.2.3-alpha 32 05/14/2026
2026.2.2 36 05/14/2026
2026.2.1 31 05/14/2026
2026.2.0 37 05/14/2026
2025.12.4 23 05/14/2026
2025.12.3.1-alpha2 35 05/14/2026
2025.12.3.1-alpha 24 05/14/2026
2025.12.3 39 05/14/2026
2025.12.2 33 05/14/2026
2025.12.1 29 05/14/2026
2025.12.0 34 05/14/2026
2025.12.0-alpha4 34 05/14/2026
2025.12.0-alpha3 24 05/14/2026
2025.12.0-alpha2 35 05/14/2026
2025.12.0-alpha1 30 05/14/2026
2025.12.0-alpha0 34 05/14/2026
2025.7.4 35 05/14/2026
2025.7.3 31 05/14/2026
2025.7.2 29 05/14/2026
2025.7.1 34 05/10/2026
2025.7.0 34 05/14/2026
2025.6.0-rc0 34 05/14/2026
2025.5.1 37 05/14/2026
2025.5.0 26 05/14/2026
2025.4.4 34 05/14/2026
2025.4.3 30 05/14/2026
2025.4.2 29 05/14/2026
2025.4.1 35 05/14/2026
2025.4.0 30 05/14/2026
2025.1.7 36 05/14/2026
2025.1.6 22 05/14/2026
2025.1.5 21 05/14/2026
2025.1.4 29 05/14/2026
2025.1.3 41 05/14/2026
2025.1.2 32 05/14/2026
2025.1.1 32 05/14/2026
2025.1.0 36 05/14/2026
2025.1.0-rc0 32 05/14/2026
2025.1.0-alpha0 32 05/14/2026
2024.12.3 35 05/14/2026
2024.12.2 21 05/14/2026
2024.12.1 22 05/14/2026
2024.12.0 36 05/14/2026
2024.12.0-rc3 25 05/14/2026
2024.12.0-rc2 38 05/14/2026
2024.12.0-rc1 23 05/14/2026
2024.12.0-rc0 36 05/14/2026
2024.10.4 35 05/14/2026
2024.10.3 37 05/14/2026
2024.10.2 36 05/14/2026
2024.10.1 28 05/14/2026
2024.10.0 32 05/14/2026
2024.10.0-rc4 34 05/14/2026
2024.10.0-rc3 36 05/14/2026
2024.10.0-rc2 35 05/14/2026
2024.10.0-rc1 21 05/14/2026
2024.10.0-rc0 30 05/14/2026
2024.7.3 36 05/14/2026
2024.7.2 22 05/14/2026
2024.7.1 33 05/14/2026
2024.7.0 25 05/14/2026
2024.7.0-rc0 43 05/14/2026
2024.6.4 32 05/14/2026
2024.6.3 34 05/14/2026
2024.6.2 26 05/14/2026
2024.6.1 29 05/14/2026
2024.6.0 25 05/14/2026
2024.3.10 31 05/14/2026
2024.3.9 29 05/14/2026
2024.3.8 22 05/14/2026
2024.3.7 21 05/14/2026
2024.3.6 33 05/14/2026
2024.3.5 27 05/14/2026
2024.3.4 33 05/14/2026
2024.3.3 18 05/14/2026
2024.3.2 29 05/14/2026
2024.3.1 38 05/14/2026
2024.3.0 31 05/14/2026
2024.3.0-rc2 33 05/14/2026
2024.3.0-rc1 22 05/14/2026
2024.3.0-rc 38 05/14/2026
2024.3.0-beta1 34 05/14/2026
2024.3.0-beta 40 05/14/2026
2024.3.0-alpha 31 05/14/2026
2023.12.6 32 05/13/2026
2023.12.5 23 05/13/2026
2023.12.4 36 05/13/2026
2023.12.3 34 05/13/2026
2023.12.2 31 05/13/2026
2023.12.1 22 05/13/2026
2023.12.0 29 05/13/2026
2023.10.2 27 05/13/2026
2023.10.1 30 05/13/2026
2023.10.0 28 05/13/2026
2023.10.0-alpha0 32 05/13/2026
2023.9.1 19 05/14/2026
2023.9.0 31 05/14/2026
2023.6.3 30 05/13/2026
2023.6.2 23 05/13/2026
2023.6.1 30 05/13/2026
2023.6.0 24 05/13/2026
2023.5.3 22 05/13/2026
2023.5.2 32 05/13/2026
2023.5.1 32 05/13/2026
2023.5.0 23 05/13/2026
2023.4.2 35 05/13/2026
2023.4.1 32 05/13/2026
2023.4.0 24 05/13/2026
2022.12.15 33 05/13/2026
2022.12.14 20 05/13/2026
2022.12.13 30 05/13/2026
2022.12.12 31 05/13/2026
2022.12.11 30 05/13/2026
2022.12.10 32 05/13/2026
2022.12.9 35 05/13/2026
2022.12.8 27 05/13/2026
2022.12.7 34 05/13/2026
2022.12.6 31 05/13/2026
2022.12.5 35 05/13/2026
2022.12.4 32 05/13/2026
2022.12.3 22 05/13/2026
2022.12.2 20 05/13/2026
2022.12.1 23 05/13/2026
2022.12.0 34 05/13/2026
2022.11.0 25 05/13/2026
2022.11.0-alpha1 34 05/13/2026
2022.11.0-alpha0 38 05/13/2026
2022.9.1 29 05/13/2026
2022.9.0 31 05/13/2026
2022.9.0-alpha1 34 05/13/2026
2022.8.2 29 05/13/2026
2022.8.1 34 05/13/2026
2022.8.0 31 05/13/2026
2022.6.3 23 05/13/2026
2022.6.2 31 05/13/2026
2022.6.1 26 05/13/2026
2022.6.0 20 05/13/2026
2022.6.0-prerelease 31 05/13/2026
2022.5.0 30 05/13/2026
2022.4.1 29 05/13/2026
2022.4.0 29 05/13/2026
2022.4.0-alpha1 28 05/13/2026
2022.4.0-alpha0 28 05/13/2026
2022.3.1 28 05/13/2026
2022.3.0 19 05/13/2026
2022.2.7 28 05/13/2026
2022.2.6 30 05/13/2026
2022.2.5 27 05/13/2026
2022.2.4 33 05/13/2026
2022.2.3 28 05/13/2026
2022.2.2 29 05/13/2026
2022.2.1 28 05/13/2026
2022.2.0 33 05/13/2026
2022.2.0-beta1 29 05/13/2026
2022.1.0 19 05/13/2026
2022.1.0-beta5 25 05/13/2026
2022.1.0-beta4 30 05/13/2026
2022.1.0-beta3 32 05/13/2026
2022.1.0-beta2 31 05/13/2026
2022.1.0-beta1 19 05/13/2026
2022.1.0-beta0 28 05/13/2026
2022.1.0-alpha0 21 05/13/2026
2021.12.0 26 05/13/2026
2021.12.0-alpha1 19 05/13/2026
2021.12.0-alpha0 31 05/13/2026
2021.11.4 30 05/13/2026
2021.11.3 28 05/13/2026
2021.11.0-beta3 28 05/13/2026
2021.11.0-beta2 29 05/13/2026
2021.11.0-beta 32 05/13/2026
2021.10.1 19 05/13/2026
2021.10.0 34 05/13/2026
2021.10.0-beta.2 33 05/13/2026
2021.10.0-beta 29 05/13/2026
2021.9.3 29 05/13/2026
2021.9.2 29 05/13/2026
2021.9.1 26 05/13/2026
2021.9.0 28 05/13/2026
2021.8.0 31 05/13/2026
2021.5.2 28 05/13/2026
2021.4.0 21 05/13/2026
2021.3.1 30 05/13/2026
2021.3.0 32 05/13/2026
2021.2.0 19 05/13/2026
2021.1.0 28 05/13/2026
2020.11.0 22 05/13/2026