2015-01-25 3 views
0

В Adobe Acrobat есть возможность добавить «Открыть действие веб-ссылки» в acroform. Можно ли сделать это с помощью iText us уже существующего акроформа?Можно ли добавить действие «Открыть действие веб-ссылки» для акроформного поля программно с помощью iText?

Мне не удалось найти упоминания об этом в iText docs и поэтому попытался создать новый acrofield программно и добавить к нему это действие, но безуспешно. Вот мой код:

PdfReader pdfReader = new PdfReader(templateStream); 
     PdfStamper stamper = new PdfStamper(pdfReader, new FileOutputStream("delivery.pdf")); 
     stamper.setFormFlattening(true); 
     stamper.getAcroFields().setField("package", packages); 
     stamper.getAcroFields().setField("purchase_id", purchaseId); 
     stamper.getAcroFields().setField("activation_code", activationCode); 
     if (partner != "") { 
      PdfFormField field = PdfFormField.createTextField(stamper.getWriter(), false, 
        false, 100); 
      field.setFieldName("partner"); 
      PdfAction action = new PdfAction(partner); 
      field.setAction(action); 
      field.setColor(new BaseColor(0,0,255)); 
      PdfAppearance appearance = stamper.getUnderContent(1). 
        createAppearance(200, 20); 
      appearance.setFontAndSize(BaseFont.createFont(BaseFont.HELVETICA, BaseFont.WINANSI, BaseFont.NOT_EMBEDDED), 12f); 
      appearance.setColorFill(BaseColor.BLUE); 
      field.setAppearance(PdfAnnotation.APPEARANCE_DOWN, appearance); 
      field.setDefaultAppearanceString(appearance); 
      stamper.getAcroFields().setField("partner", "Click here to show partner's web site"); 
     } 

Результирующий документ PDF показан без поля партнера. Пожалуйста, указывайте мне на некоторые документы или на мой код.

ответ

1

Вы пытаетесь добавить интерактивность в форму. Тем не менее, вы также выбрасываете всю интерактивность, используя эту строку:

stamper.setFormFlattening(true); 

Вы также утверждаете, что добавляете дополнительное поле. Насколько я могу судить, это утверждение неверно. Вы создаете имя поля field (и вы его создаете трудный путь; я бы ожидал, что вы вместо этого используете класс TextField). Однако я не вижу, чтобы вы добавляли это поле в любом месте. Я пропускаю следующую строку:

stamper.addAnnotation(field, 1); 

Обратите внимание, что эта линия не имеет смысла:

stamper.getAcroFields().setField("partner", "Click here to show partner's web site"); 

Почему бы вам создать поле первое (и, возможно, добавить подпись), а затем изменить его сразу после ? Почему бы не создать поле с самого начала?

Наконец, кажется, что вы хотите создать кнопку, которую могут щелкнуть люди. Тогда почему вы создаете текстовое поле? Разве не было бы смысла создавать кнопку?

Это пример вопроса, к которому машина будет реагировать: Слишком много ошибок ... Может быть, вы должны рассмотреть чтение the documentation, прежде чем пытаться исправить код.