۱۳۹۰/۰۵/۲۳

نمايش تصوير پس زمينه در تمام صفحات توسط iTextSharp


فرض كنيد مي‌خواهيم تصويري را در پس زمينه‌ي تمام صفحات pdf توليدي توسط iTextSharp قرار دهيم. براي اين منظور شبيه به مطلب «نمايش تعداد كل صفحات در iTextSharp» مي‌توان از رخدادهاي صفحات استفاده كرد. در متد رويداد گردان OnOpenDocument، يك قالب را به اندازه‌ي يك صفحه‌ي متني تهيه مي‌كنيم. سپس در متد OnStartPage، اين قالب را به تمام صفحات اضافه خواهيم كرد. در حقيقت فضايي را به اين شكل رزرو مي‌كنيم و در نهايت در متد OnCloseDocument ، تصوير مورد نظر را دريافت كرده، Alignment آن‌را طوري تنظيم خواهيم كرد كه زير متون صفحات قرار گيرد و به كمك متد AddImage ، آن‌را به قالب تعريف شده اضافه مي‌كنيم. به اين ترتيب، تصوير اضافه شده به صورت خودكار به تمام صفحات اضافه مي‌شود:


public class PageEvents : PdfPageEventHelper
{
        PdfTemplate _backgroundImageTemplate;

        public override void OnStartPage(PdfWriter writer, Document document)
        {
            base.OnStartPage(writer, document);
            writer.DirectContent.AddTemplate(_backgroundImageTemplate, 0, 0);
        }

        public override void OnOpenDocument(PdfWriter writer, Document document)
        {
            _backgroundImageTemplate = writer.DirectContent.CreateTemplate(document.PageSize.Width, document.PageSize.Height);
        }

        public override void OnCloseDocument(PdfWriter writer, Document document)
        {
            base.OnCloseDocument(writer, document);

            iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance(
			@"C:\My Pictures\bg.png");
            img.Alignment = iTextSharp.text.Image.UNDERLYING;
            img.SetAbsolutePosition((document.PageSize.Width - img.Width) / 2, (document.PageSize.Height - img.Height) / 2);
            _backgroundImageTemplate.AddImage(img);
        }
}