2015-08-31 45 views
6

Volevo stampare i dati di intestazione dinamici e che verranno dal controller.Visualizzazione dell'intestazione dinamica tramite Rotativa pdf in MVC

Quindi, come posso visualizzare i dati dinamici nell'intestazione utilizzando Rotativa pdf.

I miei dati di intestazione includono Nome, Indirizzo, Informazioni di contatto e altre informazioni aggiuntive, che sono dinamiche e generate dal lato del controller.

ho creato pdf con l'intestazione statica, come di seguito utilizzando la pagina html

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

Questo funziona bene con l'intestazione statico.

Ora ho bisogno che il testo dell'intestazione passi dinamicamente da questo controller.

risposta

1

Ho avuto una specifica simile una volta e l'ho realizzato con una vista aggiuntiva per la stampa.

È possibile ottenere dati aggiuntivi dal controller e includere uno speciale stile CSS. Quando si utilizza il bootstrap, si consideri che la risoluzione utilizzata per la stampa PDF è molto piccola, quindi è necessario utilizzare le classi col-xs-*.

Nel mio caso il Print-View è stato chiamato ResultPrint.cshtml e nel controller ho avuto questa funzione:

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

che è stato chiamato nel mio Result.cshtml come questo:

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

EDIT

Quando guardi questa risposta https://stackoverflow.com/a/26544977/2660864 puoi vedere che puoi usare i file .cshtml nella tua C ustomActions (non ho testato questo codice)

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

Ciao, l'ho già fatto con l'intestazione statica. Ma ora, ho problemi con la visualizzazione del testo dell'intestazione dinamica. Quindi, come posso passare quell'intestazione dinamica alla mia pagina header.html e accedere in quella pagina. – Herin

+0

È possibile creare un modello aggiuntivo per la propria vista di stampa, in cui si inseriscono i dati dinamici. Quindi puoi caricare i dati del modello nel tuo PrintView.cshtml come in qualsiasi altra vista – katho2404

+0

Ciao, ho già fatto con la parte del corpo del pdf con il modello in più. Ma ho un problema con la parte dell'intestazione Pdf in cui non riesco a caricare la pagina .cshtml, posso caricare solo l'intestazione usando la pagina .html. Si prega di vedere la descrizione della mia domanda, ho aggiornato la mia domanda. E suggeriscimi come posso gestire solo la pagina html. Grazie. – Herin