C# winform打印RDLC
来源:互联网 发布:js防水涂料检验批 编辑:程序博客网 时间:2024/05/17 03:55
此博客大部分内容都是经过百度查阅,整理,并实现功能后总结而写,主要借鉴一下网址博客:
http://www.cnblogs.com/qiuweiguo/archive/2011/08/26/2154706.html
查阅了很多资料,大部分都是直接打印Report文件,而我的需求是打印窗体上的reportViewer控件,其实逻辑代码都是差不多,先在bin中生成emp文件。
主要代码如下:
//添加命名空间using System.IO;using System.Drawing.Printing;using System.Drawing.Imaging;
//生成 emf文件 private void Export(LocalReport report) { string deviceInfo = @"<DeviceInfo>" + " <OutputFormat>EMF</OutputFormat>" + "</DeviceInfo>"; Warning[] warnings; m_streams = new List<Stream>(); report.Render("Image", deviceInfo, CreateStream, out warnings); }
private Stream CreateStream(string name, string fileNameExtension, Encoding encoding, string mimeType, bool willSeek) { Stream stream = new FileStream(name + "." + fileNameExtension, FileMode.Create); m_streams.Add(stream); return stream; }
private int m_currentPageIndex;
private void Print() { m_currentPageIndex = 0; if (m_streams == null || m_streams.Count == 0) return; //声明PrintDocument对象用于数据的打印 PrintDocument printDoc = new PrintDocument(); //指定需要使用的打印机的名称 printDoc.PrinterSettings.PrinterName = "Brother HL-5440D series"; //判断指定的打印机是否可用 if (!printDoc.PrinterSettings.IsValid) { MessageBox.Show("找不到打印机"); return; } //声明PrintDocument对象的PrintPage事件,具体的打印操作需要在这个事件中处理。 printDoc.PrintPage += new PrintPageEventHandler(PrintPage); //执行打印操作,Print方法将触发PrintPage事件。 printDoc.Print(); }
private void PrintPage(object sender, PrintPageEventArgs ev) { //Metafile对象用来保存EMF或WMF格式的图形, //我们在前面将报表的内容输出为EMF图形格式的数据流。 m_streams[m_currentPageIndex].Position = 0; Metafile pageImage = new Metafile(m_streams[m_currentPageIndex]); //调整打印机区域的边距 System.Drawing.Rectangle adjustedRect = new System.Drawing.Rectangle( ev.PageBounds.Left - (int)ev.PageSettings.HardMarginX, ev.PageBounds.Top - (int)ev.PageSettings.HardMarginY, ev.PageBounds.Width, ev.PageBounds.Height); //指定是否横向打印 ev.PageSettings.Landscape = false; //这里的Graphics对象实际指向了打印机 ev.Graphics.DrawImage(pageImage, adjustedRect); //防止字体变大 m_streams[m_currentPageIndex].Close(); m_currentPageIndex++; //设置是否需要继续打印 ev.HasMorePages = (m_currentPageIndex < m_streams.Count); }
private void b1_Click(object sender, EventArgs e) { Export(reportViewer1.LocalReport); Print(); }
1.选择Report文件,点击下图这里,切换成报表
ConsumeConteinerWhitespace 的属性,默认是false,改成True 即可。
如果还有空白页,可能是你报表设计超过A4纸的长度或者宽度,调试一下即可。
阅读全文
0 0
- C# winform打印RDLC
- Winform rdlc 报表的直接打印
- MVC+RDLC报表+PrintPreviewDialog(winform控件)打印、打印预览?!
- C#Winform使用rdlc进行多选批量打印
- C# winform 窗体打印
- C# 打印winform 界面
- C# WinForm 打印
- C# winform 打印类
- c# winform 打印datagridview
- C# winform 条形码打印
- c# winform打印类
- C# winform打印总结
- RDLC打印
- C# winform小票打印
- 【.Net码农】C# WinForm 打印
- C# Winform 无弹窗打印实例
- C#中直接打印Report文件(rdlc)
- rdlc报表连续打印
- git--标签管理
- CentOS下搭建Java Web开发环境
- android AppOps operation mode设置权限浅析
- c语言
- NOIP2013 Day1 T3 货车运输
- C# winform打印RDLC
- ModelAndView详解
- android_视频播放器(VideoView)
- 反转链表
- LeetCode | 63. Unique Paths II
- 20160721考试总结
- VIM实用技巧
- 红黑树
- 昝辉SEO告诉你:SEO是什么鬼