2016-12-06 9 views
0

は、私たちは一緒に定義するすべてのサブカテゴリーを保つことができる別のPdfpTableとKeepTogether = TrueのiTextSharp - 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

keeptogetherを使用してほかにテーブルを1つ大きなテーブルコンテナを作成する代わりに、 Document.NewPage()をコールするか、チャプタとセクションを使用してテーブルをラップして改ページを強制することができます。 (4.1.6.0)

+0

Document.NewPageの問題は.. 1 - これはTable.Addとは異なるメソッドです。この関数では、ヘッダーとフッターを含む複数ページのドキュメントにテーブルを返すだけです。いくつの行が生成されるかを知る方法がないので、最後の行が開始された後に新しい行が1行追加される可能性があります。 – gchq

+0

ええと、動的データから自動的にドキュメントを生成することによる苦痛 – COeDev

関連する問題