2015-04-03 1 views
0

У меня есть простая «система администрирования», написанная в MVC. Это для бизнеса электронной коммерции, и я ищу лучший способ физически распечатать пакет заказов одним нажатием кнопки.Пакетная печать нескольких заказов с заданным шаблоном из MVC

В настоящее время система MVC5 использует ASP.Net Web API для получения данных заказа. Мой API может легко вернуть заказы, которые я хочу. Но мой вопрос заключается в том, как печатать эту коллекцию заказов с определенным шаблоном.

До сих пор я использую представление MVC и отличную Rotativa для преобразования своего представления в PDF и позволяю мне печатать. Это действительно очень хорошо для одного заказа, но мое требование - это одна кнопка, которая печатает все заказы (в пределах заданного фильтра).

Любые идеи о том, как подойти к этому?

ответ

0

Я понял, как это сделать, используя Rotativa.

Rotativa уважает атрибут CSS 'page-break-after', поэтому с его помощью вы можете добавить разрыв страницы в своем представлении всякий раз, когда хотите разрывать страницу, что позволяет использовать цикл foreach в вашем представлении для перечисления заказов ,

В моем контроллере у меня есть следующее действие, которое отвечает на кнопку «распечатать все». Измерения по высоте и ширине, относятся к стандартному размеру для листа бумаги формата А4:

public ActionResult Print() 
    { 
     var r = new ActionAsPdf("IndexPrintFormat") 
     { 
      FileName = DateTime.Now.ToShortDateString()+".pdf", 
      PageSize = Rotativa.Options.Size.A4, 
      PageOrientation = Rotativa.Options.Orientation.Portrait, 
      PageHeight = 297, 
      PageWidth = 210 
     }; 

     return r; 
    } 

Мой контроллер также имеет действие под названием «IndexPrintFormat», которая делает фактический вид я хочу распечатать. Это перечисляет коллекцию заказов и после каждого заказа добавляет P, который использует следующий CSS

 .breakhere { 
     display: block; 
     clear: both; 
     page-break-after: always; 
    } 

Р следующим

<p class="breakhere"></p> 

Весь вид «IndexPrintFormat» будет примерно следующим образом (вырубать здесь, чтобы добраться до пункта сообщения)

@model <MyViewModelPathGoesHere> 

@{ 
    Layout = null; 
} 

<!DOCTYPE html> 
<html> 
<head> 
    <meta name="viewport" content="width=device-width" /> 
    <style> 
     .breakhere { 
      display: block; 
      clear: both; 
      page-break-after: always; 
     } 
    </style> 
</head> 
<body> 
    @foreach (var order in Model.Orders) 
    { 
     <div> 
//display whatever you want to display for each order here 

//This causes a new page in the PDF 
      <p class="breakhere"></p> 
     </div> 
    } 
</body> 
</html> 

Я надеюсь, что это поможет кому-то в будущем! :)