我想出了如何使用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>
我希望这对将来的人有所帮助!:)