2016-07-12 10 views
1

Ich habe einige Posts durchgelesen und alles versucht, was vorgeschlagen wurde, aber der Header wird nicht auf der Seite wiederholt, die mein WebGrid überfließt.Verwenden von iTextSharp, um in PDF zu exportieren und Header zu wiederholen

Hier ist mein Code:

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"); 
     } 

    } 

ich versucht habe repeat-header:yes meine CSS hinzufügen, aber das hat nicht funktioniert. Ich habe auch versucht, unter den folgenden meinem Code hinzufügen, was auch funktionierte nicht:

//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); 

Aber wie bereits erwähnt, kann dies auch nicht funktioniert hat. Ich kann mir nicht vorstellen, dass es so schwierig ist, etwas zu setzen, um einen Header zu wiederholen.

Andernfalls wäre die nächste Option, das WebGrid nur auf der neuen Seite zu starten. Ist das überhaupt möglich?

Ich würde jede Hilfe zu schätzen wissen. Vielen Dank.

Antwort

0

So konnte ich einen Seitenumbruch zur Arbeit bekommen. So gedacht, da dies mir auch ein Ergebnis gibt, das ich wollte, würde ich als Antwort posten.

änderte ich meine Exportdata-String durch einen Seitenumbruch und fügte hinzu:

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

Ich hatte Erfolg mit repeat-header:yes, wenn Sie diese Zeile innerhalb .webgrid-table in Ihrem webgridstyle String hinzufügen auf diese Weise

string webgridstyle = " .webgrid-table { " + 

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

Dies ist, wie es hat für mich funktioniert. Wie man es von Screenshot sehen, zweite Seite hat meine Wiederholung Header als auch

enter image description here

+0

Danke für die Anregung. Ich habe an diesem Projekt schon lange nicht mehr gearbeitet, aber wenn ich Zeit finde, werde ich Ihren Vorschlag versuchen und zu Ihnen zurückkommen. Danke noch einmal! – AxleWack

+0

Also musste ich die gleiche Sache in einem anderen Projekt tun und gab Ihrem Vorschlag einen Versuch, aber es scheint nicht zu funktionieren :( – AxleWack

+0

Ihr CSS befindet sich in 'PM.Pipeline_HtmlForExport()'? Und haben Sie die Zeile ' repeat-header: yes; 'überall in deinem css? – LavsTo

Verwandte Themen