۱۳۹۰/۰۵/۰۲

تكرار خودكار سرستون‌هاي يك جدول در صفحات مختلف، توسط iTextSharp


يكي از نيازهاي تهيه يك گزارش خوب، تكرار سرستون‌ها در صفحات مختلف است. شايد در ابتدا اين ايده مطرح شود كه مثلا مي‌خواهيم 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 و FooterRows آن به 1 مقدار دهي شده‌‌اند.
HeaderRows = 2 به اين معنا است كه 2 سطري را كه بلافاصله در ادامه اضافه مي‌كنيد، در محاسبات نمايش خودكار header يا footer قرار مي‌گيرند. FooterRows = 1 به اين معنا است كه از اين تعداد، آخرين سطر، معناي footer را مي‌دهد. بنابراين اولين table1.AddCell ، همان header خودكار نمايش داده شده در بالاي تمام صفحات خواهد بود و table1.AddCell بعدي جهت نمايش footer خودكار بكار مي‌رود. اين دو سطر كاربرد ديگري ندارند.
مثالي ديگر جهت مشخص شدن اين مفاهيم:
table1.HeaderRows = 3;
table1.FooterRows = 1;
در اينجا HeaderRows = 3 يعني پس از تعريف وهله‌اي از شيء PdfPTable، سه سطر اولي كه اضافه مي‌شوند جزو حيطه‌ي header و footer خودكار قرار دارند. در اين بين چون FooterRows = 1 تعريف شده، 2 سطر اول header تكرار شونده صفحات مختلف را تشكيل مي‌دهند و سومين سطر همان footer خواهد بود.

از اين طراحي لذت مي‌بريد؟!