2014-01-10 6 views
0

Я хочу экспортировать Asp.Panel content(text, GridViews) с CSS в PDF с C# .NET. Я использую iTextSharp и RenderControl с Asp.Panel, но CSS не отображается в PDF.Экспорт Asp.Panel в 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(); 

Это ASP Panel Я хочу отправить PDF:

 <asp:Panel ID="pnlTabs" runat="server" CssClass="TeamTabs"> 

     <div class="repHeader"> 
      <div class="row"> 
       <div style="padding:12px;border-bottom:1px solid #ddd;margin-bottom:1px;overflow:hidden;"> 
        <div class="col4"> 
         <p> <font size="4.5"> <b>Client Scorecard</b> </font> <br> 
          Run Date: 11/1/2013 4:20:01 AM <br> 
          For Dates: 9/12013 - 10/31/2013 <br> 
          Oct 2013 - Filed to Service Complete: 31.18 <br> 
          Oct 2013 - State Average: 34.45 
         </p> 
        </div> 
       </div> 
        <p style="text-align: center; margin-top:1px"> <font size="3.5"> <b> BECKER POLIAKOFF (CORAL GABLES) </b> 

         </font> </p> 
      </div> 
     </div> 


     <div class="row" style="padding-bottom:36px;"> 
      <div class="col9 col-first"> 
       <asp:GridView ID="gvDashRep_Left_first" runat="server" ></asp:GridView> 
       <asp:GridView ID="gvDashRep_Left_second" runat="server" ></asp:GridView> 
       <asp:GridView ID="gvDashRep_Left_third" runat="server" ></asp:GridView> 
      </div> 

      <div class="col3"> 
       <asp:GridView ID="gvDashRep_Right_first" runat="server" ></asp:GridView> 
       <asp:GridView ID="gvDashRep_Right_second" runat="server" ></asp:GridView> 
       <asp:GridView ID="gvDashRep_Right_third" runat="server" ></asp:GridView> 
      </div> 
       <p style="text-align: center; margin-top:1px"> <font size="2.5"> *For B/W, items with an asterisk indicate that higer number for Octomber 2013 is considered better. </font> </p> 
      <div class="col12 col-first"> 
       <asp:GridView ID="gvComments" runat="server" ></asp:GridView> 
      </div> 
     </div> 

    </asp:Panel> 

CSS Файл div.row {мин-высота : 1%; ширина: 966 пикселей; margin: 0 auto; переполнение: скрыто; } div.col3 {ширина: 219px; плыть налево; margin-left: 30px;}

+0

Попробуйте добавить обратно в строку, указывающую на ваш css-файл cssResolver.AddCssFile (Server.MapPath («Content/pv-telerik-skin/Grid.provest.css»), true); и посмотреть, генерирует ли он тогда –

ответ

0

Существует дополнительная загрузка (XMLWorker), если вы хотите экспортировать в pdf с помощью ITextSharp с помощью css. Вы можете получить XMLWorker от here

Чтобы установить это, чтобы применить 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).

+0

I ai comment: //cssResolver.AddCssFile(Server.MapPath("PATH TO CSS "), true); Я получаю ERR: найден неверный вложенный тег p, ожидаемый закрывающий тег br. ! В строке: xmlParse.Parse (sr); – Adrian

+0

Вы получите такие ошибки, если ваши html-теги не будут должным образом отформатированы или закрыты, если вы разместите свою страницу .aspx. Я увижу, могу ли я обнаружить проблему. –

+0

Это панель ASP, которую я хочу отправить в PDF: – Adrian