2015-08-31 10 views
6

Ich wollte Kopfdaten, die dynamisch sind und vom Controller kommen.Anzeige dynamische Header mit Rotativa pdf in MVC

Also wie kann ich diese dynamischen Daten im Header mit Rotativa pdf anzeigen.

Meine Kopfdaten enthalten Name, Adresse, Kontaktinformationen und andere zusätzliche Informationen, die dynamisch sind und von der Controllerseite generiert werden.

Ich habe wie unten pdf mit statischen Header erstellt von HTML-Seite mit

string header = Server.MapPath("~/Static/NewFolder/PrintHeader.html"); 
string footer = Server.MapPath("~/Static/NewFolder/PrintFooter.html"); 

string customSwitches = string.Format("--header-html \"{0}\" " + 
         "--header-spacing \"0\" " + 
         "--footer-html \"{1}\" " + 
         "--footer-spacing \"10\" " + 
         "--footer-font-size \"10\" " + 
         "--header-font-size \"10\" ", header, footer); 

return new ViewAsPdf("SchedulePrintPdf", modelData) 
        { 
         CustomSwitches = customSwitches, 
         PageOrientation = Orientation.Portrait, 
         PageMargins = { Top = 20, Bottom = 22 }, 
         SaveOnServerPath = filePath, FileName = Path.GetFileName(fileName) 
        }; 

Dies funktioniert gut mit Static-Header.

Jetzt brauche ich den Header-Text wird von diesem Controller dynamisch gehen.

Antwort

1

Ich hatte eine ähnliche Spezifikation einmal und realisierte es mit einem zusätzlichen View for Printing.

Dort können Sie zusätzliche Daten vom Controller erhalten und einen speziellen CSS-Stil hinzufügen. Wenn Sie Bootstrap verwenden, beachten Sie, dass die für das PDF-Drucken verwendete Auflösung sehr klein ist. Verwenden Sie daher die Klassen col-xs-*.

In meinem Fall wurde der Print-View genannt ResultPrint.cshtml und im Controller hatte ich diese Funktion:

public ActionResult GeneratePDF(int id) 
    { 
     InputPrintModel model = db.InputPrintModel.Find(id); 
     if (model == null) 
     { 
      return HttpNotFound(); 
     } 

     try 
     { 
      return new ViewAsPdf("ResultPrint", model); 
     } 
     catch (Exception ex) 
     { 
      // Error Dialog + Logging 
      return View("Result", model); 
     } 
    } 

die in meinem Result.cshtml so aufgerufen wurde:

@Html.ActionLink("Generate PDF", "GeneratePDF", new { id = Model.Id }) 

EDIT

Wenn Sie diese Antwort https://stackoverflow.com/a/26544977/2660864 betrachten, können Sie sehen, dass Sie .cshtml-Dateien in Ihrem C verwenden können ustomActions (Ich habe diesen Code nicht getestet)

public ActionResult ViewPDF() 
{ 
     string cusomtSwitches = string.Format("--print-media-type --allow {0} --footer-html {0} --footer-spacing -10", 
      Url.Action("Footer", "Document", new { area = ""}, "https")); 


    return new ViewAsPdf("MyPDF.cshtml", model) 
       { 
        FileName = "MyPDF.pdf", 
        CustomSwitches = customSwitches 
       }; 
} 

[AllowAnonymous] 
public ActionResult Footer() 
{ 
    // get custom data for view 
    return View(model); 
} 
+0

Hallo, ich habe dies bereits mit statischen Header getan. Aber jetzt habe ich Probleme mit der Anzeige von dynamischem Header-Text. Wie kann ich diesen dynamischen Header an meine header.html-Seite übergeben und auf dieser Seite zugreifen? – Herin

+0

Sie können ein zusätzliches Modell für Ihre Druckansicht erstellen, in dem Sie Ihre dynamischen Daten ablegen. Dann können Sie die Daten des Modells in Ihre PrintView.cshtml laden, wie in jeder anderen Ansicht. – katho2404

+0

Hallo, ich habe bereits mit dem PDF-Körperteil mit Extra-Modell getan. Aber ich habe ein Problem mit Pdf-Header-Teil, wo ich .cshtml Seite nicht laden kann, kann ich nur Header laden mit HTML-Seite. Bitte sehen Sie sich die Beschreibung meiner Frage an, ich habe meine Frage aktualisiert. Und schlage mir vor, wie ich nur mit HTML-Seite umgehen kann. Danke. – Herin