QuestPDF
QuestPDF is a modern library for PDF document generation. Its fluent C# API lets you design complex layouts with clean, readable code. Create documents using a flexible, component-based approach.
Install / Use
npx skills add QuestPDF/QuestPDFInstalls into whichever agent you are using.
README
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
<br> <br> <hr>Home Page • Quick Start • Invoice Tutorial • Features Overview • Pricing • License • NuGet
<hr> <br>🚀 Quick start
Learn how easy it is to design, implement and generate PDF documents using QuestPDF. <br> 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");
<br>
The code above produces the following PDF document:
<img width="300" alt="image" src="https://github.com/user-attachments/assets/46784e17-e8be-41d2-87f4-d6322c3b5e52" /> <br> <br> <br>Please help by giving a star ⭐
GitHub stars guide developers toward great tools. If you find this project valuable, please give it a star – it helps the community and takes just a second!
<img src="https://github.com/user-attachments/assets/96a1d6ee-5df8-48e3-9507-a3649f339b4a" width="700" /> <br> <br>Installation
QuestPDF is available as a NuGet package. You can install it through your IDE by searching for phrase QuestPDF. If you are not familiar how to do that, please refer to the following guides:
Or use the following command in your terminal:
dotnet add package QuestPDF
<br>
<br>
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.
<br>🧱 Layout:<br> Page setup, headers, footers, watermarks, tables, rows, columns, lists, layers, inlined content, multi-column flow, sections, decorations
<br>🎨 Visual Content:<br> Rich text, fonts, colors, backgrounds, borders, rounded corners, shadows, lines, raster images, SVG, placeholders, canvas graphics
<br>📐 Positioning:<br> Alignment, width, height, padding, aspect ratio, rotation, scaling, scale-to-fit, offset, flip, extend, shrink, unconstrained layout, Z-index
<br>🌊 Content Flow:<br> Page breaks, prevent page breaks, ensure space, show entire, repeat, show once, skip once, conditional rendering, stop paging
<br>🧩 Dynamic Documents:<br> Loops, conditions, reusable components, dynamic components, lazy loading, custom helpers, extension methods, strongly-typed models
<br>🌍 Internationalization:<br> RTL layout direction, bidirectional text, advanced text shaping, font fallback, multilingual documents, accessibility support
<br> <br> <br>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");
});
}
<br>
<br>
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
Enterprise-grade foundations
🧩 Dynamic Content Is Just Code<br> 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.
<br>🔀 Version Control Friendly<br> Review document changes like any other code. Get clean diffs, pull request approvals, traceable history, and safer collaboration across your team.
<br>✨ Ready for AI<br> QuestPDF’s semantic Fluent API helps AI assistants generate layouts, refactor components, explain document structure, and troubleshoot issues more effectively.
<br>🎯 Predictable Development<br> Eliminate CSS debugging, browser quirks, and layout surprises common with HTML-to-PDF tools. What you code is what you get.
<br>👁️ Source-available<br> Entire QuestPDF source code is available for review and customization, ensuring transparency and compliance with your organization's requirements.
<br>🔒 Complete Data Privacy<br> 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.
<br>🏗️ Comprehensive Layout Engine<br> A powerful layout engine built specifically for PDF generation. Gain full control over document structure, precise content positioning, and automatic pagination.
<br>🌐 Advanced Language Support<br> Create multilingual documents with full RTL language support, advanced text shaping, and bi-directional layout handling.
<br>⚡ High Performance<br> Generate thousands of pages per second while maintaining minimal CPU and memory usage. Perfect for high-throughput enterprise applications.
<br>📦 Optimized File Size<br> Drastically reduce file sizes without compromising quality. Benefit from automatic font subsetting, optimal image compression, and efficient file compression.
<br> <br>Perform common PDF operations
Leverage a powerful C# Fluent API to create, customize, and manage your PDF documents with ease.
- 🔗 Merge documents
Related Skills
obsidian
385.5kWork with Obsidian vaults using the official obsidian CLI: read/search/create/edit notes, tasks, links, properties, plugins.
skill-creator
385.5kCreate, edit, audit, tidy, validate, or restructure AgentSkills and SKILL.md files.
momen-cursurrules-prompt-file
40.5kCursor rules for building custom frontends with Momen.app as headless BaaS with GraphQL API, actionflows, AI agents, and Stripe integration.
graphify
104.2kTurn any codebase, with its docs, SQL schemas, configs, and PDFs, into a queryable knowledge graph. A /graphify skill for Claude Code, Cursor, Codex, and Gemini CLI: local deterministic AST parsing, every edge explained, no vector store.
