Skip to content

majorsilence/My-FyiReporting

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Majorsilence Reporting (formerly My-FyiReporting)

If you have any question about Majorsilence Reporting or do you want to contribute a discussion group for Majorsilence Reporting is available here:

https://groups.google.com/d/forum/myfyireporting

Linux Mac Win Win(AppeyVeyor)
Master linux mac .github/workflows/windows.yml Build status appveyor

Documentation

See the projects wiki.

Download

See the downloads page.

Alternatively if you want keep up with the latest version you can always use Git

git clone https://github.com/majorsilence/My-FyiReporting.git

Introduction

Majorsilence Reporting is a powerful, open-source .NET reporting framework designed for developers who need to create, design, and deliver rich, reports. Supporting modern .NET versions (8.0), it provides a flexible and extensible platform for building reports from a variety of data sources. With a drag-and-drop designer, multiple viewer options, and cross-platform support, Majorsilence Reporting is ideal for both desktop and web applications. Whether you need to generate reports programmatically or empower users with a visual designer (windows only), this project offers the tools and documentation to get you started quickly.

The core of Majorsilence Reporting supports Linux and macOS for server-side application report generation. Only the WinForms-based designer and viewer are Windows-only.

Quick start

Add these nuget packages to your project.

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

If running on linux install the required fonts.

sudo apt install ttf-mscorefonts-installer

You are now ready to create and generate reports.

c# example connected to an sql database

See Database Providers.

using Majorsilence.Reporting.RdlCreator;

// One time per app instance
RdlEngineConfig.RdlEngineConfigInit();

string dataProvider = "[PLACEHOLDER/Json/Microsoft.Data.SqlClient/MySQL.NET/Firebird.NET 2.0/Microsoft.Data.Sqlite/PostgreSQL";
var create = new Majorsilence.Reporting.RdlCreator.Create();

var report = await create.GenerateRdl(dataProvider,
    connectionString,
    "SELECT CategoryID, CategoryName, Description FROM Categories",
    pageHeaderText: "DataProviderTest TestMethod1");

string filepath = System.IO.Path.Combine(Environment.CurrentDirectory, "PLACEHOLDER.pdf");
var ofs = new Majorsilence.Reporting.Rdl.OneFileStreamGen(filepath, true);
await report.RunGetData(null);
await report.RunRender(ofs, Majorsilence.Reporting.Rdl.OutputPresentationType.PDF);

c# example, create a pdf document

using Majorsilence.Reporting.RdlCreator;

// One time per app instance
RdlEngineConfig.RdlEngineConfigInit();

var document = new Majorsilence.Reporting.RdlCreator.Document()
{
    Description = "Sample report",
    Author = "John Doe",
    PageHeight = "11in",
    PageWidth = "8.5in",
    //Width = "7.5in",
    TopMargin = ".25in",
    LeftMargin = ".25in",
    RightMargin = ".25in",
    BottomMargin = ".25in"
}
.WithPage((page) =>
{
    page.WithHeight("10in")
    .WithWidth("7.5in")
    .WithText(new Text
    {
        Name = "TheSimplePageText",
        Top = ".1in",
        Left = ".1in",
        Width = "6in",
        Height = ".25in",
        Value = new Value { Text = "Text Area 1" },
        Style = new Style { FontSize = "12pt", FontWeight = "Bold" }
    });
});

using var fileStream = new FileStream("PLACEHOLDER.pdf", FileMode.Create, FileAccess.Write);
await document.Create(fileStream);

Development

Majorsilence Reporting is developed with the following workflow:

  • Nothing happens for weeks or months
  • Someone needs it to do something it doesn't already do
  • That person implements that something and submits a pull request
  • Repeat

If it doesn't have a feature that you want it to have, add it. If it has a bug you need fixed, fix it.

See Contribute.

Benchmarks

one

BenchmarkDotNet v0.15.2, macOS 26.0.1 (25A362) [Darwin 25.0.0] Apple M2, 1 CPU, 8 logical and 8 physical cores .NET SDK 9.0.200 [Host] : .NET 8.0.13 (8.0.1325.6609), Arm64 RyuJIT AdvSIMD Job-AKATUD : .NET 8.0.13 (8.0.1325.6609), Arm64 RyuJIT AdvSIMD

BuildConfiguration=Release-DrawingCompat RunStrategy=Throughput

Method Mean Error StdDev Ratio RatioSD Gen0 Gen1 Allocated Alloc Ratio
NestedJson 5.401 ms 0.0560 ms 0.0935 ms 0.99 0.03 390.6250 125.0000 3.12 MB 1.00
Threads Duration Source Calls/Sec Total Calls Errors
1 30 JsonDataProviderBenchmark 162 4,873 0
20 30 JsonDataProviderBenchmark 362 10,865 0
20 30 JsonDataProviderBenchmark 363 10,894 0
30 30 JsonDataProviderBenchmark 334 10,043 0
40 30 JsonDataProviderBenchmark 316 9,497 0
50 30 JsonDataProviderBenchmark 296 8,905 0

two

BenchmarkDotNet v0.15.2, Windows 11 (10.0.26100.6584/24H2/2024Update/HudsonValley) Intel Core i5-8350U CPU 1.70GHz (Max: 1.90GHz) (Kaby Lake R), 1 CPU, 8 logical and 4 physical cores .NET SDK 8.0.414 [Host] : .NET 8.0.20 (8.0.2025.41914), X64 RyuJIT AVX2 Job-AKATUD : .NET 8.0.20 (8.0.2025.41914), X64 RyuJIT AVX2

BuildConfiguration=Release-DrawingCompat RunStrategy=Throughput

Method Mean Error StdDev Median Ratio RatioSD Gen0 Gen1 Allocated Alloc Ratio
NestedJson 16.67 ms 0.796 ms 2.140 ms 15.84 ms 1.01 0.17 727.2727 272.7273 3.24 MB 1.00
Threads Duration Source Calls/Sec Total Calls Errors
1 30 JsonDataProviderBenchmark 34 1,009 0
20 30 JsonDataProviderBenchmark 64 1,920 0
20 30 JsonDataProviderBenchmark 63 1,893 0
30 30 JsonDataProviderBenchmark 58 1,739 0
40 30 JsonDataProviderBenchmark 49 1,497 0
50 30 JsonDataProviderBenchmark 51 1,546 0

three

BenchmarkDotNet v0.15.2, Linux Ubuntu 24.04.3 LTS (Noble Numbat) AMD Ryzen 5 3600 4.21GHz, 1 CPU, 12 logical and 6 physical cores .NET SDK 8.0.120 [Host] : .NET 8.0.20 (8.0.2025.41914), X64 RyuJIT AVX2 Job-AKATUD : .NET 8.0.20 (8.0.2025.41914), X64 RyuJIT AVX2

BuildConfiguration=Release-DrawingCompat RunStrategy=Throughput

Method Mean Error StdDev Ratio RatioSD Gen0 Gen1 Allocated Alloc Ratio
NestedJson 5.542 ms 0.1100 ms 0.2011 ms 1.00 0.05 359.3750 125.0000 2.94 MB 1.00
Threads Duration Source Calls/Sec Total Calls Errors
1 30 JsonDataProviderBenchmark 152 4,571 0
20 30 JsonDataProviderBenchmark 403 12,115 0
20 30 JsonDataProviderBenchmark 406 12,196 0
30 30 JsonDataProviderBenchmark 358 10,757 0
40 30 JsonDataProviderBenchmark 315 9,460 0
50 30 JsonDataProviderBenchmark 290 8,720 0