How can I find the maximum character limit for a text field?

I've researched this problem and I tried the following code snippets. Unfortunately, I couldn't find the maximum character limit for a text field in an AcroForm form:

Snippet 1

ListAcroFields.FieldPosition> positions = fields.getFieldPositions(signame);
Rectangle rect = positions.get(0).position; // In points:
float left   = rect.getLeft();
float bTop   = rect.getTop();
float width  = rect.getWidth();
float height = rect.getHeight();
Snippet 2

PdfDictionary mergedFieldDictionary = myAcroFields.getFieldItem( key ).getMerged( 0 );
PdfNumber maxLengthNumber = mergedFieldDictionary.getAsNumber( PdfName.MAXLEN );
if (maxLenghtNumber != null) {
  MaxFieldLength = maxLengthNumber.intValue();
Can any one please help me out?

Posted on StackOverflow on Aug 5, 2015 by Manikanta andydev

Code snippet 2 is correct, but it will only work if a maximum length was defined for the form field. Usually, no maximum length will be defined in which case maxLenghtNumber will be null.

If no maximum length was defined, there is no limit, so you will have to measure if the text fits. Based on your code snippet 1, you already know the available width: width. How many characters can fit this width depends on the font size and the characters. The width of the characters depends on the font.

Here's an extra code snippet:

TextField tx = new TextField(writer, null, null);
fields.decodeGenericDictionary(mergedFieldDictionary, tx);
float size = tx.getFontSize();
BaseFont basefont = tx.getFont();

If the font is a monospaced font, it will be very easy to know how many characters fit within the width. In this case, it's sufficient to get the width of a single glyph (e.g. w) and divide the total width by the glyph width: width / w.

Usually, fonts will have proportional widths, making your question unanswerable. For instance: the width of "IIIIIIIIII" is smaller than the width of "WWWWWWWWWW" In both cases, we have 10 characters, but an I doesn't take as much space as a W.

I suggest that you measure your String value (as explained here: and compare it with width. With my extra code snippet, you have a size and a basefont. If your text is in a variable text, this is how you get the width of the text:

float w = basefont.getWidthPoint(text, size);

If that value is greater than width, you need to downsize font size to make the text fit.

Important: in some forms, the font size is defined as 0. This doesn't mean that a font size of 0 should be used. It means that the viewer should choose a font size in such a way that it fits into the text field.

For example: if my text value is of length 100 characters, and if the limit is 60, then I need to add 60 characters in the first page and the remaining 40 character text in next page of pdf form. How can I determine the limit to achieve this?

Please compare:




In both cases, we have exactly 100 characters. However, the first sequence takes a lot less space than the second one.

If your form doesn't define any /MaxLength, then you have to determine if the characters of your String match the available width. This can NOT be expressed as a number of characters, because the number of characters that fit depends on the characters you want to add!

100 I characters might fit, whereas 100 W characters may not. This is elementary logic. You can only calculate how many characters fit in case the form tells you that the content is added using a monospace font.

Ready to use iText?

Try our iText 7 Library and add-ons FREE for 30 days. Test your proof of concept, and see if our solution is right for you.

Get my FREE trial

Still have questions? 

We're happy to answer your questions. Reach out to us and we'll get back to you shortly.

Contact us
Stay updated

Join 11,000+ subscribers and become an iText PDF expert by staying up to date with our new products, updates, tips, technical solutions and happenings.

Subscribe Now