La guida di PdfWriter comincia con la seguente frase: "Con questa potente classe è possibile creare dei report professionali ed esteticamente accattivanti in pochissimo tempo".
Lungi da me l'intenzione di avviare una polemica, ma mi sto imbattendo per la terza volta a gestire un output con PdfWriter e dopo il primo difficoltoso cammino, andato in porto, grazie all'aiuto di amici di questo Forum, il secondo tentativo è fallito miseramente, questo, cioè il 3°, mi sta creando non poche difficoltà.
Dovendo riportare in output.pdf il contenuto di una TextArea, ho pensato di sfruttare la funzione
Multiriga che sconosco completamente, ma che, seguendo la guida, pensavo di potere mettere in pratica facilmente. Macchè, ottengo un file dove le righe risultano, è vero, tutte stampate, ma sovrapposte.
Nel richiamare la mia procedura
"ListAnom", sottoclasse di PdfWriter, passo come parametro dati un un'unica stringa contenente le righe da stampare, distinte ciascuna dalla successiva dalla presenza di una sequenza di escape "\n", mentre all'interno di ciascuna riga sono presenti anche sequenze del tipo "\t".
Public Sub PulsPdf_Click() ' Il file .pdf prodotto viene poi mostrato sul display
'----------------------------------------------------------------------------
FaiPdf(Foglio.Text)
Shell("Exec = libreoffice/home/piero/MovvAnomStmp")
End
Public Sub PulStampa_Click() ' Il file .pdf prodotto viene poi stampato
Dim hStampa As Process
'---------------------------------ù
FaiPdf(Foglio.Text)
hStampa = Shell("lpr -o media=A4 " & User.home & "/MovvAnomStmp")
End
Private Sub FaiPdf($Testo As String)
Dim pdf As ListAnom
'-------------------------------------------
With pdf = New ListAnom("L", "mm", "A4") 'formato della pagina: A4 orizzontale
.Open()
.AliasNbPages()
.Data($Testo)
.Output(User.Home & "/MovvAnomStmp", False)
End With
End
La classe ListAnom esegue lo split della stringa ricevuta in un array di n righe, tante quante sono quelle che dovrebbero essere riportate nel file.pdf:
Inherits PdfWriter
Private iNumPag As Integer
Public Sub Header() 'intestazione di pagina (valida per tutte le pagine)
End
Public Function Data($TstMultiRg As String) 'corpo di una o più pagine
Dim bEsito As Boolean
Dim bBlu As Boolean
Dim i As Integer = (-1)
Dim ill As Integer
Dim iLun As Integer
Dim iTotRg As Integer
Dim $DxSx As String
Dim $StriMia As String
Dim $RgStmp As New String[]
'---------------------------------------------------------
Me.AddPage()
Me.SetX(0)
Me.SetY(10)
Me.Ln()
$RgStmp = Split($TstMultiRg, "\n")
Me.SetFont("Times", "", 10)
For Each $RgStmp
Inc i
Me.MultiRiga(0, 0, $RgStmp[i], False, "L", False)
Me.MultiRect([0, 0])
Me.Lnm()
Next
End
Public Function Footer()
Dim $FinePag As String = "- Pag. "
'------------------------------------------------------------------
iNumPag += 1
$FinePag &= Str(iNumPag) & " -"
Me.SetXY(100, -270)
Me.SetFont("Times", "", 10)
Me.SetLineWidth(0)
Me.Cell(0, 0, $FinePag, False, 0, "L", False)
Me.Ln()
End
Le righe prodotte, dovrebbero essere tutte senza bordo.
Non mi resta che studiarmi passo dopo passo il comportamento di PdfWriter, nella speranza di portarlo a termine prima che mi ricrescano i capelli.