Domanda

Sto usando ITEXT per scrivere un PDF. In alcuni casi, devo firmare il PDF con il SetVisibleSignature funzione. Con questa funzione, dobbiamo designare il rettangolo in cui scriveremo il contenuto.

Ma è difficile per me calcolare quanto sarà ampia la stringa, in modo da poter impostare il rettangolo prima di impostare una firma sul PDF.

Come posso calcolare la larghezza della stringa in itext?

È stato utile?

Soluzione

Puoi usare BaseFont.getWidthPoint(String text, float fontSize) Per ottenere la larghezza della stringa in pt.

O metti la corda in un pezzo e fai chunk.getWidthPoint()

Altri suggerimenti

La risposta accettata BaseFont.getWidthPoint, non funzionerà in Itext 5.5.4 poiché il metodo non è più statico. Anche se esisteva ancora, non tiene conto del vero carattere utilizzato (la sua famiglia o il suo grassetto/corsivo) poiché è statico e sta ricevendo parametri limitati.

chunk.getWidthPoint() Funziona con il vero carattere come ha affermato in seguito, ma per alcuni usi è uno spreco per creare costantemente un pezzo solo per la larghezza, specialmente se il pezzo non è previsto per essere utilizzato in seguito.

Questo è il codice sottostante per chunk.getWidthPoint() Utilizzare come sostituto autonomo, supponendo che non stia facendo alcun ridimensionamento orizzontale:

font.getCalculatedBaseFont(true).getWidthPoint(text, font.getCalculatedSize());

Ho finito per farlo con ColumnText.getWidth( Phrase phrase ) per dimensioni qual è la larghezza di a Phrase sarebbe prima di mostrarlo con ColumnText.showTextAligned.

In questo frammento, ho usato il ColumnText.getWidth per dimensioni della lunghezza di una stringa per posizionarla in alto a destra di una pagina. Funziona in Portrait A4, non l'ha testato ulteriormente.

Phrase phrase = new Phrase( "Bla bla bla!", new Font( FontFamily.HELVETICA, 9 ) );
float width = ColumnText.getWidth( phrase );

ColumnText.showTextAligned (
    canvas,
    Element.ALIGN_LEFT,
    phrase,
    canvas.getPdfDocument( ).right( ) - width,
    canvas.getPdfDocument( ).top( ) + 9,
    0
);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top