Ваш PDF-файл содержит гибридное определение формы AcroForm / XFA и подпись прав на использование. Оба факта усложняют заполнение форм.
Подпись прав использования
Ваш PDF содержит цифровую подпись специального вида, подпись о правах на использование. PDF-файл, подписанный такой подписью (с использованием закрытого ключа, сгенерированного Adobe для этой задачи), сигнализирует Adobe Reader, что при обработке этого самого PDF-файла должны быть активированы определенные дополнительные функции Adobe Reader.
Если подпись признана недействительной, Adobe Reader не только не активирует эти дополнительные функции, но даже деактивирует некоторые другие функции, в противном случае активные для неподписанных документов.
Вы создаете PdfStamper
вот так
stamp = new PdfStamper(reader, new FileStream("path to filled PDF form file", FileMode.Create));
Этот конструктор не инициализирует печать в режиме append . Таким образом, штампованный PDF в конечном итоге записывается как новый PDF. Это делает недействительной подпись прав на использование, а Adobe Reader ограничивает возможности при повторном открытии PDF.
Кстати, при открытии PDF с помощью Adobe Reader программа сообщает вам следующее:
Если вы поставите штамп в режиме append , подпись прав на использование не будет аннулирована. Вы можете сделать это, используя другой конструктор:
stamp = new PdfStamper(reader, new FileStream("path to filled PDF form file", FileMode.Create), '\0', true);
Финал true
активирует режим добавления.
В качестве альтернативы вы можете удалить подпись прав на использование
PdfReader reader = new PdfReader("path to PDF form file");
reader.RemoveUsageRights();
Результат больше не имеет подписи с правами на использование, в частности, недействительной подписи. Таким образом, Adobe Reader предлагает свои стандартные функции для этого файла.
К сожалению, сохранение форм XFA не входит в их число, поэтому PDF-файл можно редактировать, но не сохранять в Adobe Reader. Это может быть не то, что вы хотите.
Об этих параметрах также см., Например. этот старый ответ ; в этом ответе говорится о «включении считывателя», что в Adobe означает «применение подписи прав использования».
Определение гибридной формы XFA / AcroForm
Файл содержит определение двойной формы, одно определение формы AcroForm, которое является собственным типом формы PDF, и одно определение формы XFA, которое представляет собой формат XML, использующий PDF просто в качестве транспортного контейнера.
Определения форм XFA предлагают больше функций, но полностью поддерживаются только программным обеспечением Adobe. В случае гибридных форм iText имеет ограниченную поддержку для заполнения данных в обоих определениях форм. Однако, в зависимости от точных функций, используемых в определении XFA, это может не сработать.
В этом случае вы можете удалить определение формы XFA и использовать только AcroForm.
reader.Catalog.GetAsDict(PdfName.ACROFORM).Remove(PdfName.XFA);
При таком подходе, пожалуйста, прочитайте этот ответ и эту статью iText .