2015-08-31 1 views
6

Я хотел напечатать данные заголовка, которые являются динамическими и будут поступать от контроллера.Отображение динамического заголовка с использованием Rotativa pdf в MVC

Итак, как я могу отображать эти динамические данные в заголовке с помощью Rotativa pdf.

Мои данные заголовка включают имя, адрес, контактные данные и другую дополнительную информацию, которые являются динамическими и генерируются со стороны контроллера.

Я создал PDF со статическим заголовком, как показано ниже, используя 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) 
        }; 

Это хорошо работает со статическим заголовком.

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

ответ

1

У меня была аналогичная спецификация один раз и реализовано с дополнительным представлением для печати.

Там вы можете получить дополнительные данные от контроллера и включить специальный стиль CSS. Когда вы используете bootstrap, считайте, что разрешение, используемое для PDF-печати, очень мало, поэтому вам нужно использовать классы col-xs-*.

В моем случае Print-View был назван ResultPrint.cshtml и в контроллере я имел эту функцию:

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

который был назван в моем Result.cshtml так:

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

EDIT

Когда вы смотрите на этот ответ https://stackoverflow.com/a/26544977/2660864, вы можете видеть, что вы можете использовать .cshtml-файлы в своем C ustomActions (я не тестировал этот код)

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

Здравствуйте, я уже сделал это со статическим заголовком. Но теперь у меня проблема с отображением текста динамического заголовка. Итак, как передать этот динамический заголовок на мою страницу header.html и получить доступ к этой странице. – Herin

+0

Вы можете создать дополнительную модель для вашего вида печати, в которую вы помещаете свои динамические данные. Затем вы можете загрузить данные модели в свой файл PrintView.cshtml, как в любом другом виде. – katho2404

+0

Здравствуйте, я уже сделал с частью тела pdf с дополнительной моделью. Но у меня проблема с частью заголовка Pdf, где я не могу загрузить страницу .cshtml, я могу загружать только заголовок, используя страницу .html. Пожалуйста, ознакомьтесь с описанием моего вопроса, я обновил свой вопрос. И предложите мне, как я могу работать только с html-страницей. Спасибо. – Herin