我想出了如何使用Rotativa来做到这一点。
Rotativa尊重CSS的'page-break-after'属性,所以使用这个,你可以在你的视图中添加一个分页符,只要你想分页,因此允许在视图中使用foreach循环来枚举订单。
在我的控制器中,我有以下操作来响应“全部打印”按钮。高度和宽度的测量涉及到标准尺寸的A4纸:
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”的动作这使得我想打印的实际的视图。此列举的订单的集合,并且每个订单之后添加它使用以下CSS为P
.breakhere {
display: block;
clear: both;
page-break-after: always;
}
的P是如下
<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>
我希望这可以帮助未来的人! :)