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.
var parser = new RDLParser(rdlXml); using var report = await parser.Parse(); await report.RunGetData(null); await report.RunRender(ofs, OutputPresentationType.PDF);
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.
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 · PostgreSQLCodes-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 multiplateformeMultiplateforme
Le rendu côté serveur fonctionne sous Linux, macOS et Windows. Parfaitement adapté aux conteneurs Docker et aux déploiements cloud.
Linux · macOS · Windows · DockerFormat 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 · PortableL'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.
Ajoutez-le à votre projet
Disponible sur NuGet. Ajoutez le moteur, puis éventuellement le package CRI pour la prise en charge des codes-barres.
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.
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);
// 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); }
/* 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);
/* 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);
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);
Wiki & guides
Le wiki GitHub couvre chaque sujet en détail — de l'installation et la migration à la configuration avancée des fournisseurs de données.
Accueil du wiki
Table des matières complète pour toutes les pages de documentation.
→ github.com/majorsilence/Reporting/wikiMigration vers v5
Changements majeurs, mises à jour des espaces de noms, et guide de migration vers l'API asynchrone depuis les versions précédentes.
→ Migration-to-v5Fournisseur de données JSON
Connectez les rapports à des fichiers JSON locaux. Objets imbriqués accessibles via une notation par tiret bas.
→ Json-Data-ProviderChaînes de connexion dynamiques
Remplacez la chaîne de connexion à l'exécution sans modifier le fichier RDL.
→ Set-Connection-String---RuntimeConcepteur Web
Intégrez le concepteur de rapports dans une application web pour permettre aux utilisateurs de créer des rapports dans le navigateur.
→ Web-DesignerContribuer
Comment forker, compiler, lancer les tests, et soumettre des pull requests au projet.
→ Contribute