2016-02-12 93 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