Autore Topic: Stampare moduli di c/c postale con PdfWriter  (Letto 1488 volte)

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Stampare moduli di c/c postale con PdfWriter
« Risposta #15 il: 05 Ottobre 2012, 18:40:41 »
RI-ESATTO!!!  >:(

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re: Stampare moduli di c/c postale con PdfWriter
« Risposta #16 il: 06 Ottobre 2012, 10:59:52 »

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Stampare moduli di c/c postale con PdfWriter
« Risposta #17 il: 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:
:ciao:

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Stampare moduli di c/c postale con PdfWriter
« Risposta #18 il: 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:

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Stampare moduli di c/c postale con PdfWriter
« Risposta #19 il: 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:
:ciao:

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Stampare moduli di c/c postale con PdfWriter
« Risposta #20 il: 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: