2017-07-20 11 views
0

私は、iTextを使用してmy springのmvc WebプロジェクトでPDFを作成しています。私はiText 5を初めて使っています。段落の下にテキストフィールドを追加する方法を教えてもらえますか?私の現在のコードに基づいて、テキストフィールドは段落の下に表示されません。私は段落の下に各テキストフィールドを表示したいので、PDFに質問を追加するかもしれません。iText 5段落の下にテキストフィールドを追加します。

try { 
    List<FormQuestionBean> questions = formBuilderBean.getQuestions(); 
    MyHeaderAndFooter event = new MyHeaderAndFooter(); 
    Document pdfDocument = new Document(PageSize.A4); 
    pdfDocument.setMargins(20, 20, 20, 30); 
    ByteArrayOutputStream pdfBaos = new ByteArrayOutputStream(); 
    PdfWriter writer = PdfWriter.getInstance(pdfDocument, pdfBaos); 
    writer.setPageEvent(event); 
    pdfDocument.open(); 
    Paragraph paragraph1 = new Paragraph(FORM_NAME + " : " + formBuilderBean.getName(), HEADING); 
    paragraph1.setSpacingAfter(20); 
    pdfDocument.add(paragraph1); 

    for (FormQuestionBean formQuestionBean: questions) { 
     if (formQuestionBean.getFieldImplementation().contentEquals("Text Field")) { 
      Paragraph p = new Paragraph(formQuestionBean.getName()); 
      pdfDocument.add(p); 
      TextField text = new TextField(writer, new Rectangle(36, 788, 559, 806), "text");    
      text.setBackgroundColor(BaseColor.WHITE); 
      PdfFormField field = text.getTextField(); 
      writer.addAnnotation(field); 
     } 

    } 

    pdfDocument.close(); 
    response.reset(); 
    response.setHeader("Content-Length", String.valueOf(pdfBaos.size())); 
    response.setContentType("application/pdf"); 
    response.setContentLength(pdfBaos.size()); 
    String downloadName = getFormFileName(".pdf"); 
    response.setHeader("Content-Disposition", "attachment; filename=\"" + downloadName + "\""); 
    OutputStream outputStream = response.getOutputStream(); 
    pdfBaos.writeTo(outputStream); 
    outputStream.flush(); 
    outputStream.close(); 
    return true; 
} catch (Exception e) { 
    logger.error(e); 
    e.printStackTrace(); 
    return false; 
} 

enter image description here

+0

'PdfWriter'は、現在の垂直ページ位置*を決定するメソッド' getVerticalPosition'を持っています。あなたはこれを使うかもしれません。あるいは、汎用タグで 'Chunk'を使うこともできます。また、カスタムセルイベントでテーブルを使用することもできます。 – mkl

+0

私は試してみます。どうもありがとう! –

+0

*更新:テーブルとセル*を使って計算しました。 - 問題の解決策を考えている場合は、質問に編集する代わりに質問に答えてください。それをあなたのための解決策と見なさないなら、それを明確にして、あなたが嫌い​​な側面を指摘してください。 – mkl

答えて

1

私はテーブルとセルを使用して考え出しました。以下はコードです:

try { 
     List<FormQuestionBean> questions = formBuilderBean.getQuestions(); 
     MyHeaderAndFooter event = new MyHeaderAndFooter(); 
     Document pdfDocument = new Document(PageSize.A4); 
     pdfDocument.setMargins(20, 20, 20, 30); 
     ByteArrayOutputStream pdfBaos = new ByteArrayOutputStream(); 
     PdfWriter writer = PdfWriter.getInstance(pdfDocument, pdfBaos); 
     writer.setPageEvent(event); 
     pdfDocument.open(); 
     Paragraph paragraph1 = new Paragraph(FORM_NAME + " : " + formBuilderBean.getName(), HEADING); 
     paragraph1.setSpacingAfter(20); 
     pdfDocument.add(paragraph1); 

     for (FormQuestionBean formQuestionBean: questions) { 
      if (formQuestionBean.getFieldImplementation().contentEquals("Text Field")) { 
       PdfPTable table = new PdfPTable(1); 
       table.getDefaultCell().setBorder(Rectangle.NO_BORDER); 
       PdfPCell c1 = new PdfPCell(new Phrase(formQuestionBean.getName())); 
       c1.setFixedHeight(30); 
       table.addCell(c1); 
       PdfPCell c2 = new PdfPCell(); 
       TextField text = new TextField(writer, c2, "text");    
       text.setBackgroundColor(BaseColor.WHITE); 
       FieldPositioningEvents events = new FieldPositioningEvents(writer, text.getTextField()); 
       c2.setCellEvent(events); 
       c2.setFixedHeight(30); 
       table.addCell(c2); 
       pdfDocument.add(table); 

      } 
     } 
     pdfDocument.close(); 
     response.reset(); 
     response.setHeader("Content-Length", String.valueOf(pdfBaos.size())); 
     response.setContentType("application/pdf"); 
     response.setContentLength(pdfBaos.size()); 
     String downloadName = getFormFileName(".pdf"); 
     response.setHeader("Content-Disposition", "attachment; filename=\"" + downloadName + "\""); 
     OutputStream outputStream = response.getOutputStream(); 
     pdfBaos.writeTo(outputStream); 
     outputStream.flush(); 
     outputStream.close(); 
     return true; 
    } catch (Exception e) { 
     logger.error(e); 
     e.printStackTrace(); 
     return false; 
    } 
関連する問題