【问题标题】:print a gridview in landscape mode以横向模式打印网格视图
【发布时间】:2012-02-22 11:57:46
【问题描述】:

我需要在横向模式下打印一个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));
}

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

有什么想法吗?如何在横向打印gridview并在每页中重复标题行的分页?有没有更简单更好的方法来做到这一点?

【问题讨论】:

    标签: c# asp.net gridview printing


    【解决方案1】:

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

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

    查看这篇文章以获取 open-source PDF creation toolkit,但是,您可能会发现商业版更易于使用。

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

    【讨论】:

    • 谢谢。但是我的手段是有限的,我不能在项目中引入任何新的库,因为涉及到许多其他项目和团队,并且涉及大量的批准、时间等——简而言之,它不实用。感谢您指出有关 PrintDocument 类的详细信息。我可能没有阅读细则,它在开发环境中运行良好,所以我确信这是要走的路。
    猜你喜欢
    • 2012-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-25
    • 2011-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多