2009-10-06 12 views
19

Używam iText do zapisu pliku PDF. W niektórych przypadkach muszę podpisać plik PDF za pomocą funkcji SetVisibleSignature. Za pomocą tej funkcji musimy wyznaczyć prostokąt, do którego będziemy zapisywać treść.Jak obliczyć szerokość łańcucha w iText?

Trudno mi jednak obliczyć, jak szeroki będzie ciąg znaków, więc mogę ustawić prostokąt przed ustawieniem podpisu w pliku PDF.

Jak obliczyć szerokość łańcucha w iText?

Odpowiedz

24

Możesz użyć BaseFont.getWidthPoint(String text, float fontSize), aby uzyskać szerokość ciągu w pt.

Albo umieścić napis w kawałek i zrobić chunk.getWidthPoint()

+0

Jak odzyskać instancję basefont? –

+0

Chciałbym znać szerokość akapitów w tabeli. Wygląda na to, że metoda używająca porcji zwraca nieprawidłowe wartości. –

+0

W jaki sposób statyczny 'getWidthPoint' będzie wiedział, która czcionka jest przyjęta? x_X –

12

Zaakceptowanych odpowiedź BaseFont.getWidthPoint, nie będzie działać w itext 5.5.4 ponieważ metoda nie jest już statyczne. Nawet jeśli nadal istniała, nie bierze pod uwagę prawdziwej używanej czcionki (jej rodziny lub jej pogrubienia/kursywy), ponieważ jest statyczna i otrzymuje ograniczone parametry.

chunk.getWidthPoint() działa z prawdziwą czcionką, jak zostało to później powiedziane, ale w przypadku niektórych zastosowań jest to marnotrawstwo polegające na ciągłym tworzeniu fragmentu tylko na szerokość, zwłaszcza jeśli porcja nie jest planowana w późniejszym użyciu.

Jest to kod bazowy dla chunk.getWidthPoint() używać jako samodzielny substytut, zakładając, że nie robią żadnej skalowanie poziome:

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

skończyło się w ten sposób z ColumnText.getWidth(Phrase phrase) do wielkości co szerokość Phrase będzie przed wyświetleniem go z ColumnText.showTextAligned.

W tym fragmencie użyłem ColumnText.getWidth, aby zmienić długość ciągu, aby umieścić go w prawym górnym rogu strony. Działa on w formacie A4, nie testował go dalej.

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 
);