使用来自 MVC 的给定模板批量打印多个订单

Batch print multiple orders with a given template from MVC

我有一个用 MVC 编写的简单 'administration system'。它适用于电子商务业务,我正在寻找只需按一下按钮即可物理打印一批订单的最佳方式。

系统目前是 MVC5,使用 ASP.Net Web API 获取订单数据。我的API可以轻松return我要的订单。但我的问题是如何使用特定模板打印该订单集合。

到目前为止,我正在使用 MVC 视图和优秀的 Rotativa 将我的视图转换为 PDF 并允许我打印。这只对单个订单非常有用,但我的要求是一个按钮打印所有订单(在给定的过滤器内)。

关于如何解决这个问题有什么想法吗?

我想出了如何使用 Rotativa 来做到这一点。

Rotativa 尊重 CSS 'page-break-after' 属性,因此使用此属性,您可以在需要分页符时在视图中添加分页符,从而允许在视图中使用 foreach 循环枚举订单。

在我的控制器中,我有以下响应 'print all' 按钮的操作。高度和宽度测量值与 A4 sheet 纸的标准尺寸相关:

    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如下

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

整个'IndexPrintFormat'视图大致如下(这里切到post的重点)

@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>

我希望这对以后的人有所帮助! :)