将Asp.Panel导出为PDF?

我想将带有CSS的Asp.Panel content(text, GridViews)从C#.NET导出为PDF。 我正在使用带有Asp.Panel的iTextSharp和RenderControl,但CSS不是以PDF格式呈现的。

如何解决此问题(使用iTextSharp(如果可能)或以其他方式)?

此代码生成PDF文件:

  StringWriter sw = new StringWriter(); HtmlTextWriter htw = new HtmlTextWriter(sw); StringReader sr; string fileName = "C://pdf/GridView.pdf"; var doc = new Document(PageSize.A3, 45, 5, 5, 5); var pdf = fileName; PdfWriter writer = PdfWriter.GetInstance(doc, new FileStream(pdf, FileMode.Create)); doc.Open(); HtmlPipelineContext htmlContext = new HtmlPipelineContext(null); htmlContext.SetTagFactory(Tags.GetHtmlTagProcessorFactory()); ICSSResolver cssResolver = XMLWorkerHelper.GetInstance().GetDefaultCssResolver(false); cssResolver.AddCssFile(Server.MapPath("Content/PDFs.css"), true); IPipeline pipeline = new CssResolverPipeline(cssResolver, new HtmlPipeline(htmlContext, new PdfWriterPipeline(doc, writer))); XMLWorker worker = new XMLWorker(pipeline, true); XMLParser xmlParse = new XMLParser(true, worker); this.pnlTabs.RenderControl(htw); sr = new StringReader(sw.ToString()); xmlParse.Parse(sr); xmlParse.Flush(); doc.Close(); 

这是我要发送给PDF的ASP面板:

   

Client Scorecard
Run Date: 11/1/2013 4:20:01 AM
For Dates: 9/12013 - 10/31/2013
Oct 2013 - Filed to Service Complete: 31.18
Oct 2013 - State Average: 34.45

BECKER POLIAKOFF (CORAL GABLES)

*For B/W, items with an asterisk indicate that higer number for Octomber 2013 is considered better.

CSS文件div.row {min-height:1%; 宽度:966px; 保证金:0自动; 溢出:隐藏; } div.col3 {width:219px; 向左飘浮; margin-left:30px;}

如果要使用带有css的ITextSharp导出为pdf,还有一个额外的下载(XMLWorker)。 您可以从此处获取XMLWorker

要将其设置为应用您的CSS,您需要执行以下操作

  StringWriter sw = new StringWriter(); HtmlTextWriter htw = new HtmlTextWriter(sw); StringReader sr; string fileName = Server.MapPath("PATH TO PDF"); var doc = new Document(PageSize.A3, 45, 5, 5, 5); var pdf = fileName; PdfWriter writer = PdfWriter.GetInstance(doc, new FileStream(pdf, FileMode.Create)); doc.Open(); HtmlPipelineContext htmlContext = new HtmlPipelineContext(null); htmlContext.SetTagFactory(Tags.GetHtmlTagProcessorFactory()); ICSSResolver cssResolver = XMLWorkerHelper.GetInstance().GetDefaultCssResolver(false); cssResolver.AddCssFile(Server.MapPath("PATH TO CSS"), true); IPipeline pipeline = new CssResolverPipeline(cssResolver, new HtmlPipeline(htmlContext, new PdfWriterPipeline(doc, writer))); XMLWorker worker = new XMLWorker(pipeline, true); XMLParser xmlParse = new XMLParser(true, worker); control.RenderControl(htw); sr = new StringReader(sw.ToString()); xmlParse.Parse(sr); xmlParse.Flush(); 

使用相关文件路径替换PATH TO PDF (保存文件的loacation)和PATH TO CSS (位置是您的css文件)。 当我不得不这样做时,css文件必须是一个外部文件(.css)。