Asp.net Mvc iTextSharp ile pdf print

Ocak 2014 | Ahmet Faik, Yazılım Geliştirme Uzmanı
Mvc ile pdf belgeleri hazırlamak için kullandığım sistemi anlatmak istiyorum.

Kullandığım sistem de bir partialView ile hem kullanıcı ya ön izleme hemde pdf çıktısı için tek bir kaynak kullanmış oluyorum. Bu sistemin avantaj ve dezavantajları mevcuttur. Bu sistemde Mvc model yapısını istediğim gibi kullanabiliyorum ve önizleme ve çıktı için 2 ayrı tasarım ile uğraşmıyorum, bu işin avantajı idi. Dezavantajı ise pdf render etme kısmında css sıkıntıları çıkabiliryor.

 public ActionResult Download() 
 {
 var data = ... ... 
 var buf = ViewPdf(" _Ek1" , data) ; 
 return File(buf, " application/pdf" , " print. Pdf" ) ; 
 }
 private MemoryStream ViewPdfForEk1(string viewName, object model) 
 {
 var doc = new Document(new Rectangle(877f, 1240f) , 30f, 30f, 30f, 30f) ; // Dokuman boyutlandırma

 var memStream = new MemoryStream() ; 
 var writer = PdfWriter. GetInstance(doc, memStream) ; 
 doc. Open() ; 

 //Partial View Html parse. Bu kısımda verileriniz partial view içerisine bind edilip en son hali ile html olarak kullanılır
 var viewText = RenderPartialViewToString(viewName, model) ; 
 var htmlWorker = new HTMLWorker(doc) ; 
 var styles = new StyleSheet() ; 

 //Font ayarlamaları
 FontFactory. Register(" c:\\windows\\fonts\\arial.ttf" ) ; 
 styles. LoadTagStyle(HtmlTags.BODY, HtmlTags.FONTFAMILY, " arial" ) ; 
 styles. LoadTagStyle(HtmlTags.BODY, HtmlTags. ENCODING, " Identity-H" ) ; 

 //Tasarım için 2 farklı düzenleme seçenekleri
 styles. LoadTagStyle(" h2" , " align" , " center" ) ; 
 styles. LoadStyle(" captionBig" , " align" , " center" ) ; 

 htmlWorker. SetStyleSheet(styles) ; 

 var reader = new StringReader(viewText) ; 
 htmlWorker. Parse(reader) ; 
 writer. CloseStream = false; 
 doc. Close() ; 
 memStream. Flush() ; 
 memStream. Position = 0; 
 return memStream; 
 }


 private string RenderPartialViewToString(string viewName, object model) 
 {
 if (string. IsNullOrEmpty(viewName) ) 
 viewName = ControllerContext. RouteData. GetRequiredString(" action" ) ; 

 ViewData. Model = model; 
 using (var sw = new StringWriter() ) 
 {
 var viewResult = ViewEngines. Engines. FindPartialView(ControllerContext, viewName) ; 
 var viewContext = new ViewContext(ControllerContext, viewResult. View, ViewData, TempData, sw) ; 
 viewResult. View. Render(viewContext, sw) ; 
 return sw. GetStringBuilder() . ToString() ; 
 }
 }