Wie berechnet ich die Stringbreite im ITEXT?
-
20-09-2019 - |
Frage
Ich benutze iText, um ein PDF zu schreiben. In einigen Fällen muss ich das PDF mit dem unterschreiben SetVisibleSignature
Funktion. Mit dieser Funktion müssen wir das Rechteck festlegen, in das wir den Inhalt schreiben werden.
Aber es fällt mir schwer zu berechnen, wie weit die Zeichenfolge sein wird, damit ich das Rechteck einstellen kann, bevor ich eine Signatur auf das PDF einstellen kann.
Wie kann ich die Stringbreite in Itext berechnen?
Lösung
Sie können verwenden BaseFont.getWidthPoint(String text, float fontSize)
Um die Breite der Saite in Pt zu bekommen.
Oder stecken Sie die Saite in einen Stück und tun Sie es chunk.getWidthPoint()
Andere Tipps
Die akzeptierte Antwort BaseFont.getWidthPoint
, funktioniert nicht in Itext 5.5.4, da die Methode nicht mehr statisch ist. Auch wenn es noch existierte, berücksichtigt es nicht die wahre Schriftart (ihre Familie oder ihre mutige Kursivschrift), da sie statisch ist und begrenzte Parameter erhält.
chunk.getWidthPoint()
Funktioniert wie später mit der wahren Schriftart, aber für bestimmte Verwendungen ist es eine Verschwendung, ständig ein Stück nur für die Breite zu erstellen, insbesondere wenn der Stück nicht geplant ist, später verwendet zu werden.
Dies ist der zugrunde liegende Code für chunk.getWidthPoint()
als eigenständige Ersatz zu verwenden, vorausgesetzt, Sie machen keine horizontale Skalierung:
font.getCalculatedBaseFont(true).getWidthPoint(text, font.getCalculatedSize());
Ich habe das mit dem gemacht ColumnText.getWidth( Phrase phrase )
Größe, was die Breite von a Phrase
würde vor dem Zeigen mit ColumnText.showTextAligned
.
In diesem Snippet habe ich das verwendet ColumnText.getWidth
Um die Länge einer Saite zugrößen, um sie oben rechts auf einer Seite zu platzieren. Es funktioniert in Porträt A4, habe es nicht weiter getestet.
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
);