Слишком длинное имя ArgumentException

При использовании iTextSharp.text.pdf.PdfStamper.AcroFields.SetField я получаю исключение ArgumentException в полях формы PDF, которые появляются после определенной точки в документе. В нем говорится:

Название «Helveia01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678» слишком длинный (156 символов).

Это внутреннее имя, данное полю формы редактором PDF. Внутренние имена становятся все длиннее и длиннее по мере добавления дополнительных полей формы (используя Foxit). Удобное для пользователя название — это всего лишь короткая строка (Общая сумма обязательств — ниже). Если вы посмотрите на pdf в блокноте, вы увидите строку выше:

<> / DA (/ Helveia0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567 0 Т 0 0 0 гк) / АР <> / Т (LiabilitiesTotal) >>

У меня нет контроля над этим внутренним именем. Любые идеи, почему он имеет ограничение при ссылке iTextSharp.text.pdf.PdfStamper.AcroFields.SetField? Документ PDF действителен, и я могу заполнить его вручную, просто не используя PdfStamper.

В качестве эксперимента я создал пустой PDF-файл с помощью FoxitPhantomPDF 6.0.5.0618 и добавил 30 полей формы, сохранив их имена по умолчанию. Результат: окончательному полю формы присваивается имя объекта Helveia0123456789012345678901234567, первое называется Helvei. Из блокнота++:

PDF проверен в блокноте++

Поиск "DA(/Helvei" (30 совпадений в 1 файле)
C:\Users\sean.fackrell\Desktop\NewFoxit.pdf (30 совпадений) Строка 36: ‹>/DA(/Helvei 0 Tf 0 0 0 rg)/AP‹>>> Строка 50: ‹>/DA(/Helveia 0 Tf 0 0 0 rg)/AP‹>>> Строка 64: ‹>/DA(/Helveia0 0 Tf 0 0 0 rg)/AP ‹>>> Строка 78: ‹>/DA(/Helveia01 0 Tf 0 0 0 rg)/AP‹>>> Строка 92: ‹>/DA(/Helveia012 0 Tf 0 0 0 rg)/AP‹>>> Строка 106: ‹>/DA(/Helveia0123 0 Tf 0 0 0 rg)/AP‹>>> Строка 120: ‹>/DA(/Helveia01234 0 Tf 0 0 0 rg)/AP‹>>>> Строка 134: ‹ >/DA(/Helveia012345 0 Tf 0 0 0 rg)/AP‹>>> Строка 148: ‹>/DA(/Helveia0123456 0 Tf 0 0 0 rg)/AP‹>>> Строка 162: ‹>/DA( /Helveia01234567 0 Tf 0 0 0 rg)/AP‹>>> Строка 176: ‹>/DA(/Helveia012345678 0 Tf 0 0 0 rg)/AP‹>>> Строка 190: ‹>/DA(/Helveia0123456789 0 Tf 0 0 0 rg)/AP‹>>> Строка 204: ‹>/DA(/Helveia01234567890 0 Tf 0 0 0 rg)/AP‹>>> Строка 218: ‹>/DA(/Helveia012345678901 0 Tf 0 0 0 rg )/AP‹>>> Строка 232: ‹>/DA(/Helveia0123456789012 0 Tf 0 0 0 rg)/AP‹>>> Строка 246: ‹>/DA(/Helveia01234567890123 0 Tf 0 0 0 rg)/AP‹ >>> Строка 260: ‹>/DA(/Helveia012345678901234 0 Tf 0 0 0 rg)/AP‹>>> Строка 274: ‹>/DA(/Helveia0123456789012345 0 Tf 0 0 0 rg)/AP‹>>> Строка 288: ‹ >/DA(/Helveia01234567890123456 0 Tf 0 0 0 rg)/AP‹>>> Строка 302: ‹>/DA(/Helveia012345678901234567 0 Tf 0 0 0 rg)/AP‹>>> Строка 316: ‹>/DA( / HELVEIA01234567890123456789012345678 0 TF 0 0 0 RG) / AP <>>> Линия 330: <> / DA (/ HELVEIA01234567890123456789 0 TF 0 0 0 RG) / AP <>>> Line 368: <> / DA (/ HELVEIA01234567890123456789012345678901234567890 0 TF 0 0 0 rg)/AP‹>>> Строка 382: ‹>/DA(/Helveia0123456789012345678901 0 Tf 0 0 0 rg)/AP‹>>> Строка 396: ‹>/DA(/Helveia01234567890123456789012 0 0 rg 0 Tf 0 )/AP‹>>> Строка 410: ‹>/DA(/Helveia012345678901234567890123 0 Tf 0 0 0 rg)/AP‹>>> Строка 424: ‹>/DA(/Helveia0123456789012345678901234 0 Tf 0 0 rg) 0 0 0 rg >>> Строка 438: ‹>/DA(/Helveia01234567890123456789012345 0 Tf 0 0 0 rg)/AP‹>>> Строка 452: ‹>/DA(/Helveia012345678901234567890123456>> 0 Tf 0 >> 0 0 rg)/AP 466: ‹>/DA(/Helveia0123456789012345678901234567 0 Tf 0 0 0 rg)/AP‹>>>


person sfax    schedule 15.08.2013    source источник
comment
Что ж, завтра я встречаюсь с двумя менеджерами проектов из Foxit. Я расскажу им о проблеме. Это это проблема, так как ISO-32000-1 прямо говорит, что имена длиннее 127 символов запрещены. См. Приложение C ISO-32000-1 (обязательное): Пределы реализации. имя; 127; Максимальная длина имени в байтах.   -  person Bruno Lowagie    schedule 16.08.2013
comment
Кстати: /Helveia... это не имя поля. Это название шрифта, так что, возможно, вы считаете, что Foxit делает это неправильно. Мне бы очень хотелось увидеть этот файл, так как в PDF должны быть другие места, где этот шрифт определен. Как он был изначально создан?   -  person Bruno Lowagie    schedule 16.08.2013
comment
Спасибо за ответ. Я подозревал, что он создает дубликаты шрифтов, но если вы посмотрите на свойства pdf, все выглядит нормально. PDF-файл был создан из документа Word, предоставленного клиентом, а поля формы были добавлены и впоследствии названы. У меня нет Foxit на этом ноутбуке, но я позже подтвержу на работе, можно ли это повторить в новом pdf. Я почти уверен, что создал новый PDF-файл с помощью Foxit, добавил 10 полей формы и увидел последовательность Helveia0123, Helveia01234, Helveia01235, Helveia01236 и т. д. в новом документе. Вчера я поднял этот вопрос в Foxit, но пока не получил ответа.   -  person sfax    schedule 16.08.2013
comment
Добавлена ​​подробная информация о том, что происходит с новым пустым PDF-файлом.   -  person sfax    schedule 16.08.2013
comment
Вау, этого не должно было случиться. Я передам это кому-нибудь в Foxit во Фремонте.   -  person Bruno Lowagie    schedule 16.08.2013
comment
Спасибо Бруно. Ценю твою помощь   -  person sfax    schedule 16.08.2013
comment
Я получил ответ от Foxit. Они подтверждают, что это ошибка в PhantomPDF 6.0 и что она будет исправлена ​​в версии 6.1 (будет выпущена через месяц).   -  person Bruno Lowagie    schedule 20.08.2013


Ответы (1)


ISO-32000-1 определяет максимальное количество имен полей в файле PDF, равное 127 байтам.

Источник см. Приложение C, § 2 Архитектурные пределы «Таблица C.1», стр. 649 и 650.

person Chris Marisic    schedule 03.04.2014