برنامه نویس وب


ﺳﻪشنبه 29 آبان
MVC

ساختن فایل pdf در mvc

چهارشنبه, 25 فروردین 1395

برای ساختن فایل های pdf در asp.net mvc چندین راه وجود دارد من در اینجا می خواهم از کتابخانه Pechkin استفاده کنم ، برای اینکار باید از پارشیال ویو استفاده کرد و ساختار فایل pdf را مشخص کرد و بعد این ویو را به فایل pdf تبدیل کرد.

در ابتدا با استفاده از Package Manager Console که در منوی Tools قرار دارد کتابخانه های مورد نیاز را با دستورات زیر به پروژه اضافه می کنیم.

 PM> Install-Package Pechkin

 PM> Install-Pechkin.Synchronized

بعد یک اکشن می سازیم با کد ها زیر اگر می خواهید فایل خروجی داینامیک باشد یک model به متد GetPdf پاس میدهیم در غیر اینصورت پارامتر سوم را null رد کنید.


        public FileContentResult ExportToPDF()
        {
            var date = DateTime.Now.ToString().Replace("/", "-");

            return GetPdf("_ExportToPDF", date + " _ فرم", Model);
        }


حال متد GetPdf را پیاده سازی می کنیم که مسئول ساختن فایل pdf است.


public FileContentResult GetPdf(string actionName, string fileName, object data)
        {
            var pechkinConfig = new GlobalConfig()
                .SetOutputFormat(GlobalConfig.OutputFormat.Pdf)
                .SetPaperOrientation(false)
                .SetPaperSize(PaperKind.A4);

            var html = RenderPartialViewToString(actionName, data);

            var objCfg = new ObjectConfig()
                .SetPrintBackground(true)
                .SetLoadImages(true)
                .SetAllowLocalContent(true)
                .SetUserStylesheetUri("/Content/bootstrap.min.css");

            var output = new SynchronizedPechkin(pechkinConfig).Convert(objCfg, html);

            var fileContentResult = new FileContentResult(output, "application/force-download")
            {
                FileDownloadName = fileName + ".pdf"
            };
            Dispose(true);
            return fileContentResult;
        }


اگر به کدها توجه کنید می بینید که تنظیمات مختلفی وجود دارد مثل SetPaperSize که می توان اندازه فایل خروجی را بر اساس استانداردهای A4 و A5 و ... تنظیم کنید یا با SetUserStylesheetUri کتابخانه های css مورد نیاز را اضافه کنیم ، در اینجا با استفاده از متد RenderPartialViewToString پارشیال ویو خود را به یک رشته تبدیل می کنیم که در ادامه این متد را پیاده می کنیم.


protected string RenderPartialViewToString(string viewName, object model)
        {
            ViewData.Model = model;

            using (StringWriter sw = new StringWriter())
            {
                ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
                ViewContext viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
                viewResult.View.Render(viewContext, sw);

                return sw.GetStringBuilder().ToString();
            }
        }


در ادامه یک پارشیال ویو می سازیم و بر اساس نیازمان با html و css فرم خروجی را طراحی می کنیم.


@model Model
@{
    Layout = null;
    var path = HttpRuntime.AppDomainAppPath + @"images";
}
<!DOCTYPE html>
<
html xmlns="http://www.w3.org/1999/xhtml">
<
head>
    <
title></title>
    </
head>
<
body>
    <
div class="row">
        <
div class="col-md-10 col-md-offset-1" style="height:100px; background-color:aqua;">

           @Model.Name

           <img src="@path/Logo.png" />

        </div>
    </
div>


</body>
</
html>


فقط تنها نکته ش اینه که نمیشه برای عکسها آدرس محلی داد باید با استفاده از HttpRuntime.AppDomainAppPath به اضافه اسم فولدر عکسها آدرس داد.



نظرات

Drag to order
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
نظر تایید شده ای برای این مطلب وجود ندارد .