[转]在不预览的情况下打印RDLC报表
来源:互联网 发布:2016好看的网络自制剧 编辑:程序博客网 时间:2024/06/12 00:25
水晶报表是相当不错的报表,不管是在报表浏览器中还是直接打印方式下,编程都相当方便,但有一点在web下好象权限管理有些麻烦,影响了正常打印,所以换成Microsoft Sql Server Report,但有一个问题又出现了,他没有直接打印功能。头痛。后在msdn中找到了解决方案.
using System;using System.IO;using System.Data;using System.Text;using System.Drawing.Imaging;using System.Drawing.Printing;using System.Collections.Generic;using System.Windows.Forms;using Microsoft.Reporting.WinForms;publicclass Demo : IDisposable{ privateint m_currentPageIndex; private IList<Stream> m_streams; private DataTable LoadSalesData() { // Create a new DataSet and read sales data file // data.xml into the first DataTable. DataSet dataSet =new DataSet(); dataSet.ReadXml(@"..\..\data.xml"); return dataSet.Tables[0]; } // Routine to provide to the report renderer, in order to // save an image for each page of the report. private Stream CreateStream(string name, string fileNameExtension, Encoding encoding, string mimeType, bool willSeek) { Stream stream =new MemoryStream(); m_streams.Add(stream); return stream; } // Export the given report as an EMF (Enhanced Metafile) file. privatevoid Export(LocalReport report) { string deviceInfo = @"<DeviceInfo> <OutputFormat>EMF</OutputFormat> <PageWidth>8.5in</PageWidth> <PageHeight>11in</PageHeight> <MarginTop>0.25in</MarginTop> <MarginLeft>0.25in</MarginLeft> <MarginRight>0.25in</MarginRight> <MarginBottom>0.25in</MarginBottom> </DeviceInfo>"; Warning[] warnings; m_streams = new List<Stream>(); report.Render("Image", deviceInfo, CreateStream, out warnings); foreach (Stream streamin m_streams) stream.Position = 0; } // Handler for PrintPageEvents privatevoid PrintPage(object sender, PrintPageEventArgs ev) { Metafile pageImage =new Metafile(m_streams[m_currentPageIndex]); // Adjust rectangular area with printer margins. Rectangle adjustedRect =new Rectangle( ev.PageBounds.Left - (int)ev.PageSettings.HardMarginX, ev.PageBounds.Top - (int)ev.PageSettings.HardMarginY, ev.PageBounds.Width, ev.PageBounds.Height); // Draw a white background for the report ev.Graphics.FillRectangle(Brushes.White, adjustedRect); // Draw the report content ev.Graphics.DrawImage(pageImage, adjustedRect); // Prepare for the next page. Make sure we haven't hit the end. m_currentPageIndex++; ev.HasMorePages = (m_currentPageIndex < m_streams.Count); } privatevoid Print() { if (m_streams ==null || m_streams.Count == 0) thrownew Exception("Error: no stream to print."); PrintDocument printDoc =new PrintDocument(); if (!printDoc.PrinterSettings.IsValid) { throw new Exception("Error: cannot find the default printer."); } else { printDoc.PrintPage +=new PrintPageEventHandler(PrintPage); m_currentPageIndex = 0; printDoc.Print(); } } // Create a local report for Report.rdlc, load the data, // export the report to an .emf file, and print it. privatevoid Run() { LocalReport report =new LocalReport(); report.ReportPath =@"..\..\Report.rdlc"; report.DataSources.Add(new ReportDataSource("Sales", LoadSalesData())); Export(report); Print(); } public void Dispose() { if (m_streams != null) { foreach (Stream stream in m_streams) stream.Close(); m_streams =null; } } publicstatic void Main(string[] args) { using (Demo demo = new Demo()) { demo.Run(); } } }}
你可以修改以上代码来完成你的需求(有个问题。Microsoft为什么不封装这些,成为一个功能可选项呢)
【代码】来源于MSDN http://msdn.microsoft.com/zh-cn/library/ms252091.aspx
转载:http://blog.csdn.net/shcy0524/article/details/6846847
0 0
- [转]在不预览的情况下打印RDLC报表
- 在不预览的情况下打印RDLC报表
- 不预览直接打印 Microsoft RDLC报表
- rdlc报表预览打印
- reportViewer(RDLC)不预览,直接打印
- RDLC报表的直接打印
- MVC+RDLC报表+PrintPreviewDialog(winform控件)打印、打印预览?!
- 在vs中后台打印rdlc报表
- Winform rdlc 报表的直接打印
- RDLC不预览打印——超市小票
- rdlc报表连续打印
- rdlc报表打印
- RDLC 报表打印
- 在vs2005中的ReportViewer(RDLC报表)中使用直接打印功能,在vs2005使用ReportViewer2008[转]
- ScriptX控件如何在不跳转页面的情况下将要打印的内容打印出来
- ScriptX控件如何在不跳转页面的情况下将要打印的内容打印出来
- ScriptX控件如何在不跳转页面的情况下将要打印的内容打印出来
- 【转】SMARTFORMS不弹出打印,预览的窗口,直接预览
- [转]css height:100%
- QtAndroid详解(5):JNI调用Android系统功能(2)
- php生成二维码
- 后台简单的框架模板
- Microsoft office interop word下打印机的运用
- [转]在不预览的情况下打印RDLC报表
- 2012年12月06日avast对tcpip.sys杀毒之后无法上网解决方案
- C#简单的数据库查询程序
- 树形问题_汇总
- thinkphp中RBAC示例中登录没有权限的问题
- epon介绍
- Cocos2d-js_____Chipmunk物理引擎
- OneThink 1.0版本中的BUG修改
- select2 的运用点滴