تهیه خروجی PDF از GridView

تصویر مهدی

مقدمه:

استفاده از گریدویو (GridView) برای تهیه گزارشات ساده کاری است که در بین برنامه نویسان ASP.NET بسیار متداول است. برای تهیه خروجی از گریدویو به Excel و Word مقالات زیادی نوشته شده است که با یک جستجوی ساده نمونه های زیادی خواهید دید. یکی از فرمتهای متداولی که برنامه نویسان برای تهیه گزارش از آن استفاده می کنند، فرمت PDF است و طبیعتا برای تهیه خروجی به PDF نیز روشهای مختلفی ارایه شده که متاسفانه هیچ یک از آنها (تا جایی که من تست کرده ام) برای متون فارسی قابل استفاده نیست.
برای حل این مساله من با استفاده از iTextSharp یک کتابخانه برای تبدیل گریدویو به PDF (برای متون فارسی) تهیه کرده ام که در اینجا ارایه خواهم داد. این کتابخانه توانایی تبدیل گریدویو به PDF با حفظ استایل های داده شده به گریدویو را دارد.

از آنجایی که روش کلی استفاده از iTextSharp به همراه متون فارسی و همچنین یک مثال ساده تهیه خروجی از گریدویو را قبلا بیان کرده ام، در اینجا فقط نحوه استفاده از این کتابخانه را توضیح میدهم و از توضیح بیشتر درباره iTextSharp خودداری میکنم.

روش استفاده:

برای استفاده از این کتابخانه، ابتدا یک ارجاع به کتابخانه (iTextSharp (itextsharp.dll و همچنین کتابخانه ارایه شده در اینجا (GridToPdf.dll) به پروژه خود اضافه کنید و فضای نام Hasheminezhad را به کد خود اضافه کنید.

	using Hasheminezhad;

سپس با استفاده از کلاس GridToPdf میتوانید عملیات تبدیل گریدویو به PDF را انجام دهید. در این کلاس دو متد به نامهای Convert و Download وجود دارند.
با استفاده از متد Download میتوانید مستقیما خروجی GridView را برای کاربر ارسال کنید. تنها پارامتر ورودی الزامی این تابع، نام گریدویو است.

	GridToPdf.Download(GridView1);

پس از اجرای این دستور، در صورتی که پلاگینهای نمایش PDF در مرورگر کاربر نصب شده باشد، فایل PDF را در مرورگر خود مشاهده خواهد کرد و در غیر اینصورت، فایل PDF برای دانلود ارسال خواهد شد.
در صورت تمایل میتوانید نام مورد نظر برای ذخیره فایل را به عنوان پارامتر دوم به این تابع ارسال کنید. در این حالت حتی در صورتی که مرورگر امکان نمایش فایل PDF را نیز داشته باشد، آن را در مرورگر باز نکرده و با نام ذکر شده برای دانلود ارسال خواهد کرد.

	GridToPdf.Download(GridView1, "Report.pdf");

دقت کنید که برای اجرای صحیح متد Download، باید حتما صفحه PostBack کامل شده باشد. بنابراین اگر دانلود کردن PDF قرار است از طریق دکمه ای در داخل UpdatePanel انجام پذیرد، حتما این دکمه را به PostBackTrigger های UpdatePanel اضافه کنید.

متد دیگر موجود در این کلاس، متد Convert است که در ساده ترین حالت خود بجز نام گریدویو، نام فایل مورد نظر را دریافت کرده و محتوای فایل PDF را در سرور (و در آدرس ذکر شده) ذخیره خواهد کرد.

	GridToPdf.Convert(GridView1, Server.MapPath("Report.pdf"));

همچنین در صورت لزوم میتوانید هر Stream دیگر که مورد نیاز بود را به این تابع ارسال کنید.

استفاده از GridView صفحه بندی شده
در صورتی که گریدویو دارای صفحه بندی باشد و همچنین DataBind شدن گریدویو را از طریق کدنویسی انجام داده شده باشد (و نه از طریق کنترلهایی مانند ObjectDataSource)، لازم است که حتما قبل از فراخوانی متدهای تبدیل به PDF، ویژگی DataSource مربوط به گریدویو مقدار داشته باشد. در غیر اینصورت، تنها امکان ارسال اطلاعات صفحه جاری به فایل PDF وجود خواهد داشت.

	GridView1.DataSource = getDataSource();
	GridToPdf.Download(GridView1);

ضمیمه

به همراه این مقاله سه فایل ضمیمه شده است. فایل اول، کتابخانه تبدیل گریدویو به PDF است. فایل دوم حاوی یک پروژه نمونه است که برای دیدن نمونه اجرای برنامه میتوانید از آن استفاده کنید. در این پروژه، فایل itextsharp.dll نیز وجود دارد و برای اجرا آن نیاز به فایل اضافی نخواهید داشت. در نهایت فایل سوم، سورس کتابخانه ارایه شده در اینجا است که استفاده از آن با رعایت قوانین مجوز CPL آزاد است.

ضمیمهاندازه
کتابخانه تبدیل GridView به PDF6.09 کیلو بایت
پروژه نمونه به همراه کلیه فایلهای مورد نیاز برای اجرا1.15 مگابایت
سورس کتابخانه (بدون فایل itextsharp.dll)10.26 کیلو بایت