Ciao Antonio
Innanzi tutto ti saluto sempre con molto piacere. Spero tu stia bene.
Ti copio una porzione del codice:
Var startline As Integer = 205
Session.Document.Graphics.DrawingColor = &c00000000
Session.Document.Graphics.FontName = PDFDocument.StandardFontNames.Courier
Session.Document.Graphics.FontSize = 7
For Each row As DatabaseRow In rs
Session.Document.Graphics.DrawText(row.Column("nombre_inci").StringValue, 50, startline,750,false)
startline = startline + 20
If startline >= Session.Document.Graphics.Height Then
Session.Document.Graphics.NextPage
creaTavolaFormula(780)
startline = 55
End If
Next
Questa e’ la linea di codice che mi sta dando problemi
Session.Document.Graphics.DrawText(row.Column("nombre_inci").StringValue, 50, startline,750,false)
Come ben sai il drawText ha 5 parametri tra cui il WrapWidth ovvero il testo a capo se per linee di testo troppo lunghe. Affinché il WrapWidht funzioni il parametro “condense” deve essere “false”.
Detto questo il risultato e’ il seguente:
Quando il testo e’ lungo si sovrappone lo stesso, quindi sembra che il parametro WrapWidht non funziona.
E’ un bug, sto sbagliando qualcosa oppure…?
Suggerimenti?
Come sempre Grazie
Domenico
Ciao
A occhio e croce, ovvero senza provare il codice o tentare di capire cosa stai scrivendo, fai una assunzione errata: se il testo va su più righe allora il tuo startLine viene aggiornato nel drawText, ma ovviamente non è così.
Dovresti leggere l’altezza (textHeight con il testo e il wrapWidth) e se maggiore dell’altezza di una singola linea aggiornare di conseguenza startLine
Almeno credo. Fammi sapere.
Ciao Antonio
Come sempre grazie per la tua risposta. Adesso no so se sto usando bene il textHeight
Session.Document.Graphics.DrawText(row.Column("nombre_inci").StringValue, (Session.Document.Graphics.TextHeight + 25) ,startline,700,false)
startline e’ un valore integer e rappresenta dove voglio scrivere(dal top) la prima linea di testo.
Il risultato non cambia e le linee si sovrappongono lo stesso. No so.
Uno snippet per aiutarmi?
Grazie mille
Domenico
Mi sono spiegato male.
Non è nel DrawText il problema (credo)
ma nella riga successiva in cui tu sposti il riferimento Y (startline) per scrivere la successiva.
Ma se il testo che hai appena scritto copre 2 righe (ad esempio), la linea successiva scriverà sopra la seconda che hai appena scritto.
In altre parole tu aumenti la posizione di un valore fisso (20) anche se magari scrivendo 2 righe dovresti aumentare di 40.
Ciao Antonio
Infatti nel codice che ho postato nel primo post il startline che segue ed aggiorna e’ il seguente:
Session.Document.Graphics.DrawText(row.Column("nombre_inci").StringValue, 50, startline,750,false)
startline = startline + 20
ma non succede niente, continua a scrivere sempre sulla stessa linea
Non so perché
Perché è quello che gli chiedi di fare:
Scrivi un testo alto 1 riga a partire da startLine
aumenta strartLine di una riga
Scrivi un testo alto 2 righe a partire da StartLine
aumenta startLine di una riga
Scrivi un testo alto 1 riga a partire da startLine
aumenta strartLine di una riga
//Questo testo si sovrappone alla seconda riga precedente
Ciao Antonio
Grazie come sempre per il tuo prezioso aiuto
Domenico
Ciao Antonio
Mi dispiace disturbare ma non ne vengo fuori.
Ho seguito le tue indicazioni, ma non ce verso, ho bisogno del tuo aiuto a tutti i costi.
var idFormulaMaestra as String = w_batch_record.id_formulaMaestra.Text
var rs as RowSet
rs = session.mDB.SelectSQL("SELECT * FROM materia_prima WHERE id_formula_maestra = '" + idFormulaMaestra + "'")
Session.Document.Graphics.DrawingColor = &c00000000
Session.Document.Graphics.FontName = PDFDocument.StandardFontNames.Courier
Session.Document.Graphics.FontSize = 8
Session.Document.Graphics.Bold = false
Var startline As Integer = 205
For Each row As DatabaseRow In rs
Session.Document.Graphics.DrawText(row.Column("nombre_inci").StringValue, 50,startline,680,false)
startline = startline + 15
If startline >= Session.Document.Graphics.Height Then
Session.Document.Graphics.NextPage
'creaTavolaFormula(780)
startline = 55
End If
Next
rs.Close
End Try
Come vedi prendo i dati da una DB e poi ciclo con un for each.
Dico di inizare a stampare (startline) a 205 px dal bordo sup e di scrivere su una linea nuova ogni 15 px (startline = startline + 15).
Nel drawtext ho solo 5 parametri drawtext(string, x , y , textwidth,false)
Il textwidth praticamente e’ come wraptext cioé manda a capo il testo se troppo lungo sulla stessa riga.
Non riesco a vedere dove sbaglio e sono disperato.
Please help
Grazie come sempre
Domenico
Ciao
startline=startline + session.Graphics.TextHeight(row.columun(“nombre_inc”).stringValue)
1 Like
Ciao Antonio
Ho usato la tua soluzione, ma sfortunatamente non funziona.
Session.Document.Graphics.DrawText(row.Column("nombre_inci").StringValue, 50,startline,680,false)
startline = startline + 15
L’unica cosa che non funziona e’ che quando il texto nella linea e’ troppo lungo invece di mandarlo accapo lo sovrascrive nella linea successiva.
No riesco a venire fuori
Grazie lo stesso
startline=startline + session.Graphics.TextHeight(row.columun(“nombre_inc”).stringValue, 680)
dove 680 è la tua larghezza del testo
Tieni conto che per la riga singola può non essere uguale a 15, quindi di conseguenza dovrai fare le dovute proporzioni o calcoli
IL CONCETTO È SEMPLICE
tu sposti di una quantità fissa, se scrivi due righe (nel senso che il testo va a capo) tu avanzi di UNA devi correggere questo