2014-01-09 3 views
0

Я знаю принципиально, как создать редактируемую ячейку pdf с itext. Но в некоторых случаях редактируемая ячейка может быть достигнута только с помощью клавиши табуляции. Его нельзя щелкнуть.itext - редактируемое texfield не может быть нажата

В чем может быть причина? Кажется, что это связано с проблемами позиционирования или координации (значениями прямоугольников x/y). Но, возможно, это внутренняя ошибка itext.

public void cellLayout(PdfPCell cell, Rectangle rectangle, PdfContentByte[] canvases) { 
    if (this.enable) { 
     final PdfWriter writer = canvases[0].getPdfWriter(); 
     final TextField textField = new TextField(writer, rectangle, String.format("text_%s", this.fieldname)); 
     textField.setOptions(BaseField.EDIT); 
     try { 
      final PdfFormField field = textField.getTextField(); 
      field.setFieldFlags(PdfFormField.FF_EDIT); 
      writer.addAnnotation(field); 
     } catch (final IOException ioe) { 
      throw new ExceptionConverter(ioe); 
     } catch (final DocumentException de) { 
      throw new ExceptionConverter(de); 
     } 
    } 
} 
+0

Я никогда не получал никаких указаний, был ли мой ответ полезным. –

ответ

0

При создании PdfFormField из TextField, является интерактивным (редактируемые) по умолчанию, так что нет необходимости устанавливать какие-либо флаги. Я скопировать/вставить код в небольшой доказательство концепции:

class MyCellField implements PdfPCellEvent { 
    protected String fieldname; 
    public MyCellField(String fieldname) { 
     this.fieldname = fieldname; 
    } 
    public void cellLayout(PdfPCell cell, Rectangle rectangle, PdfContentByte[] canvases) { 
     final PdfWriter writer = canvases[0].getPdfWriter(); 
     final TextField textField = new TextField(writer, rectangle, fieldname); 
     try { 
      final PdfFormField field = textField.getTextField(); 
      writer.addAnnotation(field); 
     } catch (final IOException ioe) { 
      throw new ExceptionConverter(ioe); 
     } catch (final DocumentException de) { 
      throw new ExceptionConverter(de); 
     } 
    } 
} 

Я назвал Доказательство концепции CreateFormInTable и это то, что я с этим событием клетки:

public void createPdf(String dest) throws IOException, DocumentException { 
    Document document = new Document(); 
    PdfWriter.getInstance(document, new FileOutputStream(dest)); 
    document.open(); 
    PdfPTable table = new PdfPTable(2); 
    PdfPCell cell; 
    cell = new PdfPCell(new Phrase("Name:")); 
    table.addCell(cell); 
    cell = new PdfPCell(); 
    cell.setCellEvent(new MyCellField("name")); 
    table.addCell(cell); 
    cell = new PdfPCell(new Phrase("Address")); 
    table.addCell(cell); 
    cell = new PdfPCell(); 
    cell.setCellEvent(new MyCellField("address")); 
    table.addCell(cell); 
    document.add(table); 
    document.close(); 
} 

результатом является form_in_table.pdf. Как вы можете видеть на скриншоте, поля редактируются:

enter image description here

Если это не ответ на ваш вопрос, пожалуйста, предоставьте SSCCE, воспроизводящий проблему. Я оригинальный разработчик iText. Я никогда не видел поведения, о котором вы говорите.

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