Autore Topic: Stampare con Gambas.  (Letto 8553 volte)

Offline tornu

  • Gran Maestro dei Gamberi
  • *****
  • Post: 853
    • Mostra profilo
Stampare con Gambas.
« il: 03 Marzo 2008, 20:35:12 »
Non ho nessuna idea di come Gambas gestisce le stampe, ho reperito poca documentazione in giro che non mi ha dato nessun spunto.In particolare a me servirebbe un esempio o più di uno su cui lavorare del tipo:
poter stampare un elenco ordinato con vari criteri dei record del mio DB,
stampare documenti tipo fatture,stampa di codici a barre EAN13, mi piacerebbe anche capire come formattare i caratteri, disegnare fincature, ecc...
Qualsiasi indicazione, consiglio o esempio e bene accetto.
Il software è come il sesso, è meglio quando è libero. (Linus Torvalds)

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: Stampare con Gambas.
« Risposta #1 il: 03 Marzo 2008, 23:31:48 »
la stampa viene gestita come se dovessi disegnare su una drawingarea



esempio:

Codice: [Seleziona]

public sub Button_stampa_click()

dim x as integer
dim y as integer


 IF Printer.Setup() THEN RETURN  'fai apparire il modulo di  conf. stampante    
 
Draw.Begin(Printer) ' Initializes the draw
draw.LineWidth = 1
Draw.Foreground = Color.black

x=10
y=10

draw.rect(x, y, 400, 200)

draw.Font.Name = "Utopia"
draw.Font.size = 9


draw.Font.Italic = TRUE

Draw.Text("ciao a tutti", x , y)


Draw.end

END


Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: Stampare con Gambas.
« Risposta #2 il: 03 Marzo 2008, 23:38:40 »
Primo:
la stampa con Gambas è possibile solo usando il componente gb.qt perché l'oggetto Printer non è stato ancora implementato nel componente gb.gtk, per cui la tua applicazione deve per forza essere legata alle Qt.

Secondo:
armati di tanta pazienza perché questo è uno di quei casi in cui la documentazione di Gambas è più lacunosa.

Terzo:
sull'oggetto Printer stampi (o per meglio dire scrivi) con il metodo Draw(). Quindi sia la grafica che il testo lo devi inserire sul tuo documento come se stessi realizzando un disegno.

Codice: [Seleziona]

'-- inizializzo l'oggetto Printer
Printer.Copies = 1 '-- numero di copie
Printer.Name = Nome_stampante '-- nome della stampante di sistema (se ne hai una predefinita, non serve stabilirlo)

'-- inizi la generazione del documento
Draw.Begin(Printer)  '-- lego l'oggetto Printer al metodo Draw
'-- colori primario e dello sfondo
Draw.Foreground = Color.Black
Draw.Background = color.White

'-- inserisco del testo
Draw.Font.Size = 12 '-- stabilisco la dimensione
Draw.Text(Stringa_da_stampare, 1200, 320) '-- coordinate relative al foglio dell'angolo in alto a SX da cui iniziare ad inserire il testo

'-- inserisco una linea
Draw.LineWidth = 4 '-- spessore
Draw.Line(300, 1600, 4650, 1600) '-- coordinate di inizio e fine espresse nella coppia X,Y

'-- inserisco un rettangolo
Draw.Rect(300, 1450, 4350, 400)

'-- inserisco una nuova pagina
Printer.NewPage()

'-- stampo il documento
Draw.End


Un mio personale consiglio è quello di non stampare mai direttamente verso la stampante ma utilizzare un file PostScript temporaneo in cui riversare il documento generato e poi stampare quel file con il comando di console lpr. Prima si dichiara un nuovo processo nella procedura di stampa:
Codice: [Seleziona]

DIM hStampa as Process


E poi si aggiunge questo codice:
Codice: [Seleziona]

'-- al posto di Printer.Name
Printer.File = Application.Path & "/stampa.ps" '-- se vuoi stampare su file, metti qui il nome del file
(....... tutto come sopra......... )
'-- dopo Draw.End aggiungere:
hStampa = SHELL ("lpr " & Application.Path & "/stampa.ps") WAIT


Oppure, meglio ancora, si può invocare un visualizzatore di documenti per far vedere l'anteprima del documento:
Codice: [Seleziona]

hStampa = SHELL (Nome_Visualizzatore & Application.Path & "/stampa.ps" & " &")


Dove Nome_Visualizzatore può essere kghostview, evince, ecc...
Visita il mio sito personale: http://www.leonardomiliani.com

Offline tornu

  • Gran Maestro dei Gamberi
  • *****
  • Post: 853
    • Mostra profilo
Re: Stampare con Gambas.
« Risposta #3 il: 04 Marzo 2008, 13:39:33 »
Grazie per gli esempi e le indicazioni su cui cercherò di applicarmi.
Non mi ero accorto che negli esempi inclusi in Gambas c'è DataReportExample che implementa alcune funzioni tra cui il preview, che a me servirebbero, dando uno sguardo al codice ho notato (se non dico fesserie) che viene creato un file con all'interno del codice html che aggancia i dati direttamente dal DB, ho interpretato bene? Qualche delucidazione su questo esempio?

Sul mio precedente post vi ho chiesto qualche indicazione per la creazione e stampa dei codici a barre EAN13, qualcuno ha avuto esperienze in merito?
Il software è come il sesso, è meglio quando è libero. (Linus Torvalds)

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: Stampare con Gambas.
« Risposta #4 il: 05 Marzo 2008, 07:06:11 »
Io personalmente no.
Però se cerchi esempi per VB penso che tu possa adattarli a Gambas: bene o male, si tratta di disegnare delle linee di un determinato spessore. Il codice per disegnare le linee ce l'hai, adesso ti manca quello per stabilirne lo spessore  :oops:
Visita il mio sito personale: http://www.leonardomiliani.com

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Stampare con Gambas.
« Risposta #5 il: 06 Marzo 2008, 00:08:39 »
Tempo fà ho fatto un porting in Gambas della libreria FPDF, originariamente scritta per PHP. La puoi trovare su:

http://sourceforge.net/projects/pdfwriter/

Con questa libreria puoi crearti file pdf, con disegni, scritte, liste, ecc. nei formati più diversi; a questo punto inviare il tutto alla stampante non è più un problema.
Inoltre, faccio pubblicità... :-) , nelle ultime versioni del programma pgDesigner, ho incluso la libreria e ho creato alcune funzioni e classi per gestire la stampa dei progetti. Puoi dargli un'occhiata e prendere quello che ti serve come spunto.

pgDesigner lo puoi trovare sempre su:

http://sourceforge.net/projects/pgdesigner/

Tutte e due i progetti sono open-source e scritti interamente in Gambas.

Per il webmaster:
se puoi, includi questi due link al sito; ho fatto un mucchio di esperimenti con questi due programmi, e credo sia logico pubblicizzarli per aiutare a comprendere Gambas.

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: Stampare con Gambas.
« Risposta #6 il: 06 Marzo 2008, 07:52:57 »
Il sito non ha una sezione link, per cui ho inserito i collegamenti all'interno dell'area download: ho però precisato che i collegamenti portano a pagine esterne. Dimmi anche tu se una soluzione del genere è accettabile.
Visita il mio sito personale: http://www.leonardomiliani.com

Offline tornu

  • Gran Maestro dei Gamberi
  • *****
  • Post: 853
    • Mostra profilo
Re: Stampare con Gambas.
« Risposta #7 il: 06 Marzo 2008, 21:32:11 »
Grazie md9327 per i link, li proverò appena ho un attimo di tempo insieme alle altre indicazioni che mi hanno dato leo e gamberetto.
Chiunque abbia suggerimenti o esempi li posti, penso che sia un'aspetto (la stampa) su Gambas che interessi a tanti.
Il software è come il sesso, è meglio quando è libero. (Linus Torvalds)

Offline tornu

  • Gran Maestro dei Gamberi
  • *****
  • Post: 853
    • Mostra profilo
Re: Stampare con Gambas.
« Risposta #8 il: 06 Marzo 2008, 23:09:47 »
@md9327:
ho scaricato pdfwriter che dalla prima occhiata penso che risolva alcune mie esigenze, ho incluso la libreria nel mio progetto ho compilato ma mi riporta il seguente errore:

Unknown identifier: SpinBox1
alla linea 34 in FMain1.class

presumo che ci sia qualche componente da attivare, ma quale?
Il software è come il sesso, è meglio quando è libero. (Linus Torvalds)

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Stampare con Gambas.
« Risposta #9 il: 07 Marzo 2008, 00:22:23 »
Per tornu
Nella libreria non c'è alcun riferimento ad oggetti del tipo form, spinbox, ecc... Probabilmente ha fatto qualcosa di errato nella tua parte di codice, controlla bene.

Per il webmaster:
In effetti, a suo tempo, mi avevi indicato come probabile alternativa la pubblicazione degli aggiornamenti in parallelo; purtroppo me ne sono dimenticato e provvederò nel futuro. Per quanto riguarda i link, non sò, per me non ci sono problemi; potrei anche postare gli aggiornamenti su questo sito, se hai spazio a sufficienza, e in questo caso dovrei prevedere un doppio trasferimento su due diversi siti (questo e sf.net)...
Boh!?! Dimmi tu, non sarebbe neanche un problema, almeno da parte mia, devo solo ricordarmelo e prendere il via; posso anche postarti subito l'ultimissima versione di qualche giorno fà, ma ricorda che sono circa 16/17 mega di file compressi (RPM compresi) per ogni release.

Fammi sapere, anche via email.

Ciao

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: Stampare con Gambas.
« Risposta #10 il: 07 Marzo 2008, 07:06:13 »
Lo spazio non è un problema, così come la banda: sono illimitati entrambi ;-)
Visita il mio sito personale: http://www.leonardomiliani.com

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Stampare con Gambas.
« Risposta #11 il: 07 Marzo 2008, 10:35:17 »
Va bene, allora invierò il programma anche qui.
Appena ho un attimino di tempo, ora sono l lavoro, invio l'ultima versione.

Ciao

Offline tornu

  • Gran Maestro dei Gamberi
  • *****
  • Post: 853
    • Mostra profilo
Re: Stampare con Gambas.
« Risposta #12 il: 07 Marzo 2008, 23:02:42 »
Allora non ho capito come usarlo.
md9327 mi potresti spiegare dopo che ho estratto il pacchetto come importare la libreria all'interno di un progetto. Grazie
Il software è come il sesso, è meglio quando è libero. (Linus Torvalds)

Offline robertozr

  • Gamberetto
  • *
  • Post: 22
    • Mostra profilo
Re: Stampare con Gambas.
« Risposta #13 il: 08 Marzo 2008, 17:27:21 »
buon giorno a tutti,quesito ?
come si puo agganciare all'istruzione draw.text il result di una tabella
con piu campi.
es. draw.text(rresult............

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: Stampare con Gambas.
« Risposta #14 il: 08 Marzo 2008, 18:16:22 »
potresti fare cosi:

Codice: [Seleziona]

for each rresult


testo =rresult!mio_campo

 draw.text(testo,x,y)

 y=y+15

next



in questo modo ti stampa un elenco di elementi del campo mio_campo