2016-11-21 8 views
0

Я пытаюсь добавить форму в pdf, используя iText 7.iText7 setValue метод не работает

Я продолжаю получать ошибку при попытке установить значение поля. Мне не удалось найти информацию из documentation метода addKid(). Кто-нибудь знает, как обойти эту ошибку?

Вот пример кода, я использую:

PdfTextFormField confField = PdfFormField.createText(pdf); 
confField.setFieldName(fieldName); 

PdfWidgetAnnotation confCoverAnnot = new PdfWidgetAnnotation(new Rectangle(x, y, width, height)); 
PdfWidgetAnnotation confAnnot = new PdfWidgetAnnotation(new Rectangle(x2, y2, width2, height2)); 

for (int i = 1; i<= numPages; i++) { 
    switch(i) { 
     case 1: 
      pdf.getPage(i).addAnnotation(confCoverAnnot); 
      break; 
     default: 
      pdf.getPage(i).addAnnotation(confAnnot); 
      break; 
    } 
} 


/* 
    Trying to have two different annotations reference the same field value. 

    Upon using the `setValue()` method, I get: object.must.be.indirect.to.work.with.this.wrapper 
    Any way to get this to work properly? 
*/ 
form.addField(confField); 
confField.addKid(confCoverAnnot); 
confField.addKid(confAnnot); 
if (value.equals("") != true) { 
    confField.setValue(value); //error here 
} 

ответ

2

Я предполагаю ошибку вы получаете это PdfException: Исключение в потоке «основной» com.itextpdf.kernel.PdfException: объект должен быть косвенно работать с этой оберткой?

Решение отмечать вас аннотаций как косвенная после их создания:

PdfWidgetAnnotation confCoverAnnot = new PdfWidgetAnnotation(new Rectangle(x, y, width, height)); 
confCoverAnnot.makeIndirect(pdf); 
PdfWidgetAnnotation confAnnot = new PdfWidgetAnnotation(new Rectangle(x, y, width, height)); 
confAnnot.makeIndirect(pdf); 

Объяснение: При установке значения полей формы в iText7, он ожидает, что аннотации будут косвенные объекты и сгенерирует исключение когда они не являются. Поскольку PdfWidgetAnnotation создается независимо от PdfDocument, ссылка должна быть указана явно, позвонив по телефону makeIndirect()

+0

Благодарим за разъяснения. Сейчас имеет смысл :) – Elliot

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