我有一个List<object>
,这个列表包含数千条记录。我想使用 itextsharp 生成 pdf。并Pdfptable
生成 pdf 它工作正常,但我希望 pdf 中每页只有 10 条记录。
我该怎么做?
问问题
7457 次
2 回答
3
另一种设置每页行数的方法:
using System.Diagnostics;
using System.IO;
using iTextSharp.text;
using iTextSharp.text.pdf;
namespace RowsCountSample
{
class Program
{
static void Main(string[] args)
{
using (var pdfDoc = new Document(PageSize.A4))
{
var pdfWriter = PdfWriter.GetInstance(pdfDoc, new FileStream("Test.pdf", FileMode.Create));
pdfDoc.Open();
var table1 = new PdfPTable(3);
table1.HeaderRows = 2;
table1.FooterRows = 1;
//header row
var headerCell = new PdfPCell(new Phrase("header"));
headerCell.Colspan = 3;
headerCell.HorizontalAlignment = Element.ALIGN_CENTER;
table1.AddCell(headerCell);
//footer row
var footerCell = new PdfPCell(new Phrase("footer"));
footerCell.Colspan = 3;
footerCell.HorizontalAlignment = Element.ALIGN_CENTER;
table1.AddCell(footerCell);
//adding some rows
for (int i = 0; i < 70; i++)
{
//adds a new row
table1.AddCell(new Phrase("Cell[0], Row[" + i + "]"));
table1.AddCell(new Phrase("Cell[1], Row[" + i + "]"));
table1.AddCell(new Phrase("Cell[2], Row[" + i + "]"));
//sets the number of rows per page
if (i > 0 && table1.Rows.Count % 7 == 0)
{
pdfDoc.Add(table1);
table1.DeleteBodyRows();
pdfDoc.NewPage();
}
}
pdfDoc.Add(table1);
}
//open the final file with adobe reader for instance.
Process.Start("Test.pdf");
}
}
}
于 2012-10-23T13:06:17.573 回答
2
在最新版本的 iTextSharp (5.3.3) 中,添加了允许您定义断点的新功能:SetBreakPoints(int[] breakPoints)
如果您定义一个 10 的倍数的数组,您可以使用它来获得所需的效果。
如果您有旧版本,您应该遍历列表并为每 10 个对象创建一个新的 PdfPTable。请注意,如果您想保持应用程序的内存使用率较低,这是更好的解决方案。
于 2012-10-23T12:32:17.960 回答