2016-12-06 46 views
0

當運行使用iTextSharp的報告中,我們可以將所有的子類別一起定義單獨PdfpTable和同頁=真iTextSharp的 - 如何將節頭到下一個頁面

這個作品真的很好用的子類別不太可能去整頁。

如果子版本不適合當前頁面,是否有辦法將主要類別移到下一頁?

這就是我們正在

enter image description here

如開支開始進行上一次主類別結束,但子類都下一頁

上這是一個片段它們是如何創建...

感謝

vTable.AddCell(AddNewTextCell(True, "REVENUE", 15, ReportFontSize, False)) 
     vTable.AddCell(Spacer_Cell(10, 15)) 

     For Each Row As DataRow In RevenueData 
      Dim vInnerTable As New PdfPTable(15) 
      vInnerTable.KeepTogether = True 

      Dim vCatID As Integer = Row("ID") 
      vInnerTable.AddCell(AddNewTextCell(True, Row("Name"), 15, ReportFontSize, False)) 
      Dim vSelected() As DataRow = RevenueNomDT.Select("CatID = " & vCatID, "Position") 



      For Each SubRow As DataRow In vSelected 
       SetLeftPadding = 10 
       vInnerTable.AddCell(AddNewTextCell(False, SubRow("NomCode") & " " & SubRow("NomName"), 2, ReportFontSize)) 
       Dim NomCode As Integer = SubRow("NomCode") 
       Dim NegValue As Integer = SubRow("NegValue") 
       Dim vNeg As Boolean = False 
       If NegValue = 1 Then 
        vNeg = True 
       End If 
       Dim vNomType As Integer = 0 
       Dim vTypes() As DataRow = NLCodes.Select("NL_Code = '" & NomCode & "'", Nothing) 
       For Each NominalRow As DataRow In vTypes 
        vNomType = NominalRow("Account_Type") 
       Next 

       SetLeftPadding = 0 
       '12 Columns of data 
       For i As Integer = 0 To 11 
        Dim vNomValue As Decimal = 0 
        Dim ReportMonth As Integer = DateDiff(DateInterval.Month, ReportStartDate, ReportDate) + 1 
        If ReportMonth > i Then 
         If vNomType = 2 Then 
          vNomValue = ReturnMonthlyAmount(i, NomCode, True, ReportStartDate, ReportEndDate, Current_HOA_ID, vNeg) 
         Else 
          vNomValue = ReturnMonthlyAmount(i, NomCode, False, ReportStartDate, ReportEndDate, Current_HOA_ID, vNeg) 
         End If 

         RT += vNomValue 
         GT = DicRevenue.Item(i) 
         DicRevenue.Item(i) = GT + vNomValue 
         Dim vAmt As Decimal = DicSubs.Item(i) 
         DicSubs.Item(i) = vNomValue + vAmt 

         vInnerTable.AddCell(AddNewCurrencyCell(vNomValue, False, False, ReportFontSize)) 
        Else 
         vInnerTable.AddCell(AddNewCurrencyCell(vNomValue, False, False, ReportFontSize)) 
        End If 
       Next 
       vInnerTable.AddCell(AddNewCurrencyCell(RT, False, False, ReportFontSize)) 
       GT = DicRevenue(12) 
       DicRevenue(12) = GT + RT 
       DicSubs.Item(12) = RT 
       RT = 0 
      Next 

      SetLeftPadding = 5 

      'Add the total of each revenue sub header 
      vInnerTable.AddCell(AddNewTextCell(True, "Total " & Row("Name"), 2, ReportFontSize, False)) 
      For i As Integer = 0 To 11 
       vInnerTable.AddCell(AddNewCurrencyCell(DicSubs.Item(i), True, True, ReportFontSize, False)) 
       RT += DicSubs.Item(i) 
      Next 

      vInnerTable.AddCell(AddNewCurrencyCell(RT, True, True, ReportFontSize, False)) 
      vTable.AddCell(NoSplitTable(vInnerTable, 15)) 

      'Remove the DictionaryValues 
      For i As Integer = 0 To 12 
       DicSubs(i) = 0 
      Next 
      RT = 0 
     Next 

     vTable.AddCell(Spacer_Cell(10, 15)) 
     'Add in the Totals For Revenue 
     vTable.AddCell(AddNewTextCell(True, "TOTAL REVENUE", 2, ReportFontSize, False)) 
     For i As Integer = 0 To 12 
      vTable.AddCell(AddNewCurrencyCell(DicRevenue.Item(i), True, True, ReportFontSize, False)) 
     Next 
     GT = 0 
     RT = 0 
     vTable.AddCell(Spacer_Cell(20, 15)) 

     '============================================START OF EXPENSES ============================================== 
     vTable.AddCell(AddNewTextCell(True, "EXPENSES", 15, ReportFontSize, False)) 
     vTable.AddCell(Spacer_Cell(10, 15)) 


Private Function NoSplitTable(TableName As PdfPTable, DataColumns As Integer) As PdfPCell 
    Dim vCell As New iTextSharp.text.pdf.PdfPCell(TableName) 
    Try 
     With vCell 
      .Border = 0 
      .Colspan = DataColumns 
     End With 
     Return vCell 
    Catch ex As Exception 
     EmailError(ex) 
     Return vCell 
    End Try 

End Function 

回答

1

原來比我想象的更簡單 - 只需添加子表爲每頭以及一個表

Dim vRevenueTable As New PdfPTable(15) 
     vRevenueTable.KeepTogether = True 

     vRevenueTable.AddCell(AddNewTextCell(True, "REVENUE", 15, ReportFontSize, False)) 
     vRevenueTable.AddCell(Spacer_Cell(10, 15)) 
     For Each Row As DataRow In RevenueData 
      Dim vInnerTable As New PdfPTable(15) 
      vInnerTable.KeepTogether = True 

....該表的末尾

vInnerTable.AddCell(AddNewCurrencyCell(RT, True, True, ReportFontSize, False)) 
      vRevenueTable.AddCell(NoSplitTable(vInnerTable, 15)) 

      'Remove the DictionaryValues 
      For i As Integer = 0 To 12 
       DicSubs(i) = 0 
      Next 
      RT = 0 
     Next 
     vRevenueTable.AddCell(Spacer_Cell(10, 15)) 
     'Add in the Totals For Revenue 
     vRevenueTable.AddCell(AddNewTextCell(True, "TOTAL REVENUE", 2, ReportFontSize, False)) 
     For i As Integer = 0 To 12 
      vRevenueTable.AddCell(AddNewCurrencyCell(DicRevenue.Item(i), True, True, ReportFontSize, False)) 
     Next 
     GT = 0 
     RT = 0 
     vRevenueTable.AddCell(Spacer_Cell(20, 15)) 

     vTable.AddCell(NoSplitTable(vRevenueTable, 15)) 
0

開始除了使用同頁你可以通過調用 Document.NewPage()來強制分頁,或者用章節和節來包裝你的表格,而不是創建一個大的表格容器。 (4.1.6.0)

+0

Document.NewPage的問題是.. 1 - 它是Table.Add的一種不同的方法,在這個函數中它只是返回一個表格到一個帶頁眉和頁腳的多頁文檔 - 沒有辦法知道要生產多少行,因此可以在最後一行開始後添加一行新的頁面 – gchq

+0

是的,這是從動態數據自動生成文檔的痛苦:D – COeDev

相關問題