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 に答える