Xeneus Thoth Reporting

xeneus-thothXeneus Thoth Reporting è un parser XML per la creazione e la stampa di report professionali e veloci. Tramite il linguaggio XML è possibile descrivere ogni parte del report, sia relativa alla pagina che agli elementi.

Questo parser, scritto interamente in C#, consente di inviare direttamente alla stampante il report creato oppure di salvarlo su file in uno dei seguenti formati: PDF, PS, JPEG, TIFFBMP. Per la generazione dei documenti PDF utilizza la libreria PDFsharp.

Gli “elementi” che è possibile utilizzare per la creazione del report sono:

  • Casella di testo
  • Casella di selezione
  • Griglia
  • Immagine
  • Linea
  • Multilinea
  • Rettangolo
  • Sezione

Ogni elemento ha i suoi attributi, quali ad esempio il tipo di penna, il tipo di riempimento od il font utilizzato, che è possibile definire tramite le proprietà di stile all’interno dell’elemento stesso od ereditando le informazioni da uno stile precedentemente definito.

E’ possibile avere varie dimensioni di pagina ed orientamenti all’interno dello stesso report.

All’interno del report è possibile identificare le seguenti sezioni generali:

  • Pagina di sfondo
  • Prima pagina del report
  • Prima pagina del record
  • Pagine successive alla prima del record
  • Ultima pagina del record
  • Ultima pagina del report

che vengono interpretate dal parser a seconda dello stato in cui si trova la generazione.

Oltre alle sezioni generali è possibile definire delle sezioni personalizzate che consentono di creare dei blocchi (sottoreport) e di assegnarli ovunque all’interno del report, in questo modo è possibile richiamare altri file XML consentendo di tenere separati report diversi ma di inglobare sezioni di uno dentro l’altro senza dover riscrivere il codice. Questo consente anche di evitare la modifica di parti comuni (ad esempio l’intestazione od il piè di pagina sulla carta intestata) ripetute su vari report, ma di scriverlo una sola volta ed associarlo su tutti i report in cui è richiesto.

La gestione di report multilingua non è più un problema, in quanto è possibile creare un solo report per tutte le lingue richieste e creare tante risorse quante sono le lingue da gestire. Ogni volta che si chiederà la generazione di un report, verrà passato anche un parametro che indica in che lingua stampare il report.

Ho volutamente evitato di dotare questo parser di funzioni di accesso al database o a file, perché ho voluto renderlo il più snello e veloce possibile nella creazione delle stampe. Ho preferito pertanto demandare al programma che lancia la stampa, l’onere di estrarre e formattare i dati in maniera coerente con quanto deve essere stampato. Tutti i dati vengono passati al report tramite delle collezioni “chiave-valore

Se si ha la necessità di stampare più documenti e poi concatenarli, è presente a questo scopo una funzione specifica che consente di eseguire questa operazione direttamente dal parser.

Il parser è in grado di gestire anche la parallelizzazione dei processi, generando N report contemporaneamente, riducendo notevolmente i tempi di esecuzione.

Nel codice di esempio seguente è possibile vedere come viene descritta la pagina, partendo dal nodo del documento alle risorse, stili, impostazioni ed elementi:

<Document Name="Invoice" ReportUnit="0">
  <PageSettings Size="8" Orientation="1" Width="0" Height="0">
    <Margins Top="12" Bottom="13" Left="20" Right="10" />
  </PageSettings>
  <Resources>
  <Styles>
  <LayoutPages>
    <LayoutPage Type="3" Visible = "True">
      <PageSettings Size="0" Orientation="0" Width="0" Height="0">
        <Margins Top="" Bottom="0" Left="0" Right="0" />
      </PageSettings>
      <Elements>
        <Section Name="" StyleName="Section" Visible="True" SectionSource="..\General\Common.xml" SectionName="Header" PosX="0" PosY="0" Width="180" Height="271" />
        <Section Name="" StyleName="Section" Visible="True" SectionSource="" SectionName="Invoice" PosX="0" PosY="96" Width="180" Height="75" />
        <Section Name="" StyleName="Section" Visible="True" SectionSource="" SectionName="Note" PosX="0" PosY="171" Width="180" Height="52" />
      </Elements>
    </LayoutPage>
  </LayoutPages>
</Document>

Nel codice di esempio seguente è possibile vedere un esempio di “Sezione“, con all’interno la parte relativa allo stile ed agli elementi:

<SectionStruct Name="CompanyInfo">
  <Styles>
    <Style Name="Default">
      <BrushStyle Type="0" Color="-16777216" />
      <FontStyle Name="Arial" Size="7" Italic="False" Bold="False" Underline="False" Strikeout="False" />
      <FormatStyle HorizontalAlign="1" VerticalAlign="1" />
      <PenStyle Color="-16777216" DashStyle="0" Width="0" />
    </Style>
  </Styles>
  <Elements>
    <Image Name="" StyleName="Default" Visible="True" Source="Logo.bmp" PosX="1" PosY="1" Width="18" Height="9" />
    <TextBox Name="" StyleName="" Visible="True" Value="Nuova Avventura S.r.l." PosX="18" PosY="6" Width="41" Height="5">
      <Brush Type="0" Color="-16777216" />
      <Style Name="Arial" Size="12" Italic="False" Bold="True" Underline="False" Strikeout="False" />
      <Format HorizontalAlign="1" VerticalAlign="1" />
      <Border Color="-16777216" DashStyle="0" Width="0" />
    </TextBox>
    <TextBox Name="" StyleName="Default" Visible="True" Value="Via Della Pace, 26 - 20100 MILANO (ITALY)%%CrLf%%Tel.: +39 02 12345678 - Fax: +39 02 234567" PosX="1" PosY="11" Width="58" Height="9" />
  </Elements>
</SectionStruct> 

Lascia un commento