WrapWidht non funziona

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