以横向模式打印网格视图

时间:2012-02-22 11:57:47

标签: c# asp.net gridview printing

我需要在横向模式下打印gridview并且还需要分页(每页打印标题行)

我尝试在CSS中使用@page属性,但由于浏览器兼容性问题,我无法使用它。所以这被排除了。

我找到了使用PrintDocument类并将页面设置为横向模式的替代方法

PrintDocument pd1 = new PrintDocument();
pd1.DefaultPageSettings.Landscape = true; //this works

虽然这很有效,但我能够以横向模式打印文档。 PrintDocument类可以打印流但不会呈现HTML标记。我需要打印gridview,我无法弄清楚如何做到这一点。有什么想法吗?

此外,我发现了另一种使用PrintDocument类打印gridview的替代方法,但这是相当费力的。我遍历gridview数据并使用System.Drawing的RectangleF类,并为gridview中的每个单元格手动绘制矩形和文本,并管理矩形尺寸和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));
}

这很有效,但很明显,这很费劲。但这也给我带来了问题,因为我需要手动分页数据并重绘每页上的标题行。而且,对于分页,我需要打印机页面大小和打印机分辨率,这显然是我无法获得的。

有什么想法吗?如何在横向打印网格视图并在每个页面中重复标题行的分页?有没有更简单,更好的方法呢?

1 个答案:

答案 0 :(得分:1)

我认为你在这里混合场景。如果要从客户端(即访问您网页的人)进行打印,则必须通过浏览器(如HTML)渲染“可打印”区域。当然,你会发现HTML打印非常有限,只有某些浏览器才能实现正确的CSS打印规则。

大多数开发人员通过动态创建用户并将用户重定向到PDF文档来解决这个问题,这个PDF文档作为一个插件现在非常苛刻。一句警告,你提到'费力'的绘图/渲染,你应该期待几乎相同的编码体验。

查看此文章的open-source PDF creation toolkit,但是,您可能会发现商业广告更容易使用。

最后,PrintDocument对象只会在服务器端运行,即在ASP.NET代码中运行,并且只会在执行该代码的机器/服务器上打印 - 它不会在用户的打印机上打印。