2016-02-12 90 views
0

我使用iTextSharp庫在我的pdf生成文檔中有三個部分。itextsharp留下第一頁空和下表中的打印表格

我使用PdfPageEventHelper類的OnEndPage()打印的頁眉和頁腳。頁眉和頁腳打印在所有頁面中,但在從頁面中間打印大型表格內容時出現問題。

現在,我有更多的100行表格內容要在頁面中間打印時遇到問題。

在第一頁(頁面中間)我打印的表格有100多行,但在這種情況下,它將第一頁留空並開始在第二頁上打印表格內容。這裏是我的表,我嘗試打印

第一頁
PdfPTable table = new PdfPTable(5); 
table.HeaderRows = 1; 

table.SplitLate = false; 
table.SplitRows = false; 
table.SetTotalWidth(new float[] { 100, 75, 75, 75, 75 }); 
table.LockedWidth = true; 

for (int i = 0; i < 150; i++) 
     { 
      PdfPCell cell = new PdfPCell(new phrase()); 
      cell.Colspan = 5; 
      table.AddCell(cell); 
     } 

我使用iTextSharp的版本上:5.4.5.0

是否有任何配置需要做的,以防止分頁符?

請幫我一把。

Expected result. Image-1

但我在這個格式得到實際結果

Actual result format, Image-2

感謝。

+0

[表格單元格中的大表格調用分頁符](http:// stackoverflow。com/questions/28503491/large-table-in-table-cell-invoke-page-break) –

回答

1

允許我在這兩條線評論:

table.SplitLate = false; 
table.SplitRows = false; 

第一行告訴iTextSharp的如果行不適合一個頁面就應該做的事情。如果將此值設置爲false,則行將被拆分爲後期。例如:你有一個不適合當前頁面的大行。在這種情況下,該行將被轉發到下一頁。如果它仍然不適合頁面,那麼需要做出另一個決定:該行是否被拆分?

第二行爲iTextSharp提供了該問題的答案。如果SplitRows的值是true,則該行將被拆分。如果值爲false,則該行將被刪除。請允許我引用官方文檔(P115的「的iText在行動 - 第二版」):

THS是一種危險的線路,因爲現在不一行將被分割。行數太高而無法放在頁面上的行將從表中刪除!

我有你想要的所有行到表中顯示出來的感覺,所以我建議你改變我提到的兩行:

table.SplitLate = true; 
table.SplitRows = true; 

實際上是:爲什麼不你只是刪除這兩行?默認值SplitLateSplitRowstrue

+0

嗨布魯諾,我也試過這兩個選項,但它仍然不起作用。 table.SplitLate = true; table.SplitRows = true; 其實我是在第一頁中間渲染這個表,但是它打破了這個半頁,從第二頁開始。如何避免這樣的問題? – Herin

+0

你需要澄清你的部分問題:*其實我是在第一頁中間渲染這張表,但是它打破了這個半頁並從第二頁開始*我不知道你是什麼意思。你如何在第一頁中間渲染這張表?當你說「打破」時,你的意思是什麼?準確的英語在這裏會很有幫助。如果這是一個問題:顯示更多代碼並顯示結果的樣子。 –

+0

我的意思是說我在頁面中間打印表格,而表格有100多行。因此,在這種情況下,整個表格從頁面中間突破並開始在新頁面上打印。那麼如何避免這樣的問題?我想從頁面中間開始打印該表格,並且應該在其他頁面上打印剩下的行。現在希望你能更好地理解我的問題。 – Herin