0

我创建了一个带有表格的 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

感谢您的帮助。

4

1 回答 1

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 );
      }
   } );

我在横向页面上的方向上遇到了最多的问题,直到我发现你可以设置字段的旋转。

于 2012-08-22T07:10:07.617 回答