2012-02-22 59 views
1

我需要打印在横向模式下一个GridView,也需要分页(在每一页上打印的标题行)横向模式打印一个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,并在每个页面中重复标题行分页?有没有更简单和更好的方法来做到这一点?

回答

1

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

大多数开发人员通过动态创建和将用户重定向到一个PDF文档,作为一个插件,很ubitious时下解决此问题得到。一个警告的话,你提到'辛苦'的绘图/渲染,你应该期望几乎相同的编码体验。

看看这篇文章了open-source PDF creation toolkit,但是,你可能会发现一个商用更容易使用。

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

+0

谢谢。但我的手段是有限的,我不能将任何新图书馆引入到项目中,因为涉及到的很多其他项目和团队以及涉及的大量批准,时间等 - 简而言之,它并不实用。感谢您指出有关PrintDocument类的详细信息。我也许没有阅读精美版本,并且在开发环境中工作得很好,所以我确信这是一条路。 – pavanred 2012-02-22 16:10:56