Du C# en entrée.
Des rapports en sortie.

Un moteur RDL open source pour .NET 8 & 10. PDF, Excel, HTML, CSV et plus — depuis SQL, JSON, ou du C# pur. Apache 2.0, plus des briques tri-licenciées.

$ dotnet add package Majorsilence.Reporting.RdlEngine.SkiaSharp
Program.cs entrée
var parser = new RDLParser(rdlXml);
using var report = await parser.Parse();
await report.RunGetData(null);
await report.RunRender(ofs,
  OutputPresentationType.PDF);
report.pdf sortie
Synthèse des ventes — T2 2026
Généré le 2026-06-11 · page 1 sur 4
RégionUnitésRevenu
Amérique du Nord12 4081,24 M$
Europe9 1120,97 M$
Asie-Pacifique7 6540,81 M$
Total29 1743,02 M$
PDF XLSX HTML CSV XML TIFF MHT
7+
Formats de sortie
10+
Sources de données
10
Types de codes-barres / QR
.NET 8 & 10
Multiplateforme
Apache 2.0
Open source

Tout ce qu'il faut pour le reporting .NET

Des simples factures PDF aux rapports multi-pages complexes avec codes-barres, graphiques et données dynamiques — le tout depuis une seule bibliothèque.

📄

Export multi-format

Générez n'importe quel rapport en PDF, Excel (xlsx), HTML, CSV, RTF et XML à partir d'une seule récupération de données. Un seul appel, tous les formats.

PDF XLSX HTML CSV RTF
🗄️

Sources de données flexibles

Connectez-vous à SQLite, SQL Server, PostgreSQL, MySQL, Firebird, des fichiers JSON, XML, ou injectez directement des données depuis des objets C#.

Microsoft.Data.Sqlite · Json · SQL · PostgreSQL
📦

Codes-barres & QR Codes

10 types de codes-barres CRI intégrés via ZXing.Net : QR Code, Code 128, Code 39, Data Matrix, Aztec, PDF417, ITF-14, et plus encore.

Custom Report Items (CRI)
🖥️

Concepteur visuel

Concepteur de rapports par glisser-déposer sous Windows. Concevez visuellement des fichiers RDL, puis générez-les côté serveur sur n'importe quel OS.

Concepteur Windows · Rendu multiplateforme
🌐

Multiplateforme

Le rendu côté serveur fonctionne sous Linux, macOS et Windows. Parfaitement adapté aux conteneurs Docker et aux déploiements cloud.

Linux · macOS · Windows · Docker

Format de rapport RDL

Basé sur le standard ouvert RDL (Report Definition Language). Les rapports sont des fichiers XML — pratiques pour le contrôle de version et portables.

Standard ouvert · XML · Portable

L'alternative moderne aux solutions de reporting historiques

Crystal Reports nécessite .NET Framework et une licence commerciale. SSRS nécessite SQL Server et un serveur Windows dédié. Majorsilence Reporting est un package NuGet qui fonctionne partout où .NET fonctionne.

Majorsilence
Cette bibliothèque
Crystal Reports SSRS FastReport /
DevExpress
Licence Cœur Apache 2.0, briques tri-licenciées MIT/BSD — gratuit Commercial, par poste Nécessite une licence SQL Server Commercial, par poste
.NET 8 / 10 Support complet .NET Framework uniquement Rendu seulement (partiel) Pris en charge
Linux / Docker Multiplateforme Windows uniquement Windows Server uniquement Variable selon le produit
Déploiement Package NuGet Runtime redistribuable Serveur de rapports dédié Package NuGet
Format de rapport RDL ouvert (XML) Binaire .rpt (propriétaire) RDL ouvert (XML) Propriétaire
Formats de sortie PDF, XLSX, HTML, CSV, RTF, XML, TIFF, MHT PDF, Excel, Word, HTML PDF, Excel, Word, HTML, CSV PDF, Excel, Word, HTML
Injecter des objets C# SetData() Limité Limité Variable
Portail de rapports intégré À construire vous-même Crystal Reports Server (coût supplémentaire) Inclus Certains produits en incluent un
Open source GitHub
🔄

Migration depuis Crystal Reports ou SSRS ?

Les rapports SSRS utilisent le même format RDL ouvert — beaucoup s'affichent avec Majorsilence Reporting sans modification. Les fichiers Crystal Reports .rpt nécessitent une conversion, mais les rapports tabulaires simples se migrent facilement.

Lire le guide de migration →

Ajoutez-le à votre projet

Disponible sur NuGet. Ajoutez le moteur, puis éventuellement le package CRI pour la prise en charge des codes-barres.

$ dotnet add package Majorsilence.Reporting.RdlEngine.SkiaSharp
$ dotnet add package Majorsilence.Reporting.RdlCri.SkiaSharp
$ dotnet add package Majorsilence.Reporting.RdlCreator.SkiaSharp

Opérationnel en quelques minutes

Appelez RdlEngineConfigInit() une fois au démarrage, chargez un fichier RDL, puis générez le rendu dans n'importe quel format.

Générer le rendu d'un rapport SQLite en PDF C#
using Majorsilence.Reporting.Rdl;

// À appeler une fois par instance de l'application
RdlEngineConfig.RdlEngineConfigInit();

var baseDir = AppContext.BaseDirectory;
var dbPath  = Path.Combine(baseDir, "mydata.db");
var outPath = Path.Combine(baseDir, "report.pdf");

var rdlXml = (await File.ReadAllTextAsync("Report.rdl"))
    .Replace("mydata.db", dbPath);

var parser = new RDLParser(rdlXml) { Folder = baseDir };
using var report = await parser.Parse();

await report.RunGetData(null);
var ofs = new OneFileStreamGen(outPath, true);
await report.RunRender(ofs, OutputPresentationType.PDF);
Exporter en PDF, Excel, CSV et HTML en un seul passage C#
// RunGetData une seule fois, puis RunRender pour chaque format.
await report.RunGetData(null);

foreach (var (filename, format) in new[] {
    ("report.pdf",  OutputPresentationType.PDF),
    ("report.xlsx", OutputPresentationType.Excel2007),
    ("report.csv",  OutputPresentationType.CSV),
    ("report.html", OutputPresentationType.HTML),
}) {
    var ofs = new OneFileStreamGen(filename, true);
    await report.RunRender(ofs, format);
}
Lire des données depuis un fichier JSON local RDL + C#
/* Dans la DataSource du RDL */
<ConnectionProperties>
  <DataProvider>Json</DataProvider>
  <ConnectString>file=employees.json</ConnectString>
</ConnectionProperties>

var rdlXml = (await File.ReadAllTextAsync("Employees.rdl"))
    .Replace("employees.json", Path.Combine(baseDir, "employees.json"));

var parser = new RDLParser(rdlXml) { Folder = baseDir };
using var report = await parser.Parse();
await report.RunGetData(null);
await report.RunRender(new OneFileStreamGen("out.pdf", true), OutputPresentationType.PDF);
Ajouter un QR Code ou un code-barres à un rapport (CRI) RDL + C#
/* QrCode · BarCode128 · BarCode39 · DataMatrix · AztecCode · Pdf417 · ITF-14 */
<CustomReportItem Name="ProductQR">
  <Type>QrCode</Type>
  <CustomProperties>
    <CustomProperty>
      <Name>Code</Name>
      <Value>=Fields!ProductName.Value</Value>
    </CustomProperty>
  </CustomProperties>
</CustomReportItem>

var parameters = new Dictionary<string, string>
    { ["BarcodeType"] = "DataMatrix" };
await report.RunGetData(parameters);
Injecter des données depuis des objets C# plutôt qu'une requête en direct C#
record SaleRecord(string Product, string Region, decimal Amount, int Quantity);

var salesData = new List<SaleRecord>
{
    new("Widget A", "North", 1250.00m, 50),
    new("Widget B", "South", 840.50m,  33),
};

await report.DataSets["Data"].SetData(salesData);
await report.RunGetData(null);
await report.RunRender(ofs, OutputPresentationType.PDF);