یکی از نیازهای تهیه یک گزارش خوب، تکرار سرستونها در صفحات مختلف است. شاید در ابتدا این ایده مطرح شود که مثلا میخواهیم 25 ردیف را در هر صفحه نمایش دهیم. بر همین اساس میتوان هر 25 ردیف یکبار، یک سطر footer و در ادامه در صفحه بعد یک سطر header را اضافه کرد و همینطور الی آخر. مهمترین ایراد این روش آن است که الزامی ندارد که واقعا 25 ردیف در یک صفحه جا شوند. عموما بر اساس اندازهی محتوای نمایش داده شده، ممکن است یک صفحه 20 ردیف شود، صفحهای دیگر 10 ردیف. این مورد تمام محاسبات را به هم خواهد ریخت. به همین جهت دو خاصیت مهم به نامهای HeaderRows و FooterRows در شیء PdfPTable قابل تنظیم است. این دو خاصیت نیاز به اندکی توضیح دارند که در ادامه ذکر خواهد شد:
using System.Diagnostics;
using System.IO;
using iTextSharp.text;
using iTextSharp.text.pdf;
namespace HeadersAndFooters
{
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(1);
table1.HeaderRows = 2;
table1.FooterRows = 1;
//header row
table1.AddCell(new Phrase("header"));
//footer row
table1.AddCell(new Phrase("footer"));
//adding some rows
for (int i = 0; i < 70; i++)
{
table1.AddCell(new Phrase("Row " + i));
}
pdfDoc.Add(table1);
}
//open the final file with adobe reader for instance.
Process.Start("Test.pdf");
}
}
}
HeaderRows = 2 به این معنا است که 2 سطری را که بلافاصله در ادامه اضافه میکنید، در محاسبات نمایش خودکار header یا footer قرار میگیرند. FooterRows = 1 به این معنا است که از این تعداد، آخرین سطر، معنای footer را میدهد. بنابراین اولین table1.AddCell ، همان header خودکار نمایش داده شده در بالای تمام صفحات خواهد بود و table1.AddCell بعدی جهت نمایش footer خودکار بکار میرود. این دو سطر کاربرد دیگری ندارند.
مثالی دیگر جهت مشخص شدن این مفاهیم:
table1.HeaderRows = 3;
table1.FooterRows = 1;
از این طراحی لذت میبرید؟!