2017-03-07 50 views
-3

你怎麼樣,錯誤表2.1.7的iText PDF,則不會創建最後一行

我設計與iText的PDF文件,但我不能填補項目的整個表,因爲我總是錯過了一個在結束。

看來,最後一項不添加下一行任何想法?

這是我原來的應用程序與該項目中,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); 
     } 
    } 
代碼

,這是創建的PDF,這是從表

客戶端注射引起緩衝區溢出

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()包含失蹤來自您問題的頂部屏幕截圖的11個值,包括客戶端注入誘導緩衝區溢出;在這個循環將它們添加到兩列的表:

/* 
* 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不拉絲不完整的行,只是一直在循環之後添加一個空單元格。)


順便說一句,如果可能的話你真的應該更新。