Differenze tra le versioni di "Guida ai report"

Da Gambas-it.org - Wikipedia.
 
(16 versioni intermedie di 4 utenti non mostrate)
Riga 1: Riga 1:
Con questa potente classe è possibile creare dei report professionali ed esteticamente accattivanti in pochissimo tempo. PdfWriter nasce da un porting fatto da Luigi Carlotto (MD9327) dalla famosa libreria php “FPDF”. Le funzioni sono molto simili, si può prendere spunto dal sito: http://www.fpdf.org/ .  
+
Con questa potente classe è possibile creare dei report professionali ed esteticamente accattivanti in pochissimo tempo. PdfWriter nasce da un porting fatto da Luigi Carlotto (MD9327) dalla famosa libreria php “FPDF”. Le funzioni sono molto simili, si può prendere spunto dal sito [http://www.fpdf.org/ www.fpdf.org] .  
Per l'utilizzo, basta solo copiare nel nostro progetto la classe “PdfWriter” e “PdfWriterfont”.  
+
Per l'utilizzo, basta solo copiare nel nostro progetto le classi '''PdfWriter''' e '''PdfWriterfont'''. Per ogni report che vogliamo creare, aggiungiamo una ''sottoclasse'' a PdfWriter e per fare ciò basta creare una nuova classe e scrivere all'inizio:
Per ogni report che vogliamo creare, aggiungiamo una “sottoclasse” a PdfWriter, per fare ciò basta creare una nuova classe e scrivere all'inizio “INHERITS PdfWriter”. In questa classe vanno inserite tre funzioni:
 
PUBLIC SUB Header()
 
PUBLIC FUNCTION Data()
 
PUBLIC FUNCTION Footer()
 
1) Header (che sarebbe l'intestazione della stampa e si ripete su tutte le pagine)
 
2) Data ( il corpo della pagina e nel caso che il testo superi tutto lo spazio aggiunge una pagina successiva)
 
3) Footer(la fine della pagina o piè di pagina e si ripete su tutte le pagine)
 
  
Dentro queste funzioni possiamo inserire testi in vari formati e stili, linee, cerchi, rettangoli e altro, inoltre gestisce anche i codici a barre.
+
  INHERITS PdfWriter
Andiamo, per esempio, a mettere un titolo nel nostro report la “sottoclasse” la chiamiamo strubrica:
 
Entriamo nella classe appena creata e sotto la stringa “INHERITS PdfWriter” creiamo la funzione Header.
 
  
PUBLIC SUB Header()
+
In questa classe vanno inserite tre funzioni:
  ME.SetX(0)
 
  ME.SetY(5)
 
  ME.SetFont("Arial", "BI", 20)
 
  ME.Cell(160, 6, "Rubrica", FALSE, 0, "L", FALSE)
 
  ME.SetLineWidth(0.2)     
 
  ME.Line(10, 17, 200, 17)
 
END
 
  
Andiamo a impostare la posizione dove mettere il titolo con setx e sety impostando le coordinate x e y.
+
PUBLIC SUB Header()
Impostiamo il font con setfont
 
Andiamo a scrivere il titolo con Cell. Questo comando accetta in ordine:
 
  
w : Larghezza della cella. Se 0, la cella si estende dalla parte del margine destro.
+
PUBLIC FUNCTION Data()
  
H : Altezza della cella. Valore di default: 0.
+
PUBLIC FUNCTION Footer()
  
txt : Stringa da stampare. Valore di default: stringa vuota.
+
In particolare:
  
Border : Indica se bisogna tracciare i bordi attorno alla cella. Il valore può essere sia un numero:
+
# '''Header''' è l'intestazione della stampa e si ripete su tutte le pagine;
0: nessun bordo
+
# '''Data''' è il corpo della pagina e nel caso che il testo superi tutto lo spazio aggiunge una pagina successiva;
1: cornice
+
# '''Footer''' è la fine della pagina o piè di pagina e si ripete su tutte le pagine.
-o una stringa contenente alcuni o tutti i seguenti caratteri (in qualsiasi ordine):
 
L: sinistro
 
T: superiore
 
R: destro
 
B: inferiore
 
Valore di default: 0.  
 
  
ln :Indica la posizione corrente dopo la chiamata. Valori possibili sono:
+
Dentro queste funzioni possiamo inserire testi in vari formati e stili, linee, cerchi, rettangoli e altro, inoltre possiamo gestire anche i codici a barre. Andiamo, per esempio, ad inserire un titolo nel nostro report; la ''sottoclasse'' la chiamiamo ''strubrica''.
0: a destra
+
Entriamo nella classe appena creata e sotto la stringa:
1: all'inizio della linea successiva
 
2: in basso
 
Inserire 1 equivale a inserire 0 e chiamare Ln() immediatamente dopo. Valore di default: 0.
 
  
align : Permette di centrare o allineare il testo. Possibili valori sono:
+
INHERITS PdfWriter
L o stringa vuota: allineamento a sinistra (valore di default)
 
C: centrato
 
R: allineamento a destra
 
  
fill : Indica se lo sfondo della cella deve essere disegnato (true) o deve essere trasparente (false).        Valore di default: false.
+
creiamo la funzione Header:
  
slink : L'URL o l'identificatore restituito da AddLink().  
+
PUBLIC SUB Header()
 +
  ME.SetX(0)
 +
  ME.SetY(5)
 +
  ME.SetFont("Arial", "BI", 20)
 +
  ME.Cell(160, 6, "Rubrica", FALSE, 0, "L", FALSE)
 +
  ME.SetLineWidth(0.2)    
 +
  ME.Line(10, 17, 200, 17)
 +
END
  
 +
Andiamo a impostare la posizione nella quale inserire il titolo con ''setx'' e ''sety'' impostando così rispettivamente le coordinate ''x'' e ''y''.
 +
Impostiamo il font con ''setfont''. Andiamo a scrivere il titolo con ''Cell''. Questo comando accetta in ordine:
  
Poi andiamo a impostare lo spessore linea con “SetLineWidth” e poi disegnamo la linea con “Line” dando le coordinate da x,y a x,y.
+
'''W''' : Larghezza della cella. Se 0, la cella si estende dalla parte del margine destro.
 +
'''H''' : Altezza della cella. Valore di default: 0.
 +
'''txt''' : Stringa da stampare. Valore di default: stringa vuota.
 +
'''Border''' : Indica se bisogna tracciare i bordi attorno alla cella. I valori possono essere:
 +
'''      -0''': nessun bordo
 +
'''      -1''': cornice
 +
'''      -L''': sinistro
 +
'''      -T''': superiore
 +
'''      -R''': destro
 +
'''      -B''': inferiore
 +
'''      -Valore di default''': 0
 +
'''ln''' :Indica la posizione corrente dopo la chiamata. Valori possibili sono:
 +
'''      -0''': a destra
 +
'''      -1''': all'inizio della linea successiva
 +
  '''      -2''': in basso
 +
'''      -'''Inserire 1 equivale a inserire 0 e chiamare Ln() immediatamente dopo. Valore di default: 0.
 +
'''align''' : Permette di centrare o allineare il testo. Possibili valori sono:
 +
'''      -L''' o ''stringa vuota'': allineamento a sinistra (valore di default)
 +
'''      -C''': centrato
 +
'''      -R''': allineamento a destra
 +
'''fill''' : Indica se lo sfondo della cella deve essere disegnato (true) o deve essere trasparente (false). Valore di default: false.
 +
'''slink''' : L'URL o l'identificatore restituito da AddLink().  
  
Una funzione tanto comoda, Ln([float h]).
+
 
 +
Poi andiamo a impostare lo spessore linea con '''SetLineWidth''' e a disegnare la linea con '''Line''' dando le coordinate da x,y a x,y.
 +
 
 +
Una funzione molto comoda è '''Ln([float h])'''.
 
Questa serve per andare a capo, accetta l'opzione altezza riga, per default il valore equivale all'altezza dell'ultima cella stampata.  
 
Questa serve per andare a capo, accetta l'opzione altezza riga, per default il valore equivale all'altezza dell'ultima cella stampata.  
  
Comunque per trovare tutti i comandi di Pdfwriter si può fare riferimento al manuale di “FPDF” :http://www.fpdf.org/ .
+
Comunque per trovare tutti i comandi di Pdfwriter si può fare riferimento al [http://www.fpdf.org/ manuale] di "FPDF".
 +
 
 +
Sono però state aggiunte due nuove funzioni, '''Multiriga''' e '''Multirect''' che troverete solo nella nuova versione di PdfWriter.
 +
Multiriga svolge la stessa funzione di Cell, con la differenza che il testo andrà a capo creando un numero di righe sufficienti. Questa funzione viene usata sopratutto in una griglia.
 +
Nel caso di una griglia si può impostare l'opzione '''Border''' a FALSE decidendo così di non disegnare il bordo, questo perchè nella stessa riga potranno esserci altezze diverse. In questo modo dopo aver creato tutte le colonne con multiriga, possiamo disegnare il bordo con Multirect, questo disegnerà il bordo di ogni cella alto tanto come il maggiore di ogni riga.
 +
 
 +
 
 +
;Attenzione: per andare a capo dopo multiriga non utilizzare la funzione ln(), ma la funzione apposta per multiriga Lnm()
 +
 
  
Sono però state aggiunte due nuove funzioni, Multiriga e Multirect che troverete solo nella nuova versione di PdfWriter.
 
Multiriga fa la stessa funzione di Cell, con la differenza che il testo andrà a capo creando tante righe quante ha bisogno. Questa funzione viene usata sopratutto in una griglia.
 
Nel caso di una griglia si può impostare l'opzione Border a false, quindi non disegnare il bordo, questo perchè nella stessa riga potranno esserci altezze diverse. Ecco che dopo aver creato tutte le colonne con multiriga, possiamo disegnare il bordo con Multirect, questo disegnerà il bordo di ogni cella alto tanto come il maggiore di ogni riga.
 
Attenzione però, per andare a capo dopo multiriga non utilizzare la funzione ln(), ma la funzione apposta per multiriga Lnm()
 
 
Ecco un esempio di Multiriga con Multirect in un ciclo for each:
 
Ecco un esempio di Multiriga con Multirect in un ciclo for each:
 
    
 
    
          FOR EACH MyRS
+
FOR EACH MyRS
              ME.MultiRiga(10, 5, MyRS!quantita, FALSE, "L", FALSE)
+
  ME.MultiRiga(10, 5, MyRS!quantita, FALSE, "L", FALSE)
              ME.MultiRiga(32, 5, MyRS!codice, FALSE, "L", FALSE)             
+
  ME.MultiRiga(32, 5, MyRS!codice, FALSE, "L", FALSE)             
              ME.MultiRiga(108, 5, MyRS!descrizione, FALSE, "L", FALSE)  
+
  ME.MultiRiga(108, 5, MyRS!descrizione, FALSE, "L", FALSE)  
              ME.MultiRiga(20, 5, MyRS!prezzo, FALSE, "R", FALSE)   
+
  ME.MultiRiga(20, 5, MyRS!prezzo, FALSE, "R", FALSE)   
              ME.MultiRiga(20, 5, MyRS!prezzo * MyRS!quantita, FALSE, "R", FALSE)               
+
  ME.MultiRiga(20, 5, MyRS!prezzo * MyRS!quantita, FALSE, "R", FALSE)               
              ME.MultiRect(10, 32, 108, 20, 20, 0, 0)           
+
  ME.MultiRect(10, 32, 108, 20, 20, 0, 0, 0, 0, 0, 0)           
              ME.Lnm()  
+
  ME.Lnm()  
          NEXT
+
NEXT
 +
 
 
Vediamo che su tutti il Multiriga l'opzione border è impostata a FALSE.
 
Vediamo che su tutti il Multiriga l'opzione border è impostata a FALSE.
Multirect accetta il valore per 7 colonne, nelle nostre 5 diamo lo stesso valore che abbiamo dato all'opzione w di Multiriga.
+
Multirect accetta il valore per 11 colonne, nelle nostre 5 diamo lo stesso valore che abbiamo dato all'opzione w di Multiriga.
 +
 
  
 +
Adesso andiamo scrivere la funzione nel nostro form per lanciare la stampa
  
Adesso andiamo a fare la funzione nel nostro form per lanciare la stampa
+
PUBLIC SUB stampa()
PUBLIC SUB stampa()
 
 
   DIM hStampa AS Process
 
   DIM hStampa AS Process
 
   DIM pdf AS strubrica
 
   DIM pdf AS strubrica
 
   RANDOMIZE  
 
   RANDOMIZE  
  pdf = NEW strubrica("Portrait", "mm", "A4")
+
  pdf = NEW strubrica("Portrait", "mm", "A4")
  pdf.Open()
+
  pdf.Open()
  pdf.AliasNbPages()
+
  pdf.AliasNbPages()
  pdf.Data
+
  pdf.Data
  pdf.Output(User.Home & "/report.pdf", FALSE) ' qua viene creato il file pdf
+
  pdf.Output(User.Home & "/report.pdf", FALSE) ' qua viene creato il file pdf
  hStampa = SHELL ("lpr " & User.Home "/report.pdf) WAIT" ' qua lo mandiamo in stampa
+
  hStampa = SHELL ("lpr " & User.Home "/report.pdf") WAIT" ' qua lo mandiamo in stampa
END
+
END
 +
 
 +
Se vogliamo creare un'anteprima, ad esempio, con Evince è sufficente scrivere:
  
Se vogliamo fare un'anteprima tipo con Evince
+
hStampa = SHELL ("evince " & User.Home & "/report.pdf")
hStampa = SHELL ("evince " & User.Home & "/.Gestione/clienti.pdf")
 
  
 
Potrete provare vari esempi compreso una funzione di anteprima nella sezione progetti in cerca di aiuto / Report con PdfWriter (provvisorio).
 
Potrete provare vari esempi compreso una funzione di anteprima nella sezione progetti in cerca di aiuto / Report con PdfWriter (provvisorio).

Versione attuale delle 17:23, 14 ott 2023

Con questa potente classe è possibile creare dei report professionali ed esteticamente accattivanti in pochissimo tempo. PdfWriter nasce da un porting fatto da Luigi Carlotto (MD9327) dalla famosa libreria php “FPDF”. Le funzioni sono molto simili, si può prendere spunto dal sito www.fpdf.org . Per l'utilizzo, basta solo copiare nel nostro progetto le classi PdfWriter e PdfWriterfont. Per ogni report che vogliamo creare, aggiungiamo una sottoclasse a PdfWriter e per fare ciò basta creare una nuova classe e scrivere all'inizio:

INHERITS PdfWriter 

In questa classe vanno inserite tre funzioni:

PUBLIC SUB Header() 
PUBLIC FUNCTION Data()
PUBLIC FUNCTION Footer()

In particolare:

  1. Header è l'intestazione della stampa e si ripete su tutte le pagine;
  2. Data è il corpo della pagina e nel caso che il testo superi tutto lo spazio aggiunge una pagina successiva;
  3. Footer è la fine della pagina o piè di pagina e si ripete su tutte le pagine.

Dentro queste funzioni possiamo inserire testi in vari formati e stili, linee, cerchi, rettangoli e altro, inoltre possiamo gestire anche i codici a barre. Andiamo, per esempio, ad inserire un titolo nel nostro report; la sottoclasse la chiamiamo strubrica. Entriamo nella classe appena creata e sotto la stringa:

INHERITS PdfWriter 

creiamo la funzione Header:

PUBLIC SUB Header()
  ME.SetX(0)
  ME.SetY(5)
  ME.SetFont("Arial", "BI", 20)
  ME.Cell(160, 6, "Rubrica", FALSE, 0, "L", FALSE)
  ME.SetLineWidth(0.2)      
  ME.Line(10, 17, 200, 17)
END

Andiamo a impostare la posizione nella quale inserire il titolo con setx e sety impostando così rispettivamente le coordinate x e y. Impostiamo il font con setfont. Andiamo a scrivere il titolo con Cell. Questo comando accetta in ordine:

W : Larghezza della cella. Se 0, la cella si estende dalla parte del margine destro. 
H : Altezza della cella. Valore di default: 0. 
txt : Stringa da stampare. Valore di default: stringa vuota. 
Border : Indica se bisogna tracciare i bordi attorno alla cella. I valori possono essere:
      -0: nessun bordo
      -1: cornice 
      -L: sinistro 
      -T: superiore 
      -R: destro 
      -B: inferiore 
      -Valore di default: 0
ln :Indica la posizione corrente dopo la chiamata. Valori possibili sono:
      -0: a destra 
      -1: all'inizio della linea successiva 
      -2: in basso
      -Inserire 1 equivale a inserire 0 e chiamare Ln() immediatamente dopo. Valore di default: 0. 
align : Permette di centrare o allineare il testo. Possibili valori sono:
      -L o stringa vuota: allineamento a sinistra (valore di default) 
      -C: centrato 
      -R: allineamento a destra 
fill : Indica se lo sfondo della cella deve essere disegnato (true) o deve essere trasparente (false). Valore di default: false. 
slink : L'URL o l'identificatore restituito da AddLink(). 


Poi andiamo a impostare lo spessore linea con SetLineWidth e a disegnare la linea con Line dando le coordinate da x,y a x,y.

Una funzione molto comoda è Ln([float h]). Questa serve per andare a capo, accetta l'opzione altezza riga, per default il valore equivale all'altezza dell'ultima cella stampata.

Comunque per trovare tutti i comandi di Pdfwriter si può fare riferimento al manuale di "FPDF".

Sono però state aggiunte due nuove funzioni, Multiriga e Multirect che troverete solo nella nuova versione di PdfWriter. Multiriga svolge la stessa funzione di Cell, con la differenza che il testo andrà a capo creando un numero di righe sufficienti. Questa funzione viene usata sopratutto in una griglia. Nel caso di una griglia si può impostare l'opzione Border a FALSE decidendo così di non disegnare il bordo, questo perchè nella stessa riga potranno esserci altezze diverse. In questo modo dopo aver creato tutte le colonne con multiriga, possiamo disegnare il bordo con Multirect, questo disegnerà il bordo di ogni cella alto tanto come il maggiore di ogni riga.


Attenzione
per andare a capo dopo multiriga non utilizzare la funzione ln(), ma la funzione apposta per multiriga Lnm()


Ecco un esempio di Multiriga con Multirect in un ciclo for each:

FOR EACH MyRS
  ME.MultiRiga(10, 5, MyRS!quantita, FALSE, "L", FALSE)
  ME.MultiRiga(32, 5, MyRS!codice, FALSE, "L", FALSE)            
  ME.MultiRiga(108, 5, MyRS!descrizione, FALSE, "L", FALSE) 
  ME.MultiRiga(20, 5, MyRS!prezzo, FALSE, "R", FALSE)  
  ME.MultiRiga(20, 5, MyRS!prezzo * MyRS!quantita, FALSE, "R", FALSE)              
  ME.MultiRect(10, 32, 108, 20, 20, 0, 0, 0, 0, 0, 0)          
  ME.Lnm() 
NEXT

Vediamo che su tutti il Multiriga l'opzione border è impostata a FALSE. Multirect accetta il valore per 11 colonne, nelle nostre 5 diamo lo stesso valore che abbiamo dato all'opzione w di Multiriga.


Adesso andiamo scrivere la funzione nel nostro form per lanciare la stampa

PUBLIC SUB stampa()
  DIM hStampa AS Process
  DIM pdf AS strubrica
  RANDOMIZE 
  pdf = NEW strubrica("Portrait", "mm", "A4")
  pdf.Open()
  pdf.AliasNbPages()
  pdf.Data
  pdf.Output(User.Home & "/report.pdf", FALSE) ' qua viene creato il file pdf
  hStampa = SHELL ("lpr " & User.Home "/report.pdf") WAIT" ' qua lo mandiamo in stampa
END

Se vogliamo creare un'anteprima, ad esempio, con Evince è sufficente scrivere:

hStampa = SHELL ("evince " & User.Home & "/report.pdf")

Potrete provare vari esempi compreso una funzione di anteprima nella sezione progetti in cerca di aiuto / Report con PdfWriter (provvisorio).