2009-10-06 9 views
19

Sto usando iText per scrivere un PDF. In alcuni casi, ho bisogno di firmare il PDF con la funzione SetVisibleSignature. Con questa funzione, dobbiamo designare il rettangolo in cui scriveremo il contenuto.Come calcolare la larghezza della stringa in iText?

Ma è difficile per me calcolare l'ampiezza della stringa, in modo da poter impostare il rettangolo prima di impostare una firma sul PDF.

Come posso calcolare la larghezza della stringa in iText?

risposta

24

È possibile utilizzare BaseFont.getWidthPoint(String text, float fontSize) per ottenere la larghezza della stringa in pt.

O mettere la stringa in un pezzo e fare chunk.getWidthPoint()

+0

come si recupera l'istanza di basefont? –

+0

Mi piacerebbe conoscere la larghezza dei paragrafi in una tabella. Sembra che il metodo che utilizza un blocco restituisca valori errati. –

+0

In che modo statico 'getWidthPoint' saprebbe quale tipo di carattere è assunto? x_X –

12

La risposta accettata BaseFont.getWidthPoint, non funziona in 5.5.4 itext poiché il metodo non è più statica. Anche se esistesse ancora, non tiene conto del carattere vero usato (la sua famiglia o il suo grassetto/corsivo) poiché è statico e riceve parametri limitati.

chunk.getWidthPoint() funziona con il carattere vero come indicato in seguito, ma per alcuni usi è uno spreco creare costantemente un chunk solo per la larghezza, soprattutto se il blocco non è pianificato per essere utilizzato in seguito.

Questo è il codice sottostante per chunk.getWidthPoint() da usare come sostituto standalone, supponendo che non sta facendo alcun ridimensionamento orizzontale:

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

ho finito per fare questo con ColumnText.getWidth(Phrase phrase) a misura ciò che la larghezza di un Phrase sarebbe essere prima di mostrarlo con ColumnText.showTextAligned.

In questo frammento, ho usato il ColumnText.getWidth per ridimensionare la lunghezza di una stringa per posizionarlo in alto a destra di una pagina. Funziona in verticale A4, non l'ho 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 
);