Я пытаюсь выяснить, в каких форматах дата рождения должна быть в пустом поле в 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")
Тебе повезло. Ваше поле определяет /MaxLen
что означает, что вы можете узнать максимальную длину поля. На следующем снимке экрана вы можете увидеть свойства словаря поля/аннотации для поля Falt__41
(который можно использовать для добавления персонажа Sökandens):
Как вы можете видеть, это поле может содержать не более 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
. Когда вы добавляете текст в текстовое поле с размером шрифта0
, шрифт будет адаптироваться, чтобы обеспечить соответствие текста. Например: при добавлении «19321029» фактический размер шрифта может составлять 10, но при добавлении «321029» фактический размер шрифта может составлять 12.