Si potrebbe provare Spartacus.
È una libreria .NET relativamente nuova, completamente scritta in C#. Può connettersi a molti database diversi e generare report in Excel e PDF.
ho caricato 3 file in Google Drive:
Per poter utilizzare Spartacus, è necessario fare riferimento System.Data e System.Xml pacchetti, così come Spartacus.dll.
Nel seguente esempio, ho creato report.pdf da template.xml in semplici passi:
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");
Si noti che non è necessario utilizzare gli oggetti Spartacus.Database. Se è possibile ottenere System.Data.DataTable con altri mezzi, è possibile passarlo all'oggetto Report.
Tuttavia, c'è un problema.Come si può vedere nel modello XML, per ogni colonna, è necessario sapere:
- Nome colonna (ovviamente)
- Titolo
- Allinea (sinistra, destra o centrale)
- Fill (cento , 100 la larghezza totale della larghezza della pagina meno dei margini)
- tipo (intero, reale, BOOLEAN, CHAR, DATE o STRING)
riempimento e tipo sono essenziali, e si mA Devi mantenere le informazioni su tutte le tue colonne. Se questo è troppo difficile da raggiungere, e si può ottenere solo nome di colonna e tipo, si può calcolare un'approssimazione basata solo su tipo, come la seguente:
- prodotto è di tipo stringa, riempimento di default = 30
- descrizione è di tipo STRING, riempimento predefinito = 30
- unità è di tipo STRING, riempimento predefinito = 30
- quantità è di tipo REAL, riempimento di default = 15
- total_cost è di tipo REAL, riempimento di default = 15
- unit_cost è di tipo REAL, riempimento di default = 15
la somma di tutti riempimento predefinito sono 30 + 30 + 30 + 15 + 15 + 15 = 135, superiore a 100. Così si può normalizzare a 100, in questo modo:
- Colonna fill = default Colonna di riempimento * (somma di inadempienza riempie/100)
Dopodiché, sarà necessario generare file template.xml dinamici con informazioni di campo dinamiche.
DISCLAIMER: Sono il creatore e manutentore di Spartacus.
Dato che si dispone già di HTML, suggerisco di dare un'occhiata a XMLWorker di iText: http://developers.itextpdf.com/examples/xml-worker/html-tables. Gli esempi sono in Java, ma dovrebbero essere abbastanza ovvi per C#. iTextSharp è la porta .NET di iText. Divulgazione: lavoro su iText Software. –
Interessante. Posso in qualche modo gestire la colonna che si adatta orizzontalmente? Voglio dire, se ci sono troppe colonne per rientrare in una pagina, posso spostarne alcune alla successiva? – kagelos
@kagelos Ho una soluzione che farà esattamente ciò che vuoi, ma richiede jquery. Quindi posso usare jquery e darti una soluzione? –