Accessible by default
Every PDF is tagged: headings, paragraphs, tables with header cells, figures with alternative text, and a reading order. Ask for PDF/UA-1 or PDF/UA-2 and Tagua checks the template before any data is read.

Accessible by default
Every PDF is tagged: headings, paragraphs, tables with header cells, figures with alternative text, and a reading order. Ask for PDF/UA-1 or PDF/UA-2 and Tagua checks the template before any data is read.
Archival and e-invoicing
PDF/A-2b, PDF/A-3b, PDF/A-4 and PDF/A-4f, with embedded, subset fonts. Hybrid Factur-X and ZUGFeRD invoices carry their XML inside the PDF.
Templates are text
Bands, groups, tables, charts, barcodes and subreports in YAML or JSON. Easy to review, diff and generate, with a JSON Schema for your editor.
Any script
Right-to-left text, Arabic and Indic shaping with HarfBuzz, font fallback, and line breaking for Chinese, Japanese and Thai.
Migrate from RDLC
tagua import converts SSRS and ReportViewer reports into templates, and lists anything that needs a
second look.
Safe and fast
No SQL or code in templates: expressions are sandboxed and type-checked. No reflection, so it runs under native AOT.
title: Ordersculture: en-USdata: orders: { fields: { Customer: string, Total: decimal } }body: detail: - layout: row content: - { type: text, value: "{Customer}", width: 3fr } - { type: text, value: "{Total:C}", width: 1fr, align: end } reportFooter: - content: - { type: text, value: "Total {Sum(Total):C}", fontWeight: bold, align: end }using Tagua;using Tagua.Fill;using Tagua.Pipeline;using Tagua.Serialization;
TaguaSettings.License = LicenseType.Community; // once, at startup (see the licensing terms)
var report = CompiledReport.Compile(TemplateLoader.LoadFile("orders.report.yaml"));var inputs = new ReportInputs{ Data = new Dictionary<string, IDataSet> { ["orders"] = DataSources.FromRows([ new Dictionary<string, object?> { ["Customer"] = "Contoso", ["Total"] = 1250.00m }, new Dictionary<string, object?> { ["Customer"] = "Fabrikam", ["Total"] = 480.50m }, ]), }, // Fonts, images and subreports named in the template are opened from here. Resources = new DirectoryResourceResolver("."),};
await using var pdf = File.Create("orders.pdf");var result = await Reports.RenderPdfAsync(report, inputs, pdf);foreach (var diagnostic in result.Diagnostics) Console.WriteLine(diagnostic);
Every image on this site is a page that Tagua rendered from the templates in its repository.






Tagua is free for companies with fewer than 100 people and less than USD 1 million in revenue, for noncommercial use, and for a 32-day evaluation. Larger companies buy a Professional or Enterprise license. See licensing.