使用itext api在PDF中查找AcroField文本框的最大字符数限制?

时间:2015-08-05 16:54:50

标签: java android pdf itext

我已经研究过这个问题,我尝试了以下代码片段。不幸的是,我无法找到AcroForm表单中文本字段的最大字符数限制:

Snippet 1

List<AcroFields.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();
} 

任何人都可以帮帮我吗?

1 个答案:

答案 0 :(得分:0)

代码段2是正确的(在我应用了一个小修复之后),但只有在为表单字段定义了最大长度时它才有效。通常,不会定义最大长度,maxLenghtNumber将为null

如果没有定义最大长度,则没有限制,因此如果文本适合,则必须测量。根据您的代码段1,您已经知道可用的宽度:width。这个宽度可以容纳多少个字符取决于字体大小和字符。字符的宽度取决于字体。

这是一个额外的代码段:

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

如果字体是等宽字体,则很容易知道宽度内适合的字符数。在这种情况下,它足以获得单个字形的宽度(例如w)并将总宽度除以字形宽度:width / w

通常,字体会有比例宽度,使您的问题无法回答。例如:&#34; IIIIIIIIII&#34; 的宽度小于&#34; WWWWWWWWWW&#34; 的宽度在这两种情况下,我们有10个字符,但是没有像 W 那样占用空间。

我建议您衡量一下String值(如此处所述:How to calculate the string width in iText?)并将其与width进行比较。使用我的额外代码段,您有sizebasefont。如果您的文本位于变量text中,则可以获得文本的宽度:

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

如果该值大于width,则需要缩小字体size的大小以使文本适合。

重要提示:在某些形式中,字体大小定义为0。这并不意味着应该使用0的字体大小。这意味着观众应该以适合文本字段的方式选择字体大小。

<强>更新

在评论中你说:

  

例如,我的文本值长度为100个字符,如果假设限制为60.那么基于60,我需要在第一页中添加60个字符,在pdf格式的下一页中添加剩余的40个字符文本。 *我想知道如何确定限制。

请比较:

<强> IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII

使用:

<强> WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW

在这两种情况下,我们都有100个字符。但是,第一个序列适合StackOverflow页面中的一行,而第二个序列不适合。

如果您的表单没有定义任何/MaxLength,那么您必须确定String的字符是否与可用宽度相匹配。 这不能表示为多个字符,因为符合的字符数取决于您要添加的字符!

100 I 字符可能适合,而100 W 字符可能不适合。这是基本逻辑。令我惊讶的是你不同意我的看法。

如果表单告诉您使用等宽字体添加内容,则只能计算适合的字符数。