Autore Topic: [Risolto] Nuovo Passo --->> La stampa  (Letto 11119 volte)

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Nuovo Passo --->> La stampa
« Risposta #45 il: 25 Febbraio 2012, 22:15:14 »
per la preselezione in a5 , basta che dopo il codice che richiama la configurazione della stampante che inserisci:

printer.size="A5"
Ritengo che l'istruzione a cui ti riferisci sia:
Codice: [Seleziona]
Draw.Begin(PRINTER)
Io avevo già scritto la Printer.Size = "A5", ma subito prima della Draw.begin e non avevo ottenuto il risultato sperato. Ora ho provato come mi hai proposto
Codice: [Seleziona]
Draw.Begin(PRINTER)  
Printer.Size = "A5"
ma, ancora una volta, nella finestra di dialogo di Impostazione stampante, il formato carta preimpostato è  "A4"
 :(
:ciao:

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: Nuovo Passo --->> La stampa
« Risposta #46 il: 26 Febbraio 2012, 09:29:56 »
vabbe ma poi stampa in a5 perchè il codice è dopo la finestra di configurazione

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Nuovo Passo --->> La stampa
« Risposta #47 il: 26 Febbraio 2012, 12:48:57 »
vabbe ma poi stampa in a5 perchè il codice è dopo la finestra di configurazione
No, purtroppo non tiene conto; non capisco perchè, ma sul display della stampante compare il messaggio "Carta non corrisponde".Probabilmente tale parametro andrebbe impostato all'interno del comando Draw.Begin(PRINTER).
Ciao.
:ciao:

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Nuovo Passo --->> La stampa
« Risposta #48 il: 27 Febbraio 2012, 08:50:49 »
Come dicevo qualche post fa, vorrei cominciare a conoscere Pdfwriter e perciò ho proceduto a scaricare il la classe presente nell'area di download. Ora dovrei copiare le classi necessarie, con le relative sottoclassi nel mio programma, solo che non conosco una procedura diversa dal copia-incolla. Ritengo però che possa esistere una funzione all'interno dell'ide di Gambas, ma come fare?
 :ciao:
:ciao:

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Nuovo Passo --->> La stampa
« Risposta #49 il: 27 Febbraio 2012, 11:48:41 »
Se parliamo di Gambas3, basta che vai nella cartella del progetto, e poi in ".src" (cartella nascosta), e lì copiarci i sorgenti della libreria. Questo a meno che tu non abbia costruito una qualche albreatura di cartelle all'interno del progetto; nel qual caso cerca quella adatta a contenere la suddetta libreria.

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Nuovo Passo --->> La stampa
« Risposta #50 il: 27 Febbraio 2012, 12:26:03 »
Se parliamo di Gambas3, basta che vai nella cartella del progetto, e poi in ".src" (cartella nascosta), e lì copiarci i sorgenti della libreria. Questo a meno che tu non abbia costruito una qualche albreatura di cartelle all'interno del progetto; nel qual caso cerca quella adatta a contenere la suddetta libreria.
No, io sono ancora ancorato  :) a G2.
 :ciao:
:ciao:

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Nuovo Passo --->> La stampa
« Risposta #51 il: 27 Febbraio 2012, 13:55:35 »
Ancora più semplice...
Copy la libreria nella cartella del progetto in G2...  :D

Se hai già avviato l'IDE di Gambas, basta che fai un Refresh (dal menu) e ti si visualizzano i sorgenti...

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Nuovo Passo --->> La stampa
« Risposta #52 il: 27 Febbraio 2012, 16:39:35 »
Ancora più semplice...
Copy la libreria nella cartella del progetto in G2...  :D

Se hai già avviato l'IDE di Gambas, basta che fai un Refresh (dal menu) e ti si visualizzano i sorgenti...
Sarà facile, ma non ho capito.   :-\ Quando dici Copy la libreria, intendi la directory "PdfWriter-0.0.4" con tutto il suo contenuto di file siano essi .png, jpg, .form, ,clas, ...? Te lo chiedo pechè ho eseguito  copy dei soli file PdfWriter.class, PdfWriterFont.class, PdfTest.class, ma all'avvio ricevo una segnalazione di errore per il mancato riconoscimento della classe "Compress", relativamente alla riga
Codice: [Seleziona]
DIM cmp AS NEW Compress
:(
:ciao:

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Nuovo Passo --->> La stampa
« Risposta #53 il: 27 Febbraio 2012, 16:47:06 »
Ecco, ora iniziamo a parlare di cose serie...  ;D

I sorgenti da importare sono corretti. Il file Test è ovviamente un sorgente per testare alcune delle funzionalità di PdfWriter, per cui non è necessario al tuo programma, quindi puoi toglierlo una volta che hai compreso come funziona la libreria.

Quello che ti dà errore è il mancato riferiomento ad una delle librerie di Gambas, appunto Compress, che devi includere nella configurazione del tuo progetto, così come hai sicuramente fatto per le altre (es. KDE e/o GTK, e così via...). Se non ricordo male, per G2, la libreria si chiama gb.compress.

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Nuovo Passo --->> La stampa
« Risposta #54 il: 28 Febbraio 2012, 14:45:59 »
Benissimo. Sto ora costruendo i parametri di stampa pagina nella funzione Header, però nella guida del Wiki non è indicato il parametro di preselezione del <<< formato carta >>>. Poichè in questa fase la stampa dovrebbe finire su fogli di formato "A5", ho provveduto a scrivere nella riga di chiamata della sottoclasse interessata (Reportpdf) in questa prima prova:
Codice: [Seleziona]
DocuPdf = NEW Reportpdf("Portrait", "mm", "A5")
Però non ho capito come passare la stringa con l'intestazione di pagina e la griglia contenente i dati da stampare.  ???
 :ciao:
« Ultima modifica: 28 Febbraio 2012, 15:46:24 da Picavbg »
:ciao:

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: Nuovo Passo --->> La stampa
« Risposta #55 il: 28 Febbraio 2012, 17:32:13 »
Ciao   :ciao:
Citazione
Però non ho capito come passare la stringa con l'intestazione di pagina e la griglia contenente i dati da stampare.  Che?!?

cerco di farti un veloce riassunto

Per ogni tipo di stampa devi creare una "sottoclasse" tipo come nell'esempio fatto da md "PdfTest.class"
mettiamo che vuoi fare una stampa di una lista di clienti, per velocizzare ti incollo la mia classe "clientipdf.class"
Codice: gambas [Seleziona]

' Gambas class file

Inherits PdfWriter


Public MyRS As Result

Public Sub Header()

  Me.SetFont("Arial", "BI", 20)
  Me.Cell(160, 6, "Rubrica Clienti", False, 0, "L", False)



End

Public Function Footer()
  Me.SetY(-15)
  Me.SetFont("Arial", "I", 8)
  Me.Cell(190, 6, "Pag. " & Me.PageNo() & " di {nb}", False, 0, "C", False)
End

Public Function Data()
  Dim sql As String

  Me.AddPage()
  Me.SetFillColor(192, 192, 192)
  Me.SetLineWidth(0.2)      
  Me.Line(10, 17, 200, 17)
  Me.SetLineWidth(0.1)
  Me.SetX(0)
  Me.SetY(20)
  Me.Ln()
  
    
                  sql = "select * from clienti"
      
                  MyRS = avvio.$myconn.Exec(sql)
                  
                              Me.SetFont("Arial", "", 8)    
                              Me.Cell(45, 5, "Cliente", True, 0, "C", False)
                              Me.Cell(85, 5, "Indirizzo", True, 0, "C", False)
                              Me.Cell(30, 5, "Telefono", True, 0, "C", False)
                              Me.Cell(30, 5, "Telefono 2", True, 0, "C", False)
                              Me.Ln()
                  
                          Me.SetFont("Arial", "", 12)  
                          If MyRS.Available = True Then    
                              For Each MyRS
                              Me.Cell(45, 6, MyRS!cognome & " " & MyRS!nome, True, 0, "L", False)
                              Me.Cell(85, 6, MyRS!indirizzo & " " & MyRS!citta & " (" & MyRS!provincia & ")", True, 0, "L", False)
                              Me.Cell(30, 6, MyRS!telefono, True, 0, "L", False)
                              Me.Cell(30, 6, MyRS!telefono2, True, 0, "L", False)
                              Me.Ln()
                              Next
                          Endif      
      
    
  End


come vedi in questa classe ci sono 3 Public Function:
Header = intestazione
Data = Corpo
Footer = piè di pagina

penso che guardandoti la classe sia facile intuire come funziona

per inviare la procedura dal tuo form:

Codice: gambas [Seleziona]

    Dim pdf As clientipdf
   Randomize
  pdf = New clientipdf("Portrait", "mm", "A4")
  pdf.Open()
  pdf.AliasNbPages()
  pdf.Data
  pdf.Output(User.Home & "/miastampa.pdf", False)


Attenzione, questo non manda la stampa, ma ti crea un file pdf
Per l'invio alla stampante o anteprima etcc. non hai che da chiedere, oppure guardati gli esempi che avevamo fatto
http://www.gambas-it.org/smf/index.php?action=dlattach;topic=1056.0;attach=622
« Ultima modifica: 28 Febbraio 2012, 17:34:06 da Golia »

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Nuovo Passo --->> La stampa
« Risposta #56 il: 28 Febbraio 2012, 18:06:47 »
@ Giolia:
Benissimo, hai ripetuto con un esempio pratico quanto già speiagto nel wiki. La spiegazione è chiara; alla fine del lavoro viene prodotto un file .pdf, però penso che il file .pdf debba contenere i dati da trattare. A me non risulta chiaro come passare alla sottoclasse detti dati, che nel mio caso specifico sono rappresentati dall stringa di testata di pagina e da una gridview  compilata dallo stesso programma. L'altra cosa che non capisco è perchè l'istruzione di chiamata della sottoclasse riporta come ultimo parametro il valore "A4" quando io dovrei fare riferimento al formato "A5".
L'esempio che mi hai proposto va a rilevare i dati da trattare con una query ad un DB, ma non è quello che dovrei fare io.
Ciao.
« Ultima modifica: 28 Febbraio 2012, 18:22:27 da Picavbg »
:ciao:

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: Nuovo Passo --->> La stampa
« Risposta #57 il: 28 Febbraio 2012, 18:48:31 »
allora per la testata nel mio esempio c'è il titolo "Rubrica Clienti"

Se il testo che devi scrivere lo devi ricavare per esempio da un textbox di un form per esempio puoi fare così:
Citazione
Me.Cell(160, 6, fmain.textbox1.text , False, 0, "L", False)

o in una qualsiasi altra maniera che puoi passare un dato.
Per quanto riguarda i dati che hai nella gridview puoi caricarli in un ciclo for come ho fatto nell'esempio, io ho usato dati di un database ma puoi buttarci dentro quello che vuoi.
Citazione
L'altra cosa che non capisco è perchè l'istruzione di chiamata della sottoclasse riporta come ultimo parametro il valore "A4" quando io dovrei fare riferimento al formato "A5"
Io ti ho fatto solo un'esempio, puoi usare il formato che vuoi
Citazione
pdf = New clientipdf("Portrait", "mm", "A5")  
o ancora
Citazione
pdf = New clientipdf("Landscape", "mm", "A5")  
Caso mai se non ti è chiaro prova a postarmi il lavoro che vuoi fare, magari ci capiamo meglio  ;)
Ciao

P.S.
Come carichi i dati nella tua gridview?
« Ultima modifica: 28 Febbraio 2012, 20:11:52 da Golia »

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Nuovo Passo --->> La stampa
« Risposta #58 il: 28 Febbraio 2012, 23:37:34 »
Ho capito; per la verità non mi piace, perchè pensavo che dovesse essere la procedura chiamante a passare i dati occorrenti e non che potessero essere  le funzioni HeaderData e Footer a prelevare i dati occorrenti da campi di memoria della chiamante.  :-\ Tuttavia, farò come mi hai detto. Ti farò sapere. Grazie.
 :ciao:
:ciao:

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Nuovo Passo --->> La stampa
« Risposta #59 il: 01 Marzo 2012, 11:36:52 »
Allora ....
Ho modificato le istruzioni dielle sottoclassi Header e Data di Pdfwriter, per ottenere il file pdf coi dati della gridview compilata in FMain.class ed inserita in Fmain.Form. Ho incontrato, fin ad ora, due difficoltà: non è riconosciuto il font"Bitstream Charter" e l'ho momentaneamente sostituito con "courier". La sottoclasse header non da problemi, mentre, nella sosstoclasse Data non riesco a puntare le righe di della gridview; infatti già nella prima riga di estrazione della testata di ciascuna colonna ricevo il messaggio di "sconosciuto". Il gruppo di istruzioni è:
'--------------------------- Prepara riga di testa della griglia -----------------------------------------         
Codice: gambas [Seleziona]
  ME.SetFont("courier", "B", 8)         
  ME.Cell(10, 5, FMain.Form.GridStmp.Columns[0].Text, TRUE, 1, "C", TRUE)
  ME.Cell(10, 35, FMain.GridStmp.Columns[1].text, TRUE, 1, "C", TRUE)
  ME.Cell(10, 370, FMain.GridStmp.Columns[2].text, TRUE, 1, "C", TRUE)
  ME.Cell(10, 500, FMain.GridStmp.Columns[3].text, TRUE, 1, "C", TRUE)
  ME.Cell(10, 580, FMain.GridStmp.Columns[4].text, TRUE, 1, "C", TRUE)
  ME.Ln()

Alla riga n.2 ricevo la segnalazione unknown sYmbol 'Form' in class 'Fmain'
mentre, se la riscrivo come la riga n.3, mi viene segnalato  unknown sYmbol 'GridStmp' in class 'Fmain'
Purtroppo non ho trovato nemmeno un riferimento simile nel link che mi hai suggerito nella tua ultima risposta e non ho capito come devo scrivere.  ???
 :(



:ciao: