使用来自 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>
我希望这对以后的人有所帮助! :)
我有一个用 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>
我希望这对以后的人有所帮助! :)