ASP.NET MVC рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдкреАрдбреАрдПрдл рдЬреЗрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░реЛрдЯрд╛рдЯрд┐рд╡рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдЧреИрд░-рд╕реНрдкрд╖реНрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ

рдХрдИ рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдкреАрдбреАрдПрдл рд░рд┐рдкреЛрд░реНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рдХрд╛рд░реНрдп рдХреЗ рд╕рд╛рде рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреНрд░рд╛рдХреГрддрд┐рдХ рдЕрдиреБрд░реЛрдзред рд░рд┐рдкреЛрд░реНрдЯ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░реЛрдЯреЗрдЯрд┐рд╡рд╛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдореИрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрд╛рд░реНрдп рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдЕрдиреБрднрд╡ рдХреЛ рдЖрдкрдХреЗ рдзреНрдпрд╛рди рдореЗрдВ рд▓рд╛рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдпрд╣ рдореЗрд░реЗ рд╡рд┐рдЪрд╛рд░ рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рдЕрдкрдиреЗ рд╕реЗрдЧрдореЗрдВрдЯ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдореИрдВ рдХрдИ рд╕реНрдкрд╖реНрдЯ рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдирд╣реАрдВ рдЖрдпрд╛, рдЬрд┐рдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред


рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдИрдорд╛рдирджрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рд░реЗрдХ рдХреЗ рд╕реЗрдЯ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХрджрдо рд░рдЦрд╛, рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдВрджреЗрд╣ рдХреЗ рддреЗрдЬреА рд╕реЗ рдФрд░ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХред


рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЪреБрдирдиреЗ рдХреЗ рдореБрджреНрджреЗ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ред рдЗрд╕ рдпрд╛ рдЙрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рд░ рдХрд┐рд╕реА рдХреЗ рдЕрдкрдиреЗ рдХрд╛рд░рдг рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВрдиреЗ рд░реЛрдЯрд╛рдЯрд┐рд╡рд╛ рдХреЛ рдЪреБрдирд╛, рдХреНрдпреЛрдВрдХрд┐ рдиреНрдпреВрдирддрдо рд╕реЗрдЯрдЕрдк рд▓рд╛рдЧрдд рдХреЗ рд╕рд╛рде, рдЗрд╕реЗ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рдм рдХреБрдЫ рдорд┐рд▓рд╛ред рдЙрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВрдиреЗ рддреАрди рдпрд╛ рдЪрд╛рд░ рдФрд░ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред


рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдмрдпрд╛рди


ASP.NET MVC, .NET рд╕рдВрд╕реНрдХрд░рдг 4.6 рдкрд░ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧред рдЕрдиреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдЗрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдирд╣реАрдВ рд╣реИрдВ, рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рдеред рддреИрдирд╛рддреА Azure рдкрд░ рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИред рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХреБрдЫ рдЕрдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ (рдЬреИрд╕реЗ HiQPdf) рдХреБрдЫ Azure рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рдкреНрд░рд▓реЗрдЦрд┐рдд рд╣реИред


рдореБрдЭреЗ рдПрдХ рд▓рд┐рдВрдХ рдХреЗ рд╕рд╛рде рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реНрдерд┐рд░ HTML рд░рд┐рдкреЛрд░реНрдЯ рдФрд░ рджреВрд╕рд░реА рд▓рд┐рдВрдХ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рд░рд┐рдкреЛрд░реНрдЯ рдХрд╛ рдПрдХ рдкреАрдбреАрдПрдл рд╕рдВрд╕реНрдХрд░рдг рдЦреЛрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд░рд┐рдкреЛрд░реНрдЯ рд╣реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдХреБрдЫ рддрд╛рд▓рд┐рдХрд╛рдУрдВ, рдлрд╝реАрд▓реНрдбреНрд╕ рдФрд░ рдЧреНрд░рд╛рдлрд╝ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИред рджреЛрдиреЛрдВ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рдЕрдиреБрднрд╛рдЧреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ рдореЗрдиреВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐, рдХреБрдЫ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ (рд░рдВрдЧ, рдкрд╛рда рдХрд╛ рдЖрдХрд╛рд░, рд╕реАрдорд╛рдПрдВ)ред


рд░реЛрдЯрд╛рдЯрд┐рд╡рд╛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛


рд░реЛрдЯрд╛рдЯрд┐рд╡рд╛ рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдЖрд╕рд╛рди рд╣реИред


  1. рдЖрдкрдХреЗ рдкрд╛рд╕ ASP.NET MVC рдЯреЗрдореНрдкрд▓реЗрдЯ рдФрд░ рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рддреИрдпрд╛рд░ HTML рд░рд┐рдкреЛрд░реНрдЯ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐:

[HttpGet] public async Task<ActionResult> Index(int param1, string param2) { var model = await service.GetReportDataAsync(param1, param2); return View(model); } 

  1. рдирдЧреЗрдЯ рд░реЛрдЯреЗрдЯрд┐рд╡рд╛ рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ


  2. рдкреАрдбреАрдПрдл рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рд▓рд┐рдП рдирдпрд╛ рдирд┐рдпрдВрддреНрд░рдХ рдЬреЛрдбрд╝реЗрдВ



 [HttpGet] public async Task<ActionResult> Pdf(int param1, string param2) { var model = await service.GetReportDataAsync(param1, param2); return new ViewAsPdf("Index", model); } 

рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдЕрдм рд╕реЗ, рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдкреАрдбреАрдПрдл рд╣реИ рдЬреЛ рдореВрд▓ рдПрдЪрдЯреАрдПрдордПрд▓ рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рд╕рднреА рдбреЗрдЯрд╛ рд╡рд╛рд▓реА рдлрд╝рд╛рдЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реМрдЯрд╛ рд╣реИред


рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рд░реВрдЯрд┐рдВрдЧ рдХрд╛ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдордЭрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рджреЛрдиреЛрдВ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреЛ рдареАрдХ рд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рд░реНрдЧ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рд╣реИрдВ


рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдкреНрд░рд╕рд┐рджреНрдз рдХрдВрд╕реЛрд▓ рдпреВрдЯрд┐рд▓рд┐рдЯреА рд╡рд╛рдХреНрдЯрд╛рдорд▓рдЯреЙрдкрдбрд╛рдЙрди рдкрд░ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдПрдХ рдЖрд╡рд░рдг рд╣реИред рдКрдВрдЪрд╛рдИ рдкрд░ рдХрд╛рдо рдХреА рдЧрддрд┐, рдЖрдк рдПрдЬрд╝реНрдпреЛрд░ рдкрд░ рджрд╛рдВрд╡ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ - рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред рд▓реЗрдХрд┐рди рдРрд╕реА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ рдЬрд┐рдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдо рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред


рдкреГрд╖реНрда рд╕рдВрдЦреНрдпрд╛


рдпрд╣ рдорд╛рди рд▓реЗрдирд╛ рддрд░реНрдХрд╕рдВрдЧрдд рд╣реИ рдХрд┐ рдЧреНрд░рд╛рд╣рдХ рдкреАрдбреАрдПрдл рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдЧрд╛ рдФрд░ рдкреЗрдЬ рдирдВрдмрд░ рджреЗрдЦрдирд╛ рдЪрд╛рд╣реЗрдЧрд╛ред рд░реЛрдЯрд╛рдЯрд┐рд╡рд╛ рдХреЗ рд░рдЪрдирд╛рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдмреЗрд╣рдж рд╕рд░рд▓ рд╣реИред


CustomSwitches рдкреНрд░рд▓реЗрдЦрди рдХреЗ рдЕрдиреБрд╕рд╛рд░, CustomSwitches рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, CustomSwitches рдЙрди рддрд░реНрдХреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ CustomSwitches рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдХрд┐ wkhtmltopdf рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдореЗрдВ wkhtmltopdf рдкрд╛рд╕ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред рдЦреИрд░, рдСрдирд▓рд╛рдЗрди рдпреБрдХреНрддрд┐рдпрд╛рдВ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдЙрджрд╛рд░ рд╣реИрдВред рдирд┐рдореНрди рдХреЙрд▓ рдкреНрд░рддреНрдпреЗрдХ рдкреГрд╖реНрда рдХреЗ рдиреАрдЪреЗ рдПрдХ рдирдВрдмрд░ рдЬреЛрдбрд╝рддрд╛ рд╣реИ:


 return new ViewAsPdf("Index", model) { PageMargins = new Rotativa.Options.Margins(10, 10, 10, 10), PageSize = Rotativa.Options.Size.A4, PageOrientation = Rotativa.Options.Orientation.Portrait, CustomSwitches = "--page-offset 0 --footer-center [page] --footer-font-size 8 }; 

рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдкреГрд╖реНрда рд╕рдВрдЦреНрдпрд╛ рд╕реНрд╡рдпрдВ [page] рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╛рд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ, рдЗрд╕ рддрд░рд╣ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред


[page] рдЕрд▓рд╛рд╡рд╛ [page] рдЕрдиреНрдп рднреА рд╣реИрдВ:
  • [рдкреЗрдЬ] рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдореБрджреНрд░рд┐рдд рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рдкреГрд╖реНрдареЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд
  • [frompage] рдореБрджреНрд░рд┐рдд рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдкрд╣рд▓реЗ рдкреГрд╖реНрда рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд
  • [topage] рдореБрджреНрд░рд┐рдд рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдЕрдВрддрд┐рдо рдкреГрд╖реНрда рдХреА рд╕рдВрдЦреНрдпрд╛ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд
  • [рд╡реЗрдмрдкреЗрдЬ] рдкреНрд░рд┐рдВрдЯ рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рдкреЗрдЬ рдХреЗ URL рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд
  • [рдЕрдиреБрднрд╛рдЧ] рд╡рд░реНрддрдорд╛рди рдЕрдиреБрднрд╛рдЧ рдХреЗ рдирд╛рдо рд╕реЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд
  • [рдЙрдкрдзрд╛рд░рд╛] рд╡рд░реНрддрдорд╛рди рдЙрдкрдзрд╛рд░рд╛ рдХреЗ рдирд╛рдо рд╕реЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд
  • [рджрд┐рдирд╛рдВрдХ] рд╕рд┐рд╕реНрдЯрдо рд╕реНрдерд╛рдиреАрдп рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╡рд░реНрддрдорд╛рди рддрд┐рдерд┐ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд
  • [isodate] рдЖрдИрдПрд╕рдУ formatремрежрез рдореЗрдВ рд╡рд░реНрддрдорд╛рди рддрд┐рдерд┐ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд
  • [рд╕рдордп] рд╕рд┐рд╕реНрдЯрдо рд╕реНрдерд╛рдиреАрдп рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╡рд░реНрддрдорд╛рди рд╕рдордп рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд
  • [рд╢реАрд░реНрд╖рдХ] рд╡рд░реНрддрдорд╛рди рдкреГрд╖реНрда рд╡рд╕реНрддреБ рдХреЗ рд╢реАрд░реНрд╖рдХ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд
  • [рд╕рд┐рджреНрдзрд╛рдВрдд] рдЖрдЙрдЯрдкреБрдЯ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рд╢реАрд░реНрд╖рдХ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд
  • [рд╕рд╛рдЗрдЯрдкреЗрдЬ] рд╡рд░реНрддрдорд╛рди рд╕рд╛рдЗрдЯ рдореЗрдВ рдкреГрд╖реНрда рдХреА рд╕рдВрдЦреНрдпрд╛ рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ
  • [sitepages] рд╡рд░реНрддрдорд╛рди рд╕рд╛рдЗрдЯ рдореЗрдВ рдкреГрд╖реНрдареЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ


рд╕рд╛рдордЧреНрд░реА рдХреА рддрд╛рд▓рд┐рдХрд╛


рдмрдбрд╝реА рдмрд╣реБ-рдкреГрд╖реНрда рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рд▓рд┐рдП PDF рд╕рд╛рдордЧреНрд░реА рдФрд░ рдкреГрд╖реНрда рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрд╣ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ рдФрд░ рдмрд╕ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдЬрдм рдПрдХ рд░рд┐рдкреЛрд░реНрдЯ рдореЗрдВ рдкреГрд╖реНрдареЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдПрдХ рд╕реМ рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛ рдЬрд╛рддреА рд╣реИред


Wkhtmltopdf рдореИрдиреБрдЕрд▓ рдореЗрдВ рд╕рднреА рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рдПрдХ рдкреВрд░реА рд╕реВрдЪреА рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмреАрдЪ --toc ред рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рджреЗрдЦрдХрд░, рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рд╕рднреА рдЯреИрдЧ <h1>, <h2>, ... <h6> рдПрдХрддреНрд░ рдХрд░рддреА рд╣реИ рдФрд░ рдЙрдирдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рд╛рдордЧреНрд░реА рдХреА рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рддреИрдпрд╛рд░ рдХрд░рддреА рд╣реИред рддрджрдиреБрд╕рд╛рд░, рдЕрдкрдиреЗ рдПрдЪрдЯреАрдПрдордПрд▓ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдЗрди рд╣реЗрдбрд░ рдЯреИрдЧ рдХреЗ рд╕рд╣реА рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред


рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, --toc рдХреЛ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдХреЛрдИ рдкрд░рд┐рдгрд╛рдо рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдорд╛рдиреЛ рдХреЛрдИ рдкреИрд░рд╛рдореАрдЯрд░ рдирд╣реАрдВ рдерд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдХреБрдЫ рдордВрдЪ рдкрд░ рдПрдХ рдкреЛрд╕реНрдЯ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рд╣рд╛рдЗрдлрд╝рди рдХреЗ рдмрд┐рдирд╛ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП: toc ред рджрд░рдЕрд╕рд▓, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рд╛рдордЧреНрд░реА рдХреЛ рдкрд╣рд▓реЗ рдкреГрд╖реНрда рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрдм рдЖрдк рд╕рд╛рдордЧреНрд░реА рдореЗрдВ рдПрдХ рдкрдВрдХреНрддрд┐ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рд╡рд╛рдВрдЫрд┐рдд рдкреГрд╖реНрда рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ, рдкреГрд╖реНрда рд╕рдВрдЦреНрдпрд╛рдПрдВ рд╕рд╣реА рд╣реЛрддреА рд╣реИрдВред


рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрднреА рддрдХ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рдХреИрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред


рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд┐рд╖реНрдкрд╛рджрди


рдЕрдЧрд▓реЗ рдмрд┐рдВрджреБ рдкрд░ рдореБрдЭреЗ рд░рд┐рдкреЛрд░реНрдЯ рдореЗрдВ рдЧреНрд░рд╛рдлрд╝ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рдореЗрд░реЗ HTML рдкреЗрдЬ рдореЗрдВ JS рдХреЛрдб рд╣реИ рдЬреЛ dc.js рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:


 function initChart() { renderChart(@Html.Raw(Json.Encode(Model.Chart_1_Data)), 'chartDiv_1'); } function renderChart(data, chartElementId) { var colors = ['#03a9f4', '#67daff', '#8bc34a']; var barHeight = 45; var clientHeight = data.length * barHeight + 50; var clientWidth = document.getElementById(chartId).offsetWidth; var chart = dc.rowChart('#' + chartElementId); var ndx = crossfilter(dataToRender); var dimension = ndx.dimension(d => d.name); var group = dimension.group().reduceSum(d => d.value); chart .width(clientWidth) .height(clientHeight) .margins({ top: 16, right: 16, bottom: 16, left: 16 }) .ordinalColors(colors) .dimension(dimension) .group(group) .xAxis() .scale(d3.scaleLinear().domain([0, 2]).range([1, 3]).nice()); chart.render(); } 

рдЙрд╕реА рд╕рдордп, HTML рдореЗрдВ, рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рдВрдЧрдд рддрддреНрд╡ рд╣реИ:


 <div id="chart_C2" class="dc-chart"></div> 

рдЗрд╕ рдХреЛрдб рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЙрдЪрд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: dc.js , d3.js , crossfilter.js ред initChart рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрд▓ рдПрдХ рдЧреНрд░рд╛рдл рдмрдирд╛рдПрдЧрд╛ рдФрд░ рдкрд░рд┐рдгрд╛рдореА рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░реЗрдЧрд╛
рдкреЗрдбрд╝ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЖрдЗрдЯрдо рдХреЗ рд▓рд┐рдП svgред


рд▓реЗрдХрд┐рди рдкреАрдбреАрдПрдл рдореЗрдВ рдЧреНрд░рд╛рдл рдХрд╛ рдХреЛрдИ рдирд┐рд╢рд╛рди рдирд╣реАрдВ рд╣реИред рдкреАрдбреАрдПрдл рд░реЗрдВрдбрд░рд┐рдВрдЧ рд╕реЗ рдкрд╣рд▓реЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдирд┐рд╢рд╛рдиред рдпрд╣ рдЬрд╛рдВрдЪрдирд╛ рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реИ - рдмрд╕ рдкрд╛рда рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рд▓ <div> рддрддреНрд╡ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдердорд┐рдХ рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ, рдмрд╕ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЙрд▓ рдХреЗ рддрдереНрдп рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред


рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ wkhtmltopdf рдХреЗ рд▓рд┐рдП JS рдХреЛрдб рдХрд╛ рд╕реНрдерд╛рди рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рддрд╛ рд╣реИред <html> рдХреЗ рдЕрдВрдд рдореЗрдВ рд╕реНрдерд┐рдд рдХреЛрдб рдпрд╛, <body> JS рдХреЗ рдЕрдВрдд рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдмрд╕ рдЙрд╕реЗ рдиреЛрдЯрд┐рд╕ рдирд╣реАрдВ рдХрд░рддреА рд╣реИ, рдпрд╛ рд╡рд╣рд╛рдВ рдЙрд╕рд╕реЗ рдорд┐рд▓рдиреЗ рдХреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рдХрд░рддреА рд╣реИред


рд▓реЗрдХрд┐рди <head> рдХреЗ рдЕрдВрджрд░ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдореИрдВ рдпреЛрдЬрдирд╛ рдореЗрдВ рдЖрдпрд╛ рдЬрдм рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб <head> рдЕрдВрджрд░ рд╢реИрд▓рд┐рдпреЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХреЗ рдмрд╛рдж рд╕реНрдерд┐рдд рд╣реИ, рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдирд┐рд░реНрдорд╛рдг рджреНрд╡рд╛рд░рд╛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:


 <body onload="initCharts()"> 

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреЛрдб рдХреЛ рдЙрдореНрдореАрдж рдХреЗ рдореБрддрд╛рдмрд┐рдХ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред


рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реАрдорд╛рдПрдБ


рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдЖрдЙрдЯрдкреБрдЯ рдкреАрдбреАрдПрдл рдореЗрдВ рдХреЛрдИ рд░реЗрдЦрд╛рдВрдХрди рдирд╣реАрдВ рдерд╛ред рддрдм рдореИрдВрдиреЗ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдХрд┐ рдкреВрд░реНрдг рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг, рдкреАрдбреАрдПрдл рд░реЗрдВрдбрд░рд┐рдВрдЧ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рдЗрдВрдЬрди рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рд╣реА рдирд╣реАрдВ рд╣реИ рдФрд░ рдкрд┐рдЫрд▓реЗ рдирд┐рдпрдореЛрдВ рдХреЛ рдирд╣реАрдВ рд╕рдордЭрддрд╛ рд╣реИред рдлрд┐рд░, рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд░реВрдк рд╕реЗ, рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рддреАрд░ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЕрд░реНрде рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рджреБрднрд╛рд╖рд┐рдпрд╛ рдЙрд╕рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЕрдЬреНрдЮрд╛рдд рдкрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдмрд╕ рдХрд╛рдо рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИред


рдлрд╛рд░реНрдо рдХреЗ рддреАрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдЬрдЧрд╣ x => x.value рдЕрдзрд┐рдХ рд╢рд╛рд╕реНрддреНрд░реАрдп function(x) { return x.value; } function(x) { return x.value; } рдорджрдж рдХреА рдФрд░ рд╕рднреА рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдП рдЧрдП, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЧреНрд░рд╛рдл рдПрдХ рдкреАрдбреАрдПрдл рдлрд╛рдЗрд▓ рдореЗрдВ рдорд┐рд▓рд╛ред


рдЪрд╛рд░реНрдЯ рдХреА рдЪреМрдбрд╝рд╛рдИ


рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдЧреНрд░рд╛рдл рдХреЗ рдореВрд▓ рддрддреНрд╡ рдХреА рдЪреМрдбрд╝рд╛рдИ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред рдЗрд╕рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ dc-chart рд╢реИрд▓реА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреАред рдЗрд╕рдореЗрдВ рдкрд┐рдХреНрд╕реЗрд▓ рдореЗрдВ рдЧреНрд░рд╛рдл рдХреА рдЪреМрдбрд╝рд╛рдИ рд╣реЛрддреА рд╣реИред рдЕрдиреНрдпрдерд╛, рдкреАрдбреАрдПрдл рдкрд░ рдЪрд╛рд░реНрдЯ рдмрд╣реБрдд рдЫреЛрдЯрд╛ рд╣реЛрдЧрд╛, рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ HTML рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдпрд╣ рдкреВрд░реА рдЪреМрдбрд╝рд╛рдИ рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░ рд▓реЗрдЧрд╛ред рдкреНрд░рддрд┐рд╢рдд рдХреА рдЪреМрдбрд╝рд╛рдИ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдХреЗрд╡рд▓ HTML рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░реЗрдЧрд╛ред


рдЗрдирд▓рд╛рдЗрди рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ / рд╕реАрдПрд╕рдПрд╕


рдЕрдВрдд рдореЗрдВ, рдореИрдВ рдпрд╣ рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдПрдЪрдЯреАрдПрдордПрд▓ рдХреЛ рдкреАрдбреАрдПрдл рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрдИ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЖрдзрд╛рд░ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ URL рд╣реИ рдЬрд┐рд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрдирд╡рд░реНрдЯрд░ рдЖрдпрд╛рддрд┐рдд рд╕реАрдПрд╕рдПрд╕ рд╢реИрд▓рд┐рдпреЛрдВ, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░реАрдкреНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдпрд╛ рдлреЛрдВрдЯ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рдкреЗрдХреНрд╖ рдкрдереЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░реЗрдЧрд╛ред рдореИрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдХрд╣ рд╕рдХрддрд╛ рдХрд┐ рдпрд╣ рд░реЛрдЯрд╛рдЯрд┐рд╡рд╛ рдореЗрдВ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдПрдХ рдЕрд▓рдЧ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рдЖрдпрд╛ рдерд╛ред


рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд▓реЛрдбрд┐рдВрдЧ рдХреЛ рддреЗрдЬ рдХрд░рдиреЗ рдФрд░ рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рджреМрд░рд╛рди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдпрд╛ рд╢реИрд▓реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рд╕реНрд░реЛрдд рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЖрд╡рд╢реНрдпрдХ рдЬреЗрдПрд╕ рдФрд░ рд╕реАрдПрд╕рдПрд╕ рдХреЛ рд╕реАрдзреЗ HTML рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рдПрдореНрдмреЗрдб рдХрд░рддрд╛ рд╣реВрдВред


рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрдкрдпреБрдХреНрдд рдмрдВрдбрд▓ рдмрдирд╛рдПрдВ:


 public class BundleConfig { public static void RegisterBundles(BundleCollection bundles) { bundles.Add(new StyleBundle("~/Styles/report-html") .Include("~/Styles/report-common.css") .Include("~/Styles/report-html.css") ); bundles.Add(new StyleBundle("~/Styles/report-pdf") .Include("~/Styles/report-common.css") .Include("~/Styles/report-pdf.css") ); bundles.Add(new ScriptBundle("~/Scripts/charts") .Include("~/Scripts/d3/d3.js") .Include("~/Scripts/crossfilter/crossfilter.js") .Include("~/Scripts/dc/dc.js") ); } } 

рдЗрди рдмрдВрдбрд▓реЛрдВ рдХреЗ рд▓рд┐рдП Global.asax.cs рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЙрд▓ рдЬреЛрдбрд╝реЗрдВ


 protected void Application_Start() { ... BundleConfig.RegisterBundles(BundleTable.Bundles); } 

рдФрд░ рдХреЛрдб рдХреЛ рдкреЗрдЬ рдореЗрдВ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдЪрд┐рдд рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВред рдЗрд╕реЗ Global.asax.cs рдХреЗ рд╕рдорд╛рди рдирд╛рдорд╕реНрдерд╛рди рдореЗрдВ рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ HTML рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕реЗ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ:


 public static class HtmlHelperExtensions { public static IHtmlString InlineStyles(this HtmlHelper htmlHelper, string bundleVirtualPath) { string bundleContent = LoadBundleContent(htmlHelper.ViewContext.HttpContext, bundleVirtualPath); string htmlTag = $"<style rel=\"stylesheet\" type=\"text/css\">{bundleContent}</style>"; return new HtmlString(htmlTag); } public static IHtmlString InlineScripts(this HtmlHelper htmlHelper, string bundleVirtualPath) { string bundleContent = LoadBundleContent(htmlHelper.ViewContext.HttpContext, bundleVirtualPath); string htmlTag = $"<script type=\"text/javascript\">{bundleContent}</script>"; return new HtmlString(htmlTag); } private static string LoadBundleContent(HttpContextBase httpContext, string bundleVirtualPath) { var bundleContext = new BundleContext(httpContext, BundleTable.Bundles, bundleVirtualPath); var bundle = BundleTable.Bundles.Single(b => b.Path == bundleVirtualPath); var bundleResponse = bundle.GenerateBundleResponse(bundleContext); return bundleResponse.Content; } } 

рдЦреИрд░, рдЕрдВрддрд┐рдо рд╕реНрдкрд░реНрд╢ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕реЗ рдПрдХ рдХреЙрд▓ рд╣реИ:


 @Html.InlineStyles("~/Styles/report-pdf"); @Html.InlineScripts("~/Scripts/charts"); 

рдирддреАрдЬрддрди, рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рд╕реАрдПрд╕рдПрд╕ рдФрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реАрдзреЗ HTML рдореЗрдВ рд╣реЛрдВрдЧреЗ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди рдЖрдк рд╡реНрдпрдХреНрддрд┐рдЧрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдХрдИ рддреБрд░рдВрдд рдмреНрд░рд╛рдЙрдЬрд╝рд░ рджреНрд╡рд╛рд░рд╛ рдХреИрд╢рд┐рдВрдЧ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рдЕрдХреНрд╖рдорддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪреЗрдВрдЧреЗред рд▓реЗрдХрд┐рди рдореЗрд░реЗ рджреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд▓рдХреНрд╖реНрдп рдереЗ:


  • рддрд╛рдХрд┐ рдкреАрдбреАрдПрдл рдХрдирд╡рд░реНрдЯрд░ рдХреЛ рд╢реИрд▓рд┐рдпреЛрдВ рдпрд╛ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдХрд╣реАрдВ рдЕрдиреБрд░реЛрдз рди рдХрд░рдирд╛ рдкрдбрд╝реЗ, рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдХреНрд░рдорд╢рдГ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рдкрдбрд╝реЗ;
  • рддрд╛рдХрд┐ рдХрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд┐рдП рдмрд┐рдирд╛ рдкреАрдбреАрдПрдл рдФрд░ рдПрдЪрдЯреАрдПрдордПрд▓ рд░рд┐рдкреЛрд░реНрдЯ рдХрд╛ рдкрд╣рд▓рд╛ рдбрд╛рдЙрдирд▓реЛрдб рдиреНрдпреВрдирддрдо рд╕рдордп рд▓реЗред рдореЗрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ;

рдкреЗрдЬ рдЯреВрдЯ рдЬрд╛рддрд╛ рд╣реИ


рдПрдХ рдирдП рдкреГрд╖реНрда рд╕реЗ рдПрдХ рдирдпрд╛ рдЕрдиреБрднрд╛рдЧ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд░рд┐рдкреЛрд░реНрдЯ рдХреЛ рдЕрдиреБрднрд╛рдЧреЛрдВ рдореЗрдВ рд╕рдВрд░рдЪрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЖрдк рд╕рд░рд▓ рд╕реАрдПрд╕рдПрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


 .page-break-before { page-break-before: always; } .no-page-break-inside { page-break-before: auto; page-break-inside: avoid; } 

Wkhtmltopdf рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЗрди рд╡рд░реНрдЧреЛрдВ рдХреЛ рдкрдврд╝рддреА рд╣реИ рдФрд░ рд╕рдордЭрддреА рд╣реИ рдХрд┐ рдПрдХ рдирдпрд╛ рдкреГрд╖реНрда рд╢реБрд░реВ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдкрд╣рд▓рд╛ рд╡рд░реНрдЧ - page-break-before - рдЗрд╕ рддрддреНрд╡ рдХреЗ рд╕рд╛рде рд╣рдореЗрд╢рд╛ рдПрдХ рдирдпрд╛ рдкреГрд╖реНрда рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдмрддрд╛рддрд╛ рд╣реИред рджреВрд╕рд░рд╛ рд╡рд░реНрдЧ - no-page-break-inside - рдЙрди рддрддреНрд╡реЛрдВ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдкреГрд╖реНрда рдкрд░ рдпрдерд╛рд╕рдВрднрд╡ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рдВрдЫрдиреАрдп рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕рдВрд░рдЪрд┐рдд рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рдЧрд╛рддрд╛рд░ рдмреНрд▓реЙрдХ рд╣реИрдВ, рдпрд╛ рдЯреЗрдмрд▓ рдХрд╣рддреЗ рд╣реИрдВред рдпрджрд┐ рджреЛ рдмреНрд▓реЙрдХ рдкреГрд╖реНрда рдкрд░ рдлрд┐рдЯ рд╣реЛрддреЗ рд╣реИрдВ - рд╡реЗ рд╕реНрдерд┐рдд рд╣реЛрдВрдЧреЗред рдпрджрд┐ рддреАрд╕рд░рд╛ рдкреГрд╖реНрда рдореЗрдВ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЕрдЧрд▓рд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдпрджрд┐ рдпрд╣ рдПрдХ рдкреГрд╖реНрда рд╕реЗ рдмрдбрд╝рд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдкрд░рд┐рд╣рд╛рд░реНрдп рд╣реИред рдпрд╣ рд╕рдм рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред


Wkhtmltopdf рдореЗрдВ рдлреНрд▓реЗрдХреНрд╕ рд╡реНрдпрд╡рд╣рд╛рд░


рдЦреИрд░, рдореИрдВрдиреЗ рдЬреЛ рдЖрдЦрд┐рд░реА рд╡рд┐рд╢реЗрд╖рддрд╛ рджреЗрдЦреА рд╡рд╣ рдлреНрд▓реЗрдХреНрд╕рдмреЙрдХреНрд╕ рдорд╛рд░реНрдХрдЕрдк рд╢реИрд▓рд┐рдпреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рд╣рдо рд╕рднреА рдЙрдирдХреЗ рдЖрджреА рд╣реЛ рдЧрдП рд╣реИрдВ рдФрд░ рд▓рдЧрднрдЧ рд╕рднреА рдорд╛рд░реНрдХрдЕрдк рдлреНрд▓реЗрдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ wttmltopdf рдереЛрдбрд╝рд╛ рдкреАрдЫреЗ рд╣реИред рдХреНрд╖реИрддрд┐рдЬ рдлреНрд▓реЗрдХреНрд╕ рд╡рд┐рдХрд▓реНрдк рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ (рдХрдо рд╕реЗ рдХрдо рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдореИрдВрдиреЗ рдиреЗрдЯрд╡рд░реНрдХ рдЙрд▓реНрд▓реЗрдЦ рдореЗрдВ рджреЗрдЦрд╛ рдХрд┐ рдпрд╣ рдлреНрд▓реЗрдХреНрд╕ рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ:


 display: -webkit-flex; display: flex; flex-direction: row; -webkit-flex-direction: row; -webkit-box-pack: justify; /* wkhtmltopdf uses this one */ -webkit-justify-content: space-between; justify-content: space-between; 

рд▓реЗрдХрд┐рди рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдпрд╣ рдкреАрдбреАрдПрдл рдореЗрдВ рдЕрдкреЗрдХреНрд╖рд┐рдд рдорд╛рд░реНрдХрдЕрдк рдирд╣реАрдВ рд╣реБрдЖред рдореБрдЭреЗ рдХреБрдЫ рддрддреНрд╡реЛрдВ рдХреЗ рд▓реЗрдЖрдЙрдЯ рдХреЛ рдлрд┐рд░ рд╕реЗ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рддрд╛рдХрд┐ рдмреНрд▓реЙрдХреЛрдВ рдХреА рдХреНрд╖реИрддрд┐рдЬ рдирд┐рдпреБрдХреНрддрд┐ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╣реЛред рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ wttmltopdf рдХреЗ рд▓рд┐рдП рдлреНрд▓реЗрдХреНрд╕ рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХрд╛ рд╕рдлрд▓ рдЕрдиреБрднрд╡ рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ рд╕рд╛рдЭрд╛ рдХрд░реЗрдВред рдпрд╣ рдмрд╣реБрдд рдорджрджрдЧрд╛рд░ рд╣реЛрдЧрд╛ред


рдХреБрдЫ рд▓рд┐рдВрдХ:


Source: https://habr.com/ru/post/hi425511/


All Articles