2016-07-12 3 views
1

Я прошел через несколько сообщений и попробовал все, что было предложено, но заголовок не повторяется на странице, на которую перетекает мой webgrid.Использование iTextSharp для экспорта в PDF-файлы и повторения заголовков

Вот мой код:

public FileStreamResult ExportCombinedPDF(int ProjectID) 
    { 
     List<PipelineDetails> PipeList = new List<PipelineDetails>(); 
     ProjectManager PM = new ProjectManager(); 

     PipeList = PM.GetPipelineList(ProjectID); 

     //This is the css styling for the webgrid 
     string webgridstyle = PM.Pipeline_HtmlForExport(ProjectID); 
     //This is creating the table with other details also being exported 
     string ProjectHtml = PM.Project_HtmlForExport(ProjectID); 

     WebGrid grid = new WebGrid(source: PipeList, canPage: false, canSort: false); 
     string gridHtml = grid.GetHtml(tableStyle: "webGrid", 
             headerStyle: "webGridHeader", 
             alternatingRowStyle: "webGridAlt", 
       columns: grid.Columns(
       grid.Column("NodeNumber", "Node Nr."), 
       grid.Column("Accumulated_Length", "Accumulated Length"), 
       grid.Column("Elevation", "Elevation"), 
       grid.Column("Pipe_Outside_Diameter", "Pipe Outside Diameter"), 
       grid.Column("Wall_Thickness", "Wall Thickness"), 
       grid.Column("Control_Point_Description", "Control Point Description"), 
       grid.Column("Control_Point_Size", "Control Point Size"))).ToString(); 

     string exportData = String.Format("<html><body>{0}{1} <br /> {2}</body></html>", "<style>" + webgridstyle + "</style>", ProjectHtml, gridHtml); 

     var bytes = System.Text.Encoding.UTF8.GetBytes(exportData); 
     using (var input = new MemoryStream(bytes)) 
     { 
      var output = new MemoryStream(); 
      var document = new iTextSharp.text.Document(PageSize.A4, 50, 50, 50, 50); 
      var writer = PdfWriter.GetInstance(document, output); 

      Font headerFont = FontFactory.GetFont("Verdana", 10); 
      Font rowfont = FontFactory.GetFont("Verdana", 10); 

      writer.CloseStream = false; 
      document.Open(); 

      var xmlWorker = iTextSharp.tool.xml.XMLWorkerHelper.GetInstance(); 
      xmlWorker.ParseXHtml(writer, document, input, System.Text.Encoding.UTF8); 

      document.Close(); 
      output.Position = 0; 

      return File(output, "application/pdf", "Pipeline_Report.pdf"); 

      //return new FileStreamResult(output, "application/pdf"); 
     } 

    } 

Я попытался добавить repeat-header:yes к моему CSS, но это не сработало. Я также попытался добавить следующее в мой код ниже, который также не работает:

//This was done before the document was opened : 
      PdfPTable table = new PdfPTable(7); 

      table.HeaderRows = 2; 

//This was done before the document was closed : 

      document.Add(table); 

Но, как уже упоминалось, это тоже не сработало. Я не могу себе представить, что так сложно установить что-то, чтобы повторить заголовок.

В противном случае следующим вариантом будет просто запуск WebGrid для запуска на новой странице. Возможно ли это?

Буду признателен за любую помощь. Спасибо.

ответ

0

Таким образом, я смог получить работу на странице. Так что, думая, что это также дает мне результат, который я хотел, я бы опубликовал в качестве ответа.

я изменил строку exportData, добавив PAGEBREAK:

string exportData = String.Format("<html><body>{0}{1} <p style='page-break-after:always;'></p> {2}</body></html>", "<style>" + webgridstyle + "</style>", ProjectHtml, gridHtml); 
0

Я имел успех с repeat-header:yes если добавить эту строку в .webgrid-table в вашей webgridstyle строки таким образом

string webgridstyle = " .webgrid-table { " + 

       "   border: solid 0.1px #000000; " + 
       "   background-color: white; " + 
       "   repeat-header:yes; " + 
       "  } " + 

Это как это сработало для меня. Как вы можете видеть на скриншоте, вторая страница имеет свой повторяющееся заголовок, а

enter image description here

+0

Спасибо за предложение. Я не работал над этим проектом через некоторое время, но если я смогу найти время, я попробую ваше предложение и вернусь к вам. Еще раз спасибо! – AxleWack

+0

Так что мне нужно было сделать то же самое в другом проекте и попробовал попробовать, но он не работает :( – AxleWack

+0

ваш CSS находится в 'PM.Pipeline_HtmlForExport()'? И у вас есть строка ' repeat-header: yes; 'где-нибудь в вашем css? – LavsTo

Смежные вопросы