你可能已经注意到了在调用LocalReport的Render方法时用到了一个XML格式的DeviceInfo结构,在SQL Server 2005 Report Services中,DeviceInfo结构是为了给特定的呈现格式传递参数。来看一个简单的DeviceInfo结构:

RDLC报表(六)<DeviceInfo> 
RDLC报表(六)    
<OutputFormat>EMF</OutputFormat> 
RDLC报表(六)    
<PageWidth>21cm</PageWidth> 
RDLC报表(六)    
<PageHeight>29.70cm</PageHeight> 
RDLC报表(六)    
<MarginTop>2cm</MarginTop> 
RDLC报表(六)    
<MarginLeft>2cm</MarginLeft> 
RDLC报表(六)    
<MarginRight>2cm</MarginRight> 
RDLC报表(六)    
<MarginBottom>2cm</MarginBottom> 
RDLC报表(六)
</DeviceInfo>

        这个简单的DeviceInfo结构至少为LocalReport的Render方法指定了输出格式、页宽、页高、左边距、右边距、下边距信息,在我们使用PrintPage的方法将LocalReport呈现为EMF图片时,EMF图片在页面上显示的大小、边距就是由这个DeviceInfo结构来决定的,如果为DeviceInfo结构和PrintDocumnt设置不匹配的页面大小或边距,那么在PrintPage事件中使用DrawImage方法画出的图片将出现放大或缩小的情况,这是我们不愿意看到的结果。也就是说,在使用自定义纸张进行单据打印时,我们不仅要为PrintDocument设置页面大小和边距,还要为LocalReport设置与PrintDocument相同的页面大小和边距。关于DeviceInfo的结构,可以参考http://msdn2.microsoft.com/zh-cn/library/ms155373.aspx

        下面是我封装的一个为生成DeviceInfo结构使用的类:

RDLC报表(六)using System;
RDLC报表(六)
using System.Collections.Generic;
RDLC报表(六)
using System.Text;
RDLC报表(六)
RDLC报表(六)
namespace RDLCReport

        好了,解决了DeviceInfo,现在来看一下如何在PrintDocument的PrintPage事件中向打印机输出由LocalReport呈现的EMF图片。使用的方法基本上就是在GotReportViewer的例程Print a report from a console app中使用的方法,但是需要指出的一点是例程中使用事件参数System.Drawing.Printing.PrintPageEventArgs类的Graphics属性的DrawImage方法向打印机输出EMF图片,在实际的应用中,发现DrawImage方法绘出的图片会出现放大或缩小的情况,即使为DrawImage方法指定了看起来正确的参数ev.Graphics.DrawImageUnscaledAndClipped(this.m_PageImage, ev.PageBounds);,我使用的方法是DrawImageUnscaledAndClipped,在为DeviceInfo结构和PrintDocument指定好适当且匹配的页面设置时,输出的结果是比较好的。

        待续……

        相关随笔:
                RDLC报表(一)
                RDLC报表(二)
                RDLC报表(三)
                RDLC报表(四)
                RDLC报表(五)

        RDLC报表(六)


相关文章:

  • 2021-08-29
  • 2021-09-01
  • 2021-08-13
  • 2022-02-20
  • 2021-10-16
  • 2021-11-27
  • 2021-09-16
  • 2021-05-17
猜你喜欢
  • 2022-02-07
  • 2021-05-24
  • 2021-08-21
  • 2021-05-30
  • 2021-06-01
相关资源
相似解决方案