Prova scrivere, dentro la funzione data una cosa semplice come questa
ME.Cell(10, 5, "Tuo testo'", TRUE, 0, "C", FALSE)
Al limite posta un pò di codice che proviamo ad aiutarti
sicuramente c'è un errore sul codice
dipende dall'errore:
se ti da errore vedi il codice errore che forse si riesce a capire
se invece non ti da nessun errore e il visualizzatore vede una pagina bianca hai sbagliato le coordinate x e y
in alternativa come ha detto golia posta il codice che si risolve
mi piacerebbe capire con un test dove in Data() ci sia solo 'hello world' all'inizio della pagina..ma non riesco
' Gambas class file
INHERITS PdfWriter
PUBLIC SUB Header()
END
PUBLIC FUNCTION Data()
ME.AddPage
ME.SetFont("Arial", "B", 10)
ME.Cell(40, 10, "Hello world")
END
PUBLIC FUNCTION Footer()
END
non va questo è il codice:
' Gambas class file
INHERITS PdfWriter
PUBLIC SUB Header()
ME.SetX(0)
ME.SetY(5)
ME.SetFont("Arial", "B", 10)
ME.Cell(160, 6, "Rubrica", FALSE, 0, "L", FALSE)
ME.SetLineWidth(0.2)
ME.Line(10, 10, 200, 10)
END
PUBLIC FUNCTION Data()
ME.AddPage
ME.SetFont("Arial", "B", 10)
ME.Cell(40, 10, "Hello World", TRUE, 0, "C", FALSE)
END
PUBLIC FUNCTION Footer()
END
Ho fatto una prova con il codice che hai scritto e funziona.
Ho copiato il tuo codice dentro la classe "Class1"
poi ho lanciato la stampa così:
PUBLIC SUB stampaprova()
DIM hStampa AS Process
DIM pdf AS Class1
RANDOMIZE
pdf = NEW Class1("Portrait", "mm", "A4")
pdf.Open()
pdf.AliasNbPages()
pdf.Data
pdf.Output(User.Home & "/report.pdf", FALSE)
' hStampa = SHELL ("Okular " & User.Home & "/report.pdf")
END
Per fare 3 tipi di report, io farei 3 classi, le puoi clonare e cambiare solo la griglia.
Se nella griglia avrai dati che ci stanno nello spazio che imposti (cioè senza andare a capo) puoi usare semplicemente Me.Cell
Ecco l'esempio per 8 colonne:
FOR EACH MyRS ' MyRS = recordeset
ME.Cell(10, 5, MyRS!val1, TRUE, 0, "C", FALSE)
ME.Cell(21, 5, MyRS!val2, TRUE, 0, "C", FALSE)
ME.Cell(22, 5, MyRS!val3, TRUE, 0, "C", FALSE)
ME.Cell(23, 5, MyRS!val4, TRUE, 0, "C", FALSE)
ME.Cell(24, 5, MyRS!val5, TRUE, 0, "C", FALSE)
ME.Cell(25, 5, MyRS!val6, TRUE, 0, "C", FALSE)
ME.Cell(26, 5, MyRS!val7, TRUE, 0, "C", FALSE)
ME.Cell(27, 5, MyRS!val8, TRUE, 0, "C", FALSE)
ME.Ln()
NEXT
Se hai dati che non ci stanno nella cella, quindi devi andare a capo, devi usare Multiriga (Attenzione questa funzione non è presente nel PdfWriter che trovi nella sezione download, ma dagli esempi che erano stati fatti quì http://www.gambas-it.org/smf/index.php?action=dlattach;topic=1056.0;attach=630 (http://www.gambas-it.org/smf/index.php?action=dlattach;topic=1056.0;attach=630). Inoltre nella prossima versione che MD9327 metterà a disposizione cambierà nome)
Ecco come fare con Multiriga:
FOR EACH MyRS ' MyRS = recordeset
ME.MultiRiga(10, 5, MyRS!val1, FALSE, "L", FALSE)
ME.MultiRiga(21, 5, MyRS!val2, FALSE, "L", FALSE)
ME.MultiRiga(22, 5, MyRS!val3, FALSE, "L", FALSE)
ME.MultiRiga(23, 5, MyRS!val4, FALSE, "L", FALSE)
ME.MultiRiga(24, 5, MyRS!val5, FALSE, "L", FALSE)
ME.MultiRiga(25, 5, MyRS!val6, FALSE, "L", FALSE)
ME.MultiRiga(26, 5, MyRS!val7, FALSE, "L", FALSE)
ME.MultiRiga(27, 5, MyRS!val8, FALSE, "L", FALSE)
ME.MultiRect(10, 21, 21, 23, 24, 25, 26, 27, 0, 0 ,0) ' questo serve per disegnare la griglia, i valori sono gli stessi che hai utilizzato per il valore x di multiriga
ME.Lnm() ' attenzione usare questo solo per multiriga
NEXT
Per una colonna soltanto puoi usare "multicell" (và anche a capo)
FOR EACH MyRS ' MyRS = recordeset
ME.multicell(120, 6, MyRS!val1, TRUE, "L", FALSE)
ME.Ln()
NEXT