使PdfField可见

时间:2012-08-02 17:24:14

标签: itext

我创建了一张带有桌子的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

谢谢你的帮助。

1 个答案:

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

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