【问题标题】:itext - editable texfield is not clickableitext - 可编辑的 texfield 不可点击
【发布时间】:2014-01-09 18:30:38
【问题描述】:

我基本上知道如何使用 itext 创建可编辑的 pdf 单元格。但在某些情况下,只能使用 Tab 键访问可编辑单元格。无法点击。

可能是什么原因?它似乎与定位或协调问题(矩形 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);
        }
    }
}

【问题讨论】:

  • 我从未收到任何迹象表明我的回答是否有帮助。

标签: pdf-generation itext


【解决方案1】:

当您从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。从屏幕截图中可以看出,这些字段是可编辑的:

如果这不能回答您的问题,请提供重现问题的SSCCE。我是 iText 的原始开发者。我从未见过你所说的行为。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 2018-06-15
    • 1970-01-01
    • 2014-06-27
    • 2011-01-07
    相关资源
    最近更新 更多