2014-01-09 49 views
0

我主要知道如何用itext創建可編輯的pdf單元格。但是在某些情況下,可編輯的單元格只能通過製表符來實現。它不能被點擊。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

當您從TextField創建PdfFormField,它是默認的互動(編輯),所以沒有必要設置任何標誌。我複製/粘貼你的代碼在概念的小證明:

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的原始開發人員。我從來沒有見過你所說的行爲。