iText Получить количество символов в поле

1

Я пытаюсь выяснить, в каких форматах дата рождения должна быть в пустом поле в PDF, используя iText,

Я могу штамповать поле со значением, но затем должен знать, какова должна быть дата рождения.

Я понял, что если я выйду из поля, поэтому я знаю, как должен выглядеть формат, потому что форматы могут быть:

YYYYMMDDNNNN (14 цифр)

YYYYMMDD (10 цифр)

YYMMDD (8 цифр)

Поле имеет фиксированное количество цифр, если я штампую поле со слишком большим числом чисел, тогда числа, которые выходят за пределы поля, исчезают.

Как найти длину пустого поля?

как я штамповать поле:

private void stampValuesOnFields()
{
  try
  {
    PdfReader reader = new PdfReader(System.getProperty("com.sun.aas.instanceRoot") + "/PDF/Templates/org.pdf");
    String path = System.getProperty("com.sun.aas.instanceRoot") + "/PDF/Generated PDF/" + "new.pdf";
    PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(path));

    stamper.getAcroFields().setField("field", "19321029");
  }catch(Exception e)
  {}
}

Вот pdf файлы, которые я пытаюсь заполнить, но я хочу, чтобы он работал для других файлов PDF с другими форматами дня рождения:

http://www.korkortsportalen.se/upload/dokument/blanketter/foretag/tstrk1031_lakarintyg_diabetes.pdf (поле под заголовком "Sökandens personnummer")

  • 0
    Существуют разные способы ограничения количества символов, добавляемых в поле. Наиболее распространенным способом является определение прямоугольника таким образом, чтобы он вмещал только ограниченное количество символов без определения этого числа. Такое слово, как «маршрут», занимает меньше места, чем «памятники». Оба имеют 9 символов, но буквы m и n занимают больше места, чем буквы i и r. Покажите нам свой PDF, и мы сможем дать более убедительный ответ на ваш вопрос. Прямо сейчас вопрос без ответа.
  • 0
    Конечно, если вы хотите убедиться, что текст соответствует текстовому полю. Вы всегда можете изменить размер шрифта на 0 . Когда вы добавляете текст в текстовое поле с размером шрифта 0 , шрифт будет адаптироваться, чтобы обеспечить соответствие текста. Например: при добавлении «19321029» фактический размер шрифта может составлять 10, но при добавлении «321029» фактический размер шрифта может составлять 12.
Показать ещё 3 комментария
Теги:
itext

1 ответ

1
Лучший ответ

Тебе повезло. Ваше поле определяет /MaxLen что означает, что вы можете узнать максимальную длину поля. На следующем снимке экрана вы можете увидеть свойства словаря поля/аннотации для поля Falt__41 (который можно использовать для добавления персонажа Sökandens):

Изображение 174551

Как вы можете видеть, это поле может содержать не более 12 символов. Кроме того, значение /Ff (fields flags) равно 29360128 или двоичное значение: 1110000000000000000000000. Это означает, что действуют следующие флаги: не проверяйте орфографию, не прокручивайте и не расчесывайте. Флаг гребня делает все, что вы введете, символы будут равномерно распределены по доступной ширине. В этом случае каждый символ будет принимать 1/12 доступной ширины.

Теперь как вы извлекаете значение /MaxLen? Это более или менее объяснено в моей книге, но я пишу следующие строки из памяти:

AcroFields form = reader.getAcroFields();
AcroFields.Item item = form.getFieldItem("Falt__41");
PdfDictionary field = item.getMerged(0);
PdfNumber maxlen = field.getAsNumber(PdfName.MAXLEN);

Теперь вы можете получить значение int maxlen.

Важное примечание: не каждое поле имеет значение /MaxLen.

  • 0
    Спасибо, действительно красивый ответ. Спасибо, что нашли время, ты потрясающий!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню