2015-06-08 4 views
0

Я использую iText для добавления текста в существующий файл pdf. Он работает для простого pdf, но имеет проблемы с pdf с AcroForms.Pdf с редактированием Acroform с помощью iText

Мой код:

PdfReader reader = new PdfReader("/Users/simple-user/Downloads/acroform.pdf"); 
    PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(
      "/Users/simple-user/Downloads/acroform2.pdf")); 
    BaseFont bf = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.CP1252, 
      BaseFont.NOT_EMBEDDED); 

    PdfContentByte over = stamper.getOverContent(1); 
    over.beginText(); 
    over.setFontAndSize(bf, 10); 
    over.setTextMatrix(107, 107); 
    over.showText("page updated"); 
    over.endText(); 

    stamper.close(); 

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

и нет никакого текста, я хотел бы добавить в файл

Любые идеи, что мне не хватает?

+0

В чем проблема? Любое сообщение об ошибке? Нам нужно больше деталей, чтобы помочь. – thomasb

+0

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

+0

. Пожалуйста, отредактируйте ваш вопрос, чтобы включить эту ошибку, и как можно подробнее. – thomasb

ответ

1

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

Пожалуйста, обратите внимание на ответ на этот вопрос, чтобы узнать, как определить, если PDF является считыватель с поддержкой или нет: How to Check PDF is Reader enabled or not using 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.

+0

Это разрешает ошибку, но текст не отображается – IowA

+0

1. Почему вы используете оценку, которая требует вы должны быть специалистом в формате PDF? Почему бы вам не использовать удобные методы, доступные в iText? 2. Вы добавляете текст в положение x = 107; y = 107. Откуда вы знаете, что это действительные координаты? –

+0

Загрузить http://pages.itxtpdf.com/ebook-stackoverflow-questions.html и найдите примеры Watermark (их несколько). Ваш код выглядит так, как будто вы его копируете или вставляете где-то в этом месте. скопировать/вставить от самого мастера? ;-) –

Смежные вопросы