2017-03-07 3 views
-3

、あなたをどのように私は、iTextのでPDFを設計していますが、私は常に1つを逃すので、私はアイテムのテーブル全体を埋めることはできませんエラーは、最後の行が作成されていない

終わり。

最後の項目で次の行が追加されないようですか?

これは、CAPECの一部のアイテムで自分のオリジナルのアプリケーション、私はすべてが表示された文書型オブジェクトに直接これを追加するとiTextの

CVE-2010-3972 を持つ細胞で、それを紹介したいすべてです私は最後の項目が追加されていないことを表にそれをしたいときには

これは、Java

private void capecReferences() throws DocumentException, IOException { 
     PdfPTable tableCapec = new PdfPTable(2); 
     tableCapec.setHeaderRows(0); 
     tableCapec.setWidthPercentage(100); 
     tableCapec.setTotalWidth(100); 
     // Add headers 
     tableCapec.addCell(createHeaderCellWithColor("CAPEC & References")); 
     document.add(tableCapec); 
     /* 
     * CAPEC 
     */ 
     if (cve.getCapec().size() > 0) { 
      Paragraph capec = new Paragraph(new Chunk("\nCAPEC", captionFont)); 
      PdfPTable table = new PdfPTable(2); 
      table.setHeaderRows(1); 
      table.setWidthPercentage(100); 
      table.setTotalWidth(100); 
      Paragraph capecs = new Paragraph(new Chunk("",normalFont)); 
      for (Capec capecTmp : cve.getCapec()) { 
       table.addCell(createCell(capecTmp.getName())); 
       //capecs.add("\n"+capecTmp.getName()); 
       //document.add(table); 
      } 
      document.add(capec); 
      //document.add(capecs); 
      document.add(table); 
      document.add(Chunk.NEWLINE); 
     } 
     /* 
     * REFERENCES 
     */ 
     if (cve.getReferences().size() > 0) { 
      Paragraph references = new Paragraph(new Chunk("\nREFERENCES", captionFont)); 
      Paragraph r = new Paragraph(); 
      Anchor link; 
      for (String reference : cve.getReferences()) { 
       link = new Anchor(reference); 
       link.setReference(reference); 
       r.add(link); 
      } 
      document.add(references); 
      document.add(r); 
      document.add(Chunk.NEWLINE); 
     } 
     /* 
     * SCPI 
     */ 
     if (cve.getMapCveScip() != null) { 
      Paragraph scpi = new Paragraph(new Chunk("\nSCPI", captionFont)); 
      Paragraph scpiID = new Paragraph(new Chunk("SCIP ID: ", normalFont)); 
      Paragraph scpiLink = new Paragraph(new Chunk("SCIP Link: ", normalFont)); 
      Anchor link2; 
      scpiID.add(cve.getMapCveScip().getScipid()); 
      link2 = new Anchor(cve.getMapCveScip().getSciplink()); 
      link2.setReference(cve.getMapCveScip().getSciplink()); 
      scpiLink.add(link2); 
      document.add(scpi); 
      document.add(scpiID); 
      document.add(scpiLink); 
      document.add(Chunk.NEWLINE); 
     } 
     /* 
     * Nessus 
     */ 
     if (cve.getMapCveNessus() != null) { 
      Paragraph nessus = new Paragraph(new Chunk("Nessus ",captionFont)); 
      document.add(nessus);  
      Paragraph nessusScriptId = new Paragraph("Nessus Script Id: ", normalFont); 
      nessusScriptId.add(new Chunk(cve.getMapCveNessus().getNessusScriptId())); 
      document.add(nessusScriptId);  
      Paragraph nessusScriptName = new Paragraph("Nessus Script Name: ", normalFont); 
      nessusScriptName.add(new Chunk(cve.getMapCveNessus().getNessusScriptName())); 
      document.add(nessusScriptName); 
      Paragraph nessusScriptFile = new Paragraph("Nessus Script File: ", normalFont);  
      nessusScriptFile.add(new Chunk(cve.getMapCveNessus().getNessusScriptFile()));  
      document.add(nessusScriptFile); 
      Paragraph nessusScriptFamily = new Paragraph("Nessus Script Family: ", normalFont); 
      nessusScriptFamily.add(new Chunk(cve.getMapCveNessus().getNessusScriptFamily())); 
      document.add(nessusScriptFamily); 
      document.add(Chunk.NEWLINE); 
     } 
    } 
で私のコードです

そして、これはこれは、テーブルから欠落している

クライアント側の注入によって誘発されるバッファオーバーフロー

capecPDF

+0

これは、再現できないため、回答が得られません。それは私たちのために働く!助けが必要な場合は[SSCCE](http://sscce.org)を提供してください。 –

+0

* "これはテーブルから抜けています**クライアントサイドのインジェクションによるバッファオーバーフロー**" * - あなたが提供したソースコードにも含まれていません。 – mkl

+0

iText 2.1.7? iText 5.5.10(5.5.11が今月リリース予定)にアップグレードして、もう一度お試しください。 2.1.7は* 8年前*にリリースされ、廃止されました。 –

答えて

0

あなたの質問テキストは、私たちはcve.getCapec()が含まれているコレクションを前提となり、作成したPDFファイルですあなたの質問のトップスクリーンショットからの11個の値クライアント側注入が誘発するバッファーオーバーフロー;このループでは次の2つの列のテーブルに追加します:

/* 
* CAPEC 
*/ 
if (cve.getCapec().size() > 0) { 
    Paragraph capec = new Paragraph(new Chunk("\nCAPEC", captionFont)); 
    PdfPTable table = new PdfPTable(2); 
    table.setHeaderRows(1); 
    table.setWidthPercentage(100); 
    table.setTotalWidth(100); 
    Paragraph capecs = new Paragraph(new Chunk("",normalFont)); 
    for (Capec capecTmp : cve.getCapec()) { 
     table.addCell(createCell(capecTmp.getName())); 
     //capecs.add("\n"+capecTmp.getName()); 
     //document.add(table); 
    } 
    document.add(capec); 
    //document.add(capecs); 
    document.add(table); 
    document.add(Chunk.NEWLINE); 
} 

11の項目がコレクション内に存在するので、これは表の最後の行のために一つだけのセルを追加することを意味します。したがって、その行は不完全で、描画されません。

追加したエントリの数が偶数であるかどうか(たとえば、カウントするかブール値を切り替えるか)を追跡する必要があります。それが偶数でない場合は、最後に別の空のセルを追加する必要があります。余談として

(それとも、単に常にループの後に空のセルを追加し、iTextのは、不完全な行を描画していないに依存します。)


、可能であればあなたは本当に更新する必要があります。

関連する問題