Gambas-it

Gambas3 => Programmazione => Topic aperto da: Picavbg - 26 Settembre 2012, 22:57:15

Titolo: Stampare moduli di c/c postale con PdfWriter
Inserito da: Picavbg - 26 Settembre 2012, 22:57:15
Partendo dal concetto che il programmatore é normalmente una persona con altissimo indice di pigrizia, altrimenti non farebbe il programmatore,   ;D ho deciso di stampare alcuni moduli di versamento in c/c postale, per es. quello del pagamento del bollo auto automaticamente, o quasi, tramite un programma che dovrebbe sfruttare le potenzialità del PdfWriter che ho avuto già modo di apprezzare.   :D

Ho cercato di capire in proposito come dare a Pdf Writer le dimensioni del formato speciale del bollettino di c/c postale (cm.29,6 x 10,2 ). Essendo poi esso più largo di un foglio A4, sarei costretto a darlo in pasto alla stampante in posizione orizzontale, quindi mi occorrerebbe comunicare a PdfWriter che dovrà stampare il modulo, non nella normale modalità verticale, bensì in quella orizzontale. Ho cercato nel wiki e nella miniguida contenuta nel programma dimostrativo "PdfReport_GB3", ma non ho riscontrato alcunchè in proposito. É possibile che PdfWriter non gestisca formati speciali da stampare in modalità orizzontale?  :-[

Non credo; ritengo invece che manchino le note relative nelle suddette guide.
Mi occorrerebbe perciò conoscere come comunicare i parametri necessari a Pdf Writer o crearli addirittura direttamente dentro la classe da specializzare per la stampa del modulo, sotto  quella di PdfWriter.
Chi mi vuole illuminare?  :coder:
 :ciao:
Titolo: Re: Stampare moduli di c/c postale con PdfWriter
Inserito da: Golia - 26 Settembre 2012, 23:31:13
Ciao
Per cambiare l'orientamento e il tipo di carta la riga interessata è questa
  pdf = New tuastampa("Portrait", "mm", "A4")
Portrait = verticale
Landscape = orrizontale

e poi puoi cambiare il formato in A4 A3 etcc, e puoi anche crearne uno tutto tuo, basta che metti le mani nel codice di pdfwriter, esattamente quà

Codice: gambas [Seleziona]

  Case "a3"
    $fwPt = 841.89
    $fhPt = 1190.55
  Case "a4"
    $fwPt = 595.28
    $fhPt = 841.89
  Case "a5"
    $fwPt = 420.94
    $fhPt = 595.28
  Case "letter"
    $fwPt = 612
    $fhPt = 792
  Case "legal"
    $fwPt = 612
    $fhPt = 1008

all'inizio, circa alla riga 250
Ciao fammi sapere  :2birre:
Titolo: Re: Stampare moduli di c/c postale con PdfWriter
Inserito da: Picavbg - 27 Settembre 2012, 23:52:50
Ciao fammi sapere  :2birre:

Grazie per l'indicazione. Ti farò sapere certamente. Pdfwriter mi sta diventando proprio simpatico, anche se penso proprio che dovrò studiarmelo e perciò credo che, molto probabilmente, avrò bisogno di ulteriori ragguagli. Piuttosto, per la stampa del modulo in argomento immagino che posso omettere nella "Header" l'istruzione Cell. Infatti non ho alcuna testata da stampare.

Perché dovrò studiarmelo? Te lo dirò prossimamente.  ;D
 :ciao:
Titolo: Re: Stampare moduli di c/c postale con PdfWriter
Inserito da: Golia - 28 Settembre 2012, 20:26:17
si, la "Header" può rimanere vuota, buon studio  :2birre:
Titolo: Re: Stampare moduli di c/c postale con PdfWriter
Inserito da: dex - 28 Settembre 2012, 23:24:50
Ciao
Per cambiare l'orientamento e il tipo di carta la riga interessata è questa
  pdf = New tuastampa("Portrait", "mm", "A4")
Portrait = verticale
Landscape = orrizontale

e poi puoi cambiare il formato in A4 A3 etcc, e puoi anche crearne uno tutto tuo, basta che metti le mani nel codice di pdfwriter, esattamente quà

Codice: gambas [Seleziona]

  Case "a3"
    $fwPt = 841.89
    $fhPt = 1190.55
  Case "a4"
    $fwPt = 595.28
    $fhPt = 841.89
  Case "a5"
    $fwPt = 420.94
    $fhPt = 595.28
  Case "letter"
    $fwPt = 612
    $fhPt = 792
  Case "legal"
    $fwPt = 612
    $fhPt = 1008

all'inizio, circa alla riga 250
Ciao fammi sapere  :2birre:

esatto. creando un tuo formato personalizzato puoi creare un report anche di un francobollo.
io stampo le buste intestate dl10.
Quando crei il tuo report attento alle misure, non sono in mm ma se non ricordo male in punti, per farti un calcolo vedi il fomato a4 e dividi per i mm del foglio.
poi in fase di stampa ricordati che devi creare sulla stampante un tuo formato personalizzato con le misure del bollettino.
Titolo: Re: Stampare moduli di c/c postale con PdfWriter
Inserito da: Picavbg - 29 Settembre 2012, 00:11:32
creando un tuo formato personalizzato puoi creare un report anche di un francobollo.
io stampo le buste intestate dl10.
Quando crei il tuo report attento alle misure, non sono in mm ma se non ricordo male in punti, per farti un calcolo vedi il fomato a4 e dividi per i mm del foglio.
poi in fase di stampa ricordati che devi creare sulla stampante un tuo formato personalizzato con le misure del bollettino.

si, la "Header" può rimanere vuota, buon studio  :2birre:
Ho capito. Grazie per i vostri preziosi suggerimenti. Vi farò sapere, ma non abbiate premura; alla mia età si fa tutto piano piano, altrimenti s'incespica e bisogna poi farsi curare.  :rotfl:
 :ciao:  :ciao:
Titolo: Re: Stampare moduli di c/c postale con PdfWriter
Inserito da: Golia - 29 Settembre 2012, 10:46:01
si potrebbe anche usare una semplice funzioncina, tipo questa
Codice: gambas [Seleziona]

Public Sub cvcm(misura_in_centimetri As Float) As Float
Return (72 / 2.54) * misura_in_centimetri
End

......
  Case "a3"
    $fwPt = cvcm(29.7)
    $fhPt = cvcm(42.0)
  Case "a4"
    $fwPt = cvcm(21.0)
    $fhPt = cvcm(29.7)
.....
Titolo: Re: Stampare moduli di c/c postale con PdfWriter
Inserito da: md9327 - 02 Ottobre 2012, 13:15:20
Le misure sono espresse in DPI (dots per inches), ed è quindi semplice ricavarle con un semplice calcolo, per riportarle in millimetri.

Ad ogni modo, quando ho migrato la libreria, non mi sono posto il problema riguardo l'introduzione di ulteriori formati, mantenendo come base quelli che erano presenti nella libreria originale.

Come suggerito, però, i formati possono essere aggiunti, fornendo semplicemente i valori di larghezza e lunghezza del foglio. Per il resto, come l'orientamento, resta tutto invariato.

In futuro si protrebbe prevedere una classe apposita, da fornire a PDFWriter al posto dei parametri di creazione esistenti, magari contenenti i valori di W/H, e magari fornire anche le costanti per i formati più noti (es. A4).
Titolo: Re: Stampare moduli di c/c postale con PdfWriter
Inserito da: Picavbg - 02 Ottobre 2012, 14:58:06
In futuro si protrebbe prevedere una classe apposita, da fornire a PDFWriter al posto dei parametri di creazione esistenti, magari contenenti i valori di W/H, e magari fornire anche le costanti per i formati più noti (es. A4).

Mi pare un ottima idea, anche se le idee non nascono mai naturalmente, quindi per la mia partecipazione marginale, desidererei la mia parte di guadagno in Euri.  ;D

Ho già comniciato la lettura approfondita di PdfWriter, sottraendo tempo al mio ContabFam, in ulteriore fase di sviluppo. Attualmente sono proprio fermo sulla formula di trasformazione di mm in DP. Avevo pensato infatti di aggiungere la funzione suggerita da Golia, prelevando i parametri in mm. per altezza e larghezza del modulo, nella chiamata, nel programma utente, della sottosclasse di PdfWriter, o di inserirli direttamente nella sottoclasse  stessa.

Per evitare di lavorarci su, potrei aspettare la nuova versione di PDFWriter, ma temo di non fare in tempo a pagare la tassa di proprietà della mia autovettura entro la prossima scadenza.  :rotfl:
 :ciao:
Titolo: Re: Stampare moduli di c/c postale con PdfWriter
Inserito da: md9327 - 02 Ottobre 2012, 16:10:40
Citazione
Per evitare di lavorarci su, potrei aspettare la nuova versione di PDFWriter, ma temo di non fare in tempo a pagare la tassa di proprietà della mia autovettura entro la prossima scadenza.

Esatto!!!  ;D

Purtroppo il tempo è pochissimo, e non si riesce a fare tutto...  :-\
Titolo: Re: Stampare moduli di c/c postale con PdfWriter
Inserito da: dex - 04 Ottobre 2012, 14:35:58
In futuro si protrebbe prevedere una classe apposita, da fornire a PDFWriter al posto dei parametri di creazione esistenti, magari contenenti i valori di W/H, e magari fornire anche le costanti per i formati più noti (es. A4).

Mi pare un ottima idea, anche se le idee non nascono mai naturalmente, quindi per la mia partecipazione marginale, desidererei la mia parte di guadagno in Euri.  ;D

Ho già comniciato la lettura approfondita di PdfWriter, sottraendo tempo al mio ContabFam, in ulteriore fase di sviluppo. Attualmente sono proprio fermo sulla formula di trasformazione di mm in DP. Avevo pensato infatti di aggiungere la funzione suggerita da Golia, prelevando i parametri in mm. per altezza e larghezza del modulo, nella chiamata, nel programma utente, della sottosclasse di PdfWriter, o di inserirli direttamente nella sottoclasse  stessa.

Per evitare di lavorarci su, potrei aspettare la nuova versione di PDFWriter, ma temo di non fare in tempo a pagare la tassa di proprietà della mia autovettura entro la prossima scadenza.  :rotfl:
 :ciao:

Potresti modificare tu Pdfwriter e fatturare il tempo impiegato a MD.   ;) ;)
Titolo: Re: Stampare moduli di c/c postale con PdfWriter
Inserito da: Picavbg - 04 Ottobre 2012, 14:46:11
Potresti modificare tu Pdfwriter e fatturare il tempo impiegato a MD.   ;) ;)

Buona idea! Non ci avevo pensato   ;D

Ma forse ... non mi conviene.  ;D  ;D
 :ciao:
Titolo: Re: Stampare moduli di c/c postale con PdfWriter
Inserito da: md9327 - 05 Ottobre 2012, 09:37:36
INFATTI!!!  :evil:
Titolo: Re: Stampare moduli di c/c postale con PdfWriter
Inserito da: dex - 05 Ottobre 2012, 14:13:18
Potresti modificare tu Pdfwriter e fatturare il tempo impiegato a MD.   ;) ;)

Buona idea! Non ci avevo pensato   ;D

Ma forse ... non mi conviene.  ;D  ;D
 :ciao:
tranquillo... il lupo abbaia ma non morde..  ;D ;D
Titolo: Re: Stampare moduli di c/c postale con PdfWriter
Inserito da: Picavbg - 05 Ottobre 2012, 14:51:04
tranquillo... il lupo abbaia ma non morde..  ;D ;D

Ma non era il cane quello che abbaia e non morde? 
Io sapevo che il lupo perde il pelo ma non il vizio. Quindi ... stai attento.  :rotfl:
Titolo: Re: Stampare moduli di c/c postale con PdfWriter
Inserito da: md9327 - 05 Ottobre 2012, 18:40:41
RI-ESATTO!!!  >:(
Titolo: Re: Stampare moduli di c/c postale con PdfWriter
Inserito da: dex - 06 Ottobre 2012, 10:59:52
RI-ESATTO!!!  >:(

 :rotfl: :rotfl:
Titolo: Re: Stampare moduli di c/c postale con PdfWriter
Inserito da: Picavbg - 06 Febbraio 2013, 10:58:23
Riprendo finalmente la presente discussione per raggiungere l'obiettivo "stampa modulo c/c postale per bollo auto".
Ho raccolto l'invito ad apportare una piccola modifica in PdfWriter, inserendovi il riconoscimento automatico di documenti speciali (diversi dagli standard A4, A3, ...) attualmente gestiti. Prendendo anche spunto dai suggerimenti ricevuti nel corso della corrente discussione, anche se non è mia abitudine mettere le mani in lavori non miei, per rispetto e corretteza verso gli autori,  ho preso coraggio ed ho approcciato un'idea di possibile modifica. Essa, secondo me, dovrebbe cominciare nel programma chiamante, proprio nell'istruzione di chiamata:
Codice: gambas [Seleziona]
Attuale
pdf = New ReportX("Portrait", "mm", "A4")

Nuova:
Dim $StriForm As Striing = "SPEC.oo.ooXvv.vv)
'--------------------------------------------------------------
pdf = New ReportX("Portrait", "mm", $StriForm)


Il numero dei parametri è rimasto invariato, ma ho pensato di aggiungere un valore costituito, solamente per i formati speciali, dalla costante "SPEC.", seguita dalle dimensioni orizzontale(oo.oo) e verticale(vv.vv) del documento. Le stesse sono separate dalla lettere "X". Detta struttura verrà intercettata, interpretata e applicata da PDFWriter nel gruppo di istruzioni relative al "Page Format", fra le righe 184 - 202:
Codice: gambas [Seleziona]
nuova:
  'Page format
  Select Case Lower(form)
  Case "a3"
    $fwPt = 841.89
    $fhPt = 1190.55
  Case "a4"
    $fwPt = 595.28
    $fhPt = 841.89
  Case "a5"
    $fwPt = 420.94
    $fhPt = 595.28
  Case "letter"
    $fwPt = 612
    $fhPt = 792
  Case "legal"
    $fwPt = 612
    $fhPt = 1008
  Default
    If Len(form) > 5 and Len(form) <= 16
      If Left(Lower(form), 5) = "spec." Then
          i = InStr(Lower(form), "x")
          If i <> 0 Then
            ifwPt = $k * (Val(Mid(form, 6, i - 6)))
            ifhPt = $k * (Val(Right(form, Len(form) - i)))
            $fwPt = Str(ifwPt))
            $fhPt = Str(ifhPt))
         Endif
          Error.Raise("Unknown page format: " & form) 
      Endif
      Error.Raise("Unknown page format: " & form)
    Else
      Error.Raise("Unknown page format: " & form)
    Endif
  End Select


Il controllo dovrà essere ulteriormente allargato alla presenza di "mm" o "cm" in unit di "Scale factor". Non l'ho ancora approfondito, perchè non ho ancora capito come gestire l'eventuale passaggio delle dimensioni in "pt"  e in "in".

Prima di proseguire, gradirei conoscere l'opinione di chi ne sa molto di più di me sull'argomento.
 :ciao:
Titolo: Re: Stampare moduli di c/c postale con PdfWriter
Inserito da: md9327 - 07 Febbraio 2013, 14:45:09
E ti rispondo subito, visto che dopo ti dovrò uccidere...  ;D

Tempo fà stavo mettendo mano appunto alla libreria, appunto per aggiungere qualche particolare dinamico, come appunto il dimensionamento delle pagine.

Visto che ora hai "osato" metterci tu le mani, sarai punito in codesto modo:

1) prova a creare una classe PageFormat, in cui vengono definite due proprietà: larghezza e altezza della pagina
2) nella stessa classe imposti dei formati base (es. PdfPageFormat.A4) statici
3) modifica il costruttore di PdfWriter, sostituendo la String formato con un oggetto PdfPageFormat
4) sempre nel costruttore, modificare gli algoritmi di impostazione pagina con le proprietà rilevate dall'oggetto PdfPageFormat
5) in alternativa, visto che si può fare, capire se il parametro si tratta di una stringa o di un oggetto PdfPageFormat. Nel primo caso il comportamento rimane com'era prima, nel secondo caso si vanno a prendere i valori delle proprietà dell'oggetto.
6) stessa cosa si può fare anche con l'orientamento, prendendo per esempio le proprietà già presenti in Printer, oppure creare un oggetto apposito, ad esempio PdfPageOrientation
7) idem con patate per il tipo di misura (mm, in, ecc.), passando una classe apposita, ad esempio PdfMisura.

Queste cose erano in studio tempo fà, ma poi non ho avuto tempo di attuarle.
Puoi farlo tu, e se lo fai bene, eviti pure la tua "dipartita"...  :rotfl:

I sorgenti del progetto PdfWriter sono su sf.net, e sono quelli ufficialmente distribuiti.
Se l'integrazione è corretta, posso approvare il tutto e mettere la nuova versione a disposizione publbicamente.

Fammi sapere!  :ciao:
Titolo: Re: Stampare moduli di c/c postale con PdfWriter
Inserito da: Picavbg - 07 Febbraio 2013, 22:53:31
La vedo dura, ma visto che ne va della pellinformatica, dovrò farlo. Spero solo di non dovere esprimere poi il mio ultimo desiderio.  :rotfl:

Poichè mentre aspettavo indicazioni ho cominciato a realizzare una classe per la conversione di un numero nel suo corrispondente in lettere, dovrai pazientare fino al completamento di questo nuovo passo. Se la classe in costruzione funzionerà a dovere, la metterò a disposizione per caricarla nell'area "Download".  ;)

 :ciao:
Titolo: Re: Stampare moduli di c/c postale con PdfWriter
Inserito da: md9327 - 08 Febbraio 2013, 10:44:24
Onde evitare di creare cloni inutili, se ti è possibile, prova a condividere con me prima le tue modifiche, magari posso darti una mano (sempre dipendente dal tempo a disposizione), e validare la cosa in modo da renderla poi pubblica.
Con questo voglio solo dire che, magari, riusciamo ad evitare di creare anomalie, e potenziare la libreria, rendendola migliore con l'ausilio di più capoccie...  :D
Nel mentre, puoi anche inserire il tuo nome/nick nelle testate dei sorgenti, così sappiamo tutti con chi prendersela se non funziona...  :rotfl: