Gambas-it

Gambas3 => Programmazione => Topic aperto da: Franco_da_vc - 15 Settembre 2017, 19:07:04

Titolo: [Risolto] Problema con PdfWriter
Inserito da: Franco_da_vc - 15 Settembre 2017, 19:07:04
Ciao a tutti,

ho iniziato a sperimentare PdfWriter e devo dire che come al solito il diavolo non è mai brutto come lo si dipinge, ora ho due copie della routine una normale ed una che ho provato a modificare con esito positivo, a questo punto ho proceduto ad inglobare le routine come da quanto scritto nel documento accompagnatorio, ho quindi importato PdfWriter.class, PrintPdf.form, PrintPdf.class e PdfWriterFont.class.

Lo strano è che facendo partire l'interprete di prova ottengo alla riga Dim cmp As New Compress in PdfWriter.class questo errore: Unknown identifier: Compress in PdfWriter.class; questa problematica si verifica solo nel programma scritto da me e non in in PdfWriter ne originale ne in quello modificato.

Qualcuno ne sa qualcosa?

Ciaoooo  :ciao:
Titolo: Re:Problema con PdfWriter
Inserito da: milio - 15 Settembre 2017, 22:28:00
Dovresti verificare quali sono i componenti attivati nel progetto originale
Titolo: Re:Problema con PdfWriter
Inserito da: Franco_da_vc - 16 Settembre 2017, 14:40:21
Grazie Milio,

era proprio quello il problema, il mio progetto non aveva il componente gb.compress e molti altri che ho provveduto ad attivare, ora però mi da un secondo errore in questa linea:
Codice: [Seleziona]
hPdf.Open(MyReport)
e l'errore è Null object in PrintPdf:29.

Cosa potrà essere, come ho detto il problema si presenta solo nella mia suite.

Vi ringrazio ancora. Ciaooooo  :ciao:
Titolo: Re:Problema con PdfWriter
Inserito da: Franco_da_vc - 16 Settembre 2017, 15:53:13
Grazie Milio,

era proprio quello il problema, il mio progetto non aveva il componente gb.compress e molti altri che ho provveduto ad attivare, ora però mi da un secondo errore in questa linea:
Codice: [Seleziona]
hPdf.Open(MyReport)
e l'errore è Null object in PrintPdf:29.
Fermi tutti, era solo una mia cappella, ci ho rimuginato un po sopra ed ho trovato cosa non andava.

Vi ringrazio in ogni caso! Ciaooooo  :ciao:
Titolo: Re:Problema con PdfWriter
Inserito da: Franco_da_vc - 17 Settembre 2017, 20:35:21
Riddaje,

Altro errore, questa volta non so però da cosa possa dipendere, l'errore si verifica in PrintPdf.class, alla riga 47:
Codice: [Seleziona]
Me.cbFormato.Index = 1
L'errore ottenuto è: Unknown symbol cbFormato in class container in PrintPdf:47.

Per onor del vero bisogna dire che nel mio programma richiamo il processo di stampa da questa linea:
Codice: [Seleziona]
PrintPdf.Run("DDTNormale", ["portrait", "mm", "A4"])
ove DDTNormale è la classe da dove dovrei stampare la bolla ottenuta importando e modificando (non ancora completamente) la classe PDFDDT.class del pacchetto PdfWriter, mentre la riga riportata è stata riprese dalla classe Principale.class relativa al bottone 12
Codice: [Seleziona]
Public Sub Button12_Click()
PrintPdf.Run("PDFDDT", ["portrait", "mm", "A4"])
End
sto pensendo che prima di dare un simile ordine ci sia da compiere qualche azione, ma in Principale, che tra l'altro è la classe di avvio del pacchetto non trovo niente tranne i 14 bottoni ed un Form_Open che serve ad aprire il form di esempio.

Ringrazio per la pazienza ed attendo chiarimenti.
Ciaoooooo  :ciao:
Titolo: Re:Problema con PdfWriter
Inserito da: Gianluigi - 18 Settembre 2017, 10:02:25
Gambas ti sta dicendo che nella finestra in cui stai lavorando (Me) non c'è la Combo cbFormato.
Se per caso tu stai richiamando questo codice da altra classe occorre cambiare Me col nome della finestra richiamata.
 :ciao:
Titolo: Re:Problema con PdfWriter
Inserito da: Franco_da_vc - 21 Settembre 2017, 21:19:27
Okay boys,

PdfWriter ha finalmente emesso i suoi primi vagiti, funziona!

L'unica cosa che ancora non mi soddisfa e che il codice che funziona è quello della stampa diretta e non quello dell'anteprima: se avete presente l'interfaccia del pacchetto dimostrativo il pulsante più grosso dovrebbe essere la stampa diretta (intendiamoci si apre Okular) e corrisponde a questo codice:
Codice: [Seleziona]
Dim pdf As PDFDDT
  With pdf = New PDFDDT("portrait", "mm", "A4")
        .Open()
        .AliasNbPages()
        .Data()
        .Output("/tmp/report.pdf", False)
  End With

Desktop.Open("/tmp/report.pdf")
Mentre il secondo pulsante, più piccolo e con tre puntini apre un preview del documento con un'interfaccia che a me piace molto, attraverso a quest'ultima si può operare in vari modi, questo pulsante corrisponde a questo secondo codice:
Codice: [Seleziona]
PrintPdf.Run("PDFDDT", ["portrait", "mm", "A4"])
che a prima vista anche a me pare un po poco, ma nel pacchetto originale funziona, il problema e che non fa altrettanto se importato nel mio programma  :'(, pare mancare qualcosa, ma non capisco cosa, comunque finalmente la sperimentazione può andare avanti perché ora posso trasmigrare la mia bolla sulla nuova procedura, però prima o poi vorrei farlo con il secondo codice che come ho detto prima, mi piace di più, qualcuno può darmi una mano?

Grazie a tutti!
Ciaooooo :ciao:
Titolo: Re:Problema con PdfWriter
Inserito da: Golia - 22 Settembre 2017, 17:40:56
Ciao
è da tanto che non ci metto mano, se alleghi un'esempio di quello che devi fare posso provare a vedere se mi torna in mente qualcosa  :)
Titolo: Re:Problema con PdfWriter
Inserito da: Golia - 22 Settembre 2017, 18:30:12
Petta che mi tornano in mente antichi scritti!  :D :D
PrintPDF è un form che ho fatto io, si è sufficente ...PrintPdf.Run("PDFDDT", ["portrait", "mm", "A4"])....
Nome della classe di stampa e impostazioni di misura.
Casomai come detto prima allega qualcosa che vediamo dove non funziona.

Ciao
Titolo: Re:Problema con PdfWriter
Inserito da: Golia - 22 Settembre 2017, 19:03:10
forse ho intuito.
Nella classe di stampa che hai creato non devi omettere anche se non usi, le tre opzioni
Citazione
Public Function Data(Optional data1 As Variant[], Optional data2 As Variant, Optional data3 As Variant)
Titolo: Re:Problema con PdfWriter
Inserito da: Franco_da_vc - 22 Settembre 2017, 20:38:27
Grazie Golia,

forse ho intuito.
Nella classe di stampa che hai creato non devi omettere anche se non usi, le tre opzioni
Citazione
Public Function Data(Optional data1 As Variant[], Optional data2 As Variant, Optional data3 As Variant)

Dunque, fammi capire: il mio codice che porta alla stampa del documento è, anche se per ora molto scarno ed incompleto:
Codice: [Seleziona]
Public Sub ButtonStampaNorm_Click()

'  SceltaStampante.Show
  STAMPA_NORMALE()

End

Public Procedure STAMPA_NORMALE()
'#################################################################### Procedura di stampa di un D.D.T. (NON FACIT)#####
  Dim sw_stampa As Boolean '##### Switch stampa                                                                   #####
  Dim lin As Integer '##### Contatore di linea                                                                    #####
  Dim filler$ As String '##### Comodo per contenere gli spazi prima di una stampa                                 #####
  Dim lung As Integer '##### Variabile per immagazzinare la lunghezza di una stringa                              #####
  Dim var1$ As String '##### Variabile trasporto numero di capi                                                   #####
  Dim var2$ As String '##### Variabile trasporto tipo capo                                                        #####
  Dim var3$ As String '##### Variabile di trasporto -= campo vuoto =-                                             #####
  Dim var4$ As String '##### Variabile di trasporto tipo lavorazione                                              #####
  Dim var5$ As String '##### Variabile di trasporto prezzo totale lavorazione                                     #####
  Dim var6$ As String '##### Variabile di trasporto prezzo netto totale lavorazione                               #####
  Dim var7$ As String '##### Variabile di trasporto iva totale lavorazione                                        #####

'######################################################################################################################
'##### D.D.T. per negozi "NORMALI"                                                                                #####
'#####                                                                                                            #####
'##### visual$(0) ===> Numero di capi                                                                             #####
'##### visual$(1) ===> Tipo capo                                                                                  #####
'##### visual$(2) ===> Empty                                                                                      #####
'##### visual$(3) ===> Tipo lavorazione                                                                           #####
'##### visual$(4) ===> Prezzo                                                                                     #####
'#####                                                                                                            #####
'######################################################################################################################

  PrintPdf.Run("DDTNormale", ["portrait", "mm", "A4"])
End
dopo di cui le routine sono quelle originali di PdfWriter, anche la routine DDTNormale che vedi nel richiamo a PrintPdf.run non è altri che PDFDDT del pacchetto originale rinominata perchè il programma che sto traducendo deve poter fare stampare due tipi di bolle diverse, quindi
Codice: [Seleziona]
Public Function Data(Optional data1 As Variant[], Optional data2 As Variant, Optional data3 As Variant)
in DDTNormale e comunque contenuto; oltretutto l'errore che si verifica
Codice: [Seleziona]
Unknowm symbol 'cbformato' in class container in PrintPdf
più che dirmi che non trova l'oggetto cbformato che comunque è presente nel form PrintPdf.Form, mi da l'idea che sia causato dalla non formazione dell'oggetto "Me", infatti la riga è:
Codice: [Seleziona]
Me.cbFormato.Index = 1
A meno che le variabili che hai citato non debbano essere inserite nelle dichiarazioni all'inizio della procedura stampa normale o nella chiamata della stessa procedura.
Che ne dici? (mi rendo conto di avervi piazzato una pizza un po' enorme  :rolleyes: :rolleyes:)

Vi ringrazio, Ciaoooooo :ciao: :ciao:
Titolo: Re:Problema con PdfWriter
Inserito da: Golia - 22 Settembre 2017, 22:37:27
puoi allegarmi il progetto?, basta solo la parte della stampa
Titolo: Re:Problema con PdfWriter
Inserito da: Franco_da_vc - 23 Settembre 2017, 12:29:45
puoi allegarmi il progetto?, basta solo la parte della stampa

Va bene, ti ho tolto tutto ciò che non riguarda la parte di stampa, ma penso che ciò non influenzerà la problematica perché non avevo ancora inserito mie variabili nella routine di stampa

Ti ringrazio Golia, ciaoooooo :ciao:
Titolo: Re:Problema con PdfWriter
Inserito da: Gianluigi - 23 Settembre 2017, 13:54:35
Ciao Franco,
ho capito quale è il problema, le combobox nel progetto di Golia vengono erroneamente chiamate con Me.ComboQualsiasi.
Si tratta di un errore in questo modo possono solo essere chiamati gli oggetti pubblici mentre invece gli oggetti (controlli) di un form sono di default privati.
Puoi cambiare i controlli a public cosa deprecata e che ti sconsiglio oppure eliminare tutti i "Me." presenti nel codice, cosa auspicabile.
Ti invito a fare questa semplice prova in un nuovo progetto grafico con una combo (cbProva), prima provi ad avviare questo codice senza cambiare la proprietà public della combo, vedrai cosa ti dice Gambas, e dopo prova con public a true:

Codice: [Seleziona]
Public Sub Form_Open()

  Me.cbProva.Add("Pippo")

End
:ciao:
Titolo: Re:Problema con PdfWriter
Inserito da: Golia - 27 Settembre 2017, 15:29:22
Ciao
A me funziona, magari prova come ha suggerito Gianluigi
Titolo: Re:Problema con PdfWriter
Inserito da: Gianluigi - 27 Settembre 2017, 17:32:53
Ciao
A me funziona, magari prova come ha suggerito Gianluigi

Ciao Golia,
in effetti non è che mi sono spiegato molto bene  :-[
In allegato l'immagine della scheda Opzioni della finestra proprietà standard e quella del progetto PdfWriter, come puoi (potete) notare i controlli sono pubblici ed è per quel motivo che ci si può riferire ad essi con la parola chiave Me.
Però è meglio evitare questo sistema e pertanto basta rimediare togliendo il Me. davanti ai riferimenti dei controlli e il gioco è fatto.
In alternativa ma è pratica da evitare si possono copiare le stesse opzioni del progetto PdfWriter.

Io non credo che occorrano quelle opzioni (ma non ne sono certo perché non l'ho mai usato), forse sono solo l'eredità di un Gambas precedente, io ho iniziato da Gambas3 e se non erro quelle opzioni sono sempre state a No.

 :ciao: :ciao:
Titolo: Re:Problema con PdfWriter
Inserito da: Golia - 28 Settembre 2017, 09:01:20
Ciao
Si è così!, non ci ho fatto caso perchè in ogni progetto che facevo. appena creato la prima cosa che facevo era mettere i controlli pubblici e attivare i componenti qt.... giusto o sbagliato... :-\
Ciao, spero che Franco abbia risolto
Titolo: Re:Problema con PdfWriter
Inserito da: Gianluigi - 28 Settembre 2017, 09:47:20
Ciao Golia,
si tratta di una regola base delle OOP, sia le variabili globali pubbliche che i controlli pubblici violano informazioni che dovrebbero essere (rimanere) nascoste e pertanto bisogna evitarle.
Questa possibilità (dei controlli pubblici) è stata inserita in Gambas per i programmatori provenienti da VB ma è una prassi deprecata e dovresti cercare di evitarla.
Insomma la regola aurea nella programmazione a oggetti è evitare sempre variabili e controlli pubblici.

 :ciao: :ciao:
Titolo: Re:Problema con PdfWriter
Inserito da: Franco_da_vc - 15 Ottobre 2017, 20:17:53
Finalmente, ho sperimentato secondo i vari consigli di Gianluigi e di Golia, forse non ho ancora capito a pieno dove era l'inceppo, ma ora il tutto funziona.

Metterò quindi Risolto sulla discussione e vi ringrazio tutti.

Saluti.