我创建了一张带有桌子的PDF。我设法通过监听PdfPCellEvent:
在选定的单元格中创建字段 cell.setCellEvent( new PdfPCellEvent() {
@Override
public void cellLayout( PdfPCell pdfPCell,
Rectangle rectangle,
PdfContentByte[] canvas ) {
PdfContentByte pcb = canvas[canvas.length - 1];
PdfWriter writer = pcb.getPdfWriter();
PdfFormField field = PdfFormField.createTextField( writer, false, false, 3 );
field.setName( "quantity " + hashCode() );
field.setFieldFlags( PdfFormField.FF_EDIT );
Rectangle rect = new Rectangle( rectangle.getLeft() + 5, rectangle.getTop() - 5,
rectangle.getLeft() + rectangle.getWidth() - 5,
rectangle.getTop() - rectangle.getHeight() + 5);
field.setWidget( rect, PdfAnnotation.HIGHLIGHT_OUTLINE );
field.setFieldFlags( PdfAnnotation.FLAGS_PRINT );
writer.addAnnotation( field );
writer.flush();
}
} );
就在字段中输入文本而言,它工作得很好。但是一旦该领域失去焦点,内容就会消失。如果我再次将焦点设置到该字段,则会再次显示数据。
我的问题是:为了让PdfFormField中的文字保持打印,我需要做些什么?
这里有一个示例PDF:http://qr.sertal.ch/output.pdf
谢谢你的帮助。
答案 0 :(得分:0)
我从iText邮件列表中得到了答案。不推荐使用本书中描述的添加表单字段的方法。这是一种新方法,可以正常使用:
cell.setCellEvent( new PdfPCellEvent() {
@Override
public void cellLayout( PdfPCell pdfPCell,
Rectangle rectangle,
PdfContentByte[] canvas ) {
PdfContentByte pcb = canvas[canvas.length - 1];
PdfWriter writer = pcb.getPdfWriter();
Rectangle rect = new Rectangle( rectangle.getLeft() + 5, rectangle.getTop() - 5,
rectangle.getLeft() + rectangle.getWidth() - 5,
rectangle.getTop() - rectangle.getHeight() + 5 );
TextField field = new TextField( writer, rectangle, "quantity " + hashCode() );
field.setRotation( A4.rotate().getRotation() );
try {
writer.addAnnotation(field.getTextField());
} catch ( IOException e ) {
e.printStackTrace();
} catch ( DocumentException e ) {
e.printStackTrace();
}
writer.flush();
pcb.rectangle( rect );
}
} );
我在景观页面上的方向问题最多,直到我发现你可以设置字段的旋转。