You can try Spartacus .
This is a relatively new .NET library written entirely in C #. It can connect to many different databases and generate reports in Excel and PDF.
I uploaded 3 files in Google Drive:
To use Spartacus, you need to refer to the System.Data and System.Xml packages, as well as to Spartacus.dll.
In the following example, I created report.pdf from template.xml in simple steps:
Spartacus.Database.Generic v_database; Spartacus.Reporting.Report v_report; System.Data.DataTable v_table; v_database = new Spartacus.Database.Postgresql("127.0.0.1", "database", "postgres", "password"); v_table = v_database.Query( "select 'Example of Report made with Spartacus' as title, " + " product, " + " description, " + " unit, " + " quantity, " + " total_cost, " + " unit_cost " + "from table", "REPORT"); v_report = new Spartacus.Reporting.Report(1, "template.xml", v_table); v_report.Execute(); v_report.Save("report.pdf");
Note that you do not need to use Spartacus.Database objects. If you can get System.Data.DataTable in other ways, you can pass it to the Report object.
However, there is a catch. As you can see in the XML template, for each column you need to know:
- Column Name (Obviously)
- Title
- Alignment (LEFT, RIGHT or CENTER)
- Fill (percentage, 100 - total page width minus margin width)
- Type (INTEGER, REAL, BOOLEAN, CHAR, DATE or STRING)
Filling and type are important, and you may need to store information about all of your columns. If this is too difficult to achieve, and you can only get the name and type of the column, you can calculate aproximation based only on the type, for example:
- the product is of type STRING, by default fill = 30
- the description is of type STRING, by default fill = 30
- unit is of type STRING, default fill = 30
- the quantity is of type REAL, by default fill = 15
- total_cost is of type REAL, by default fill = 15
- unit_cost is of type REAL, by default fill = 15
The sum of all filled by default is 30 + 30 + 30 + 15 + 15 + 15 = 135, more than 100. Thus, you can normalize to 100, thus:
- Column fill = default column fill * (sum of default values / 100)
After that, you will need to generate dynamic template.xml files with information about the dynamic field.
DISCLAIMER : I am the creator and maintainer of Spartak.