La visualizzazione delle intestazioni e piè di pagina in un PDF generato da Rotativa

Sto cercando di specificare le intestazioni e i piè di pagina di un PDF generato da Rotativa biblioteca. Come l’autore ha risposto qui dovrebbe essere possibile tramite CSS (descritto qui). Tuttavia, io non sono in grado di fare questo.

Ho un foglio di stile caricato nel meta tag:

<link href="print.css" rel="stylesheet" type="text/css" media="print" />

E nel foglio di stile in fondo:

@page {
    @top-left {
        content: "TOP SECRET";
        color: red
    }
    @bottom-right {
        content: counter(page);
        font-style: italic
    }
}

E quindi la generazione di PDF da:

public ActionResult ShowPdf()
{
     var model = new Model();
     return new ViewAsPdf("view.cshtml", model)
                {
                    FileName = "Report.pdf",
                    CustomSwitches = "--print-media-type"
                };
}

E quindi nulla viene visualizzato nell’intestazione e nel piè di pagina del PDF. Tutte le idee?

OriginaleL’autore bpiec | 2013-03-06

4 Replies
  1. 9

    Ho trovato un la documentazione di wkhtmltopdf ed è lì spiegato come gestire le intestazioni e i piè di pagina.

    Fondamentalmente si può semplicemente aggiungere --header-center "text" (o simili interruttori) per l’elenco di argomenti e questo è tutto.

    In modo da utilizzarla con Rotativa sarebbe:

    public ActionResult ShowPdf()
    {
         var model = new Model();
         return new ViewAsPdf("view.cshtml", model)
                    {
                        FileName = "Report.pdf",
                        CustomSwitches = "--print-media-type --header-center \"text\""
                    };
    }

    (Non so se --print-media-type è necessario.)

    Appena provato e non avete bisogno di un --print-media-type

    OriginaleL’autore bpiec

  2. 6

    Se si voleva una visualizzazione invece di testo nell’intestazione/piè di pagina, allora si può fare in questo modo:

    public ActionResult ViewPDF()
    {
          string customSwitches = 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()
    {
        return View();
    }

    Non dimenticare di aggiungere [AllowAnonymous] attributo Piè di azione altrimenti Rotatina non può ottenere l’accesso al percorso.

    L’ho dovuto cambiare per http ma funziona bene. Grazie per la condivisione!

    OriginaleL’autore Charly

  3. 3

    Ecco come l’ho fatto (per intero):

    public ActionResult PrintPDF(int? selectedSiteRotaId, int selectedSiteId)
    {
        string footer = "--footer-center \"Printed on: " + DateTime.Now.Date.ToString("MM/dd/yyyy") + "  Page: [page]/[toPage]\"" + " --footer-line --footer-font-size \"9\" --footer-spacing 6 --footer-font-name \"calibri light\"";
    
        return new ActionAsPdf("RenderPDF", new { selectedSiteRotaId = selectedSiteRotaId, selectedSiteId = 7 }) 
        {
            FileName = "PDF_Output.pdf",
            PageOrientation = Orientation.Landscape,
            MinimumFontSize = 10, 
            //PageMargins  = new Margins(5,5,5,5),
            PageSize = Size.A3,
            CustomSwitches = footer
        };
    
        //var pdfResult = new ActionAsPdf("RenderPDF", new { selectedSiteRotaId = selectedSiteRotaId, selectedSiteId = 7 })
        //{
        //   FileName = "PDF_Output.pdf",
        //   PageOrientation = Orientation.Landscape,
        //   MinimumFontSize = 10
        //};
    
        //var binary = pdfResult.BuildPdf(this.ControllerContext);
    
        //return File(binary, "application/pdf");
    }
    
    
    public ActionResult RenderPDF(int? selectedSiteRotaId, int selectedSiteId)
    {
        return RedirectToAction("Index", "PrintPDF", new { selectedSiteRotaId = selectedSiteRotaId, selectedSiteId = 7 });
    }

    OriginaleL’autore t_plusplus

  4. -1

    provare funzionerà al 100 %

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

    }

    Necessità di definire customSwitches pls.

    OriginaleL’autore Ali

Lascia un commento