以横向模式打印网格视图
本文关键字:网格 视图 式打印 模式 横向 | 更新日期: 2023-09-27 18:25:19
我需要在横向模式下打印网格视图,还需要分页(每页打印的标题行)
我尝试在CSS中使用@page
属性,但由于浏览器兼容性问题,我无法使用它。所以排除了这种可能性。
我找到了一个使用PrintDocument
类并将页面设置为横向模式的替代方案
PrintDocument pd1 = new PrintDocument();
pd1.DefaultPageSettings.Landscape = true; //this works
尽管如此,这还是奏效了,我可以以横向模式打印文档。PrintDocument
类可以打印流,但不能打印呈现的HTML标记。我需要打印一个网格视图,但不知道如何做到这一点。有什么想法吗?
此外,我还找到了另一种使用PrintDocument
类打印网格视图的方法,但这相当费力。我循环浏览网格视图数据,并使用System.Drawing的RectangleF类为网格视图中的每个单元格绘制矩形和文本,并管理矩形尺寸和x/y偏移量来绘制整个表格。
PrintDocument pd1 = new PrintDocument();
pd1.DefaultPageSettings.Landscape = true;
pd1.PrintPage += printer_PrintPage;
pd1.Print();
//Draw a rectangle and fill text in it.
//I Change values of xoffset, yoffset accordingly to draw a row one cell after other
protected void printer_PrintPage(object sender, PrintPageEventArgs e)
{
var rectF1 = new RectangleF(xoffset, yoffset, cellWidth, cellHeight);
e.Graphics.DrawString(propertyinfo.GetValue(obj, null).ToString(), font1, Brushes.Black, rectF1);
e.Graphics.DrawRectangle(Pens.Black, Rectangle.Round(rectF1));
}
这是有效的,但显然,这是费力的。但这也给我带来了问题,因为我需要手动对数据进行分页并重新绘制每页的标题行。而且,对于分页,我需要打印机的页面大小和打印机分辨率,这显然是我无法获得的。
有什么想法吗?如何打印横向网格视图,并在每页中重复页眉行进行分页?有没有更简单更好的方法?
我认为您在这里混合了场景。如果你想从客户端(即访问你网页的人)打印,那么你必须通过浏览器(如HTML)呈现出"可打印"区域。当然,正如您将发现的那样,HTML打印非常有限,并且只有某些浏览器实现了正确的CSS打印规则。
大多数开发人员都是通过动态创建用户并将其重定向到PDF文档来解决这个问题的,而PDF文档作为一个插件,在当今相当流行。警告一句,你提到了"费力"的绘制/渲染,你应该期待同样的编码体验。
看看这篇文章,了解一个开源的PDF创建工具包,然而,你可能会发现一个更容易使用的商业工具包。
最后,PrintDocument对象将只在服务器端运行,即在ASP.NET代码中运行,并且只在执行该代码的机器/服务器上打印,而不会在用户的打印机上打印。