2017-04-08 68 views
0

我想將我的Sqlite導出爲PDF。我能夠做到這一點,但不是隻將結果放在一行中,而是將結果放在另一列中。我想要的是用數據庫結果填充同一列中的行(增加行)。這是我的,你能幫助我嗎?如何在Android中使用itextpdf正確放置表格?

db = new Database(FirstActivity.this); 
     Cursor c = bd.getGroupsNamesMachines(); 

     PdfPTable table = new PdfPTable(2); 


     cell = new PdfPCell(new Phrase("groups")); 
     cell2 = new PdfPCell(new Phrase("machines")); 
     if (c.moveToFirst()) { 

      do { 

       String groups = c.getString(c.getColumnIndex("groupname")); 


       cell3 = new PdfPCell(new Phrase(groups)); 
       table.addCell(cell3); 

      } while (c.moveToNext()); 

     } 

     cell.setColspan(1); 
     cell2.setColspan(2); 
     cell3.setColspan(1); 
     table.addCell(cell); 
     table.addCell(cell2); 
     table.addCell(cell3); 
+0

請解釋您希望看到的結果。你當前的代碼導致一個奇怪的輸出。 – mkl

回答

2

請閱讀文檔,或觀看視頻:https://www.youtube.com/watch?v=6YwDME0Fl1c(前10分鐘結束前,你就會知道如何創建一個表,其中顯示,美國的所有狀態)。這個例子的代碼可以在這裏找到:set format of header row in itext

在你的情況,你正在做一些非常奇怪的事情。你創建一個2列的表格。沒關係,如果每個記錄有兩個字段。但是,在添加標題單元格之前添加主體單元格。我想你試圖創建一個包含3列的標題行(這是不合邏輯的),並且你可能沒有完成最後一行(而iText默認只添加完整的行)。

你需要的東西是這樣的:

// Table 
PdfPTable table = new PdfPTable(2); 
// Header 
PdfPCell cell1 = new PdfPCell(new Phrase("groups")); 
PdfPCell cell2 = new PdfPCell(new Phrase("machines")); 
table.addCell(cell1); 
table.addCell(cell2); 
// Data 
db = new Database(FirstActivity.this); 
Cursor c = db.getGroupsNamesMachines(); 
if (c.moveToFirst()) { 
    do { 
     String group = c.getString(c.getColumnIndex("groupname")); 
     cell1 = new PdfPCell(new Phrase(group)); 
     table.addCell(cell1); 
     String machine = c.getString(c.getColumnIndex("machinename")); 
     cell2 = new PdfPCell(new Phrase(machine)); 
     table.addCell(cell2); 
    } while (c.moveToNext()); 
} 
document.add(table); 

我不知道,如果數據庫的代碼即可;知道如何從數據庫獲取正確的數據是您的責任,但請將您非常不對稱的代碼與我將其更改爲的邏輯代碼進行比較。

  • 首先定義標題,並把它添加到表,
  • 然後遍歷所有的數據,並通過添加一行數據行,
  • 絕不添加更多的細胞到行之外還有列!
+0

非常感謝。我正在努力瞭解列/行的工作方式。良好的圖書館,你已經創建;) – jose

+0

而我怎樣才能獲得動態細胞,而不是隻有兩個?你可以幫我嗎? :/ – jose

+0

執行查詢時,您始終知道每個記錄有多少個字段。您需要使用該字段數定義表:'new PdfPTable(numFields)'。你不能指望iText「猜測」需要多少列;你需要自己定義(你*可以*自己定義,因爲你擁有*這些信息)。 –

相關問題