Можно ли заполнить формы pdf, используя pdftk, не нарушая взаимодействия Adobe Reader? [Дубликат]

Как будто вы пытаетесь получить доступ к объекту, который является null. Рассмотрим ниже пример:

TypeA objA;

. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException, что имеет смысл.

См. Также этот пример:

String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
0
задан IowA 8 June 2015 в 12:05
поделиться

1 ответ

Ваш диагноз неверен. Проблема не связана с присутствием AcroForms. Проблема связана с тем, был ли ваш документ включен Reader. Включение чтения возможно только при использовании программного обеспечения Adobe. Это процесс, который требует цифровой подписи, используя закрытый ключ от Adobe. Когда присутствует действительная подпись, определенная функциональность (как определено в правах использования при подписании) разблокирована в Adobe Reader.

Пожалуйста, взгляните на ответ на этот вопрос, чтобы узнать, как определить, PDF поддерживается с помощью Reader или нет: Как проверить PDF-файл Reader включен или не используется C #?

Вы изменяете содержимое такого PDF-файла, поэтому вы нарушаете подпись. Нарушение этой сигнатуры вызывает уродливое сообщение об ошибке:

Этот документ включал расширенные функции в Adobe Acrobat Reader DC. Документ был изменен с момента его создания, и использование расширенных функций больше не доступно. Пожалуйста, свяжитесь с автором для оригинальной версии этого документа.

Существует два способа избежать этого сообщения об ошибке:

  1. Удалить права использования. Это приведет к форме, которая больше не включена. Например: если создатель документа разрешил сохранять заполненную форму локально, это станет невозможным после удаления прав использования.
  2. Заполните форму в режиме добавления.

Удаление прав использования выполняется следующим образом:

PdfReader reader = new PdfReader(path_to_file);
if (reader.hasUsageRights()) {
    reader.removeUsageRights();
    PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(path_to_new_file));
    stamper.close();
}
reader.close();

Использование iText в режиме добавления выполняется следующим образом:

PdfReader reader = new PdfReader(src);
PdfStamper stamper =
    new PdfStamper(reader, new FileOutputStream(dest), '\0', true);
stamper.close();
reader.close();

Обратите внимание на дополнительные параметры в PdfStamper.

1
ответ дан Community 17 August 2018 в 23:04
поделиться
  • 1
    Это разрешает ошибку, но текст не отображается – IowA 8 June 2015 в 13:05
  • 2
    1. Почему вы используете оценку, которая требует от вас специалиста по PDF? Почему вы не используете удобные методы, доступные в iText? 2. Вы добавляете текст в положение x = 107; y = 107. Откуда вы знаете, что это действительные координаты? – Bruno Lowagie 8 June 2015 в 13:09
  • 3
    Загрузите pages.itextpdf.com/ebook-stackoverflow-questions.html и найдите примеры Watermark (их несколько). Ваш код выглядит так, как будто вы его копируете / вставляете. Если вы копируете / вставляете, почему бы не скопировать / вставить от самого мастера? ;-) – Bruno Lowagie 8 June 2015 в 13:13
Другие вопросы по тегам:

Похожие вопросы: