使用 LocalReport 对象进行打印
从“项目”菜单中,选择“添加引用”。将显示“添加引用”对话框。
从“.NET”选项卡上显示的列表框中,选择 Winforms 和 Drawing 组件。
应打开 Program.cs 文件以供编辑。如果未打开,在“解决方案资源管理器”窗口中双击 Program.cs 文件。
使用以下代码替换 Program.cs 文件中的现有代码。确保使用本地计算机上示例报表的有效路径来替换报表引用。不要向项目添加 Data.xml 和 Report.rdlc。下面以编程方式访问这些文件。
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;public class Demo : IDisposable {private int m_currentPageIndex;private IList<Stream> m_streams;private DataTable LoadSalesData(){DataSet dataSet = new DataSet();dataSet.ReadXml(@"c:\My Reports\data.xml");return dataSet.Tables[0];}private Stream CreateStream(string name, string fileNameExtension, Encoding encoding,string mimeType, bool willSeek){
//string strPath = @"D:\Report\";
//if (System.IO.Directory.Exists(strPath) == false)
//{
// System.IO.Directory.CreateDirectory(strPath);
//}
//string filenameext = DateTime.Now.Year.ToString() + DateTime.Now.Day.ToString() + DateTime.Now.Month.ToString() + DateTime.Now.Hour.ToString() + DateTime.Now.Minute.ToString() + DateTime.Now.Second.ToString();
//string strFile = strPath + filenameext + name + "." + fileNameExtension;
//Stream stream = new FileStream(strFile, FileMode.Create);
//m_streams.Add(stream);
//return stream;
Stream stream = new FileStream(@"c:\My Reports\" + name + "." + fileNameExtension, FileMode.Create);m_streams.Add(stream);return stream;}private void 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 stream in m_streams)stream.Position = 0;}private void PrintPage(object sender, PrintPageEventArgs ev){Metafile pageImage = new Metafile(m_streams[m_currentPageIndex]);ev.Graphics.DrawImage(pageImage, ev.PageBounds);m_currentPageIndex++;ev.HasMorePages = (m_currentPageIndex < m_streams.Count);}private void Print(){
//if (m_streams == null || m_streams.Count == 0)
// return;
//PrintDocument printDoc = new PrintDocument();
//if (!printDoc.PrinterSettings.IsValid)
//{
// string msg = String.Format("Can't find printer \"{0}\".", "默认打印机!");
// MessageBox.Show(msg, "找不到默认打印机");
// return;
//}
//printDoc.PrintPage += new PrintPageEventHandler(PrintPage);
//printDoc.Print();
const string printerName = "Microsoft Office Document Image Writer";if (m_streams == null || m_streams.Count == 0)return;PrintDocument printDoc = new PrintDocument();printDoc.PrinterSettings.PrinterName = printerName;if (!printDoc.PrinterSettings.IsValid){string msg = String.Format("Can't find printer \"{0}\".", printerName);MessageBox.Show(msg, "Print Error");return;}printDoc.PrintPage += new PrintPageEventHandler(PrintPage);printDoc.Print();}private void Run(){LocalReport report = new LocalReport();report.ReportPath = @"c:\My Reports\Report.rdlc";report.DataSources.Add(new ReportDataSource("Sales", LoadSalesData()));Export(report);m_currentPageIndex = 0;Print();}public void Dispose(){if (m_streams != null){foreach (Stream stream in m_streams)stream.Close();m_streams = null;}}public static void Main(string[] args){using (Demo demo = new Demo()){demo.Run();}} }
参考:https://msdn.microsoft.com/zh-cn/library/ms252091(VS.80).aspx
转载于:https://www.cnblogs.com/ChineseMoonGod/p/5505890.html
使用 LocalReport 对象进行打印相关推荐
- vue用watch监听对象,打印oldValue和newValue相同的问题
vue用watch监听对象,打印oldValue和newValue相同的问题 背景 做节目设计器时候,当组件超出限制大小时,需要回滚此次操作,但是数据没有备份,拿不到旧数据.因此在watch中监听变化 ...
- IO流的字符流+对象流+打印流+内存流+随机访问流(2)
IO流的字符流+对象流+打印流+内存流+随机访问流(2) 一.字符流 1.利用字符输出转换流 向文件写入数据 1.文件存在的情况 2.文件不存在的情况 经验:所有的输出流,当文件不存在时都会创建文件 ...
- python 打印列表对象,python – 打印对象列表
我是一个 Python新手.我有这个小问题.我想打印一个对象列表,但它打印的是对象的一些奇怪的内部表示.我甚至定义了__str__方法,但我仍然得到这个奇怪的输出.我在这里错过了什么? class p ...
- Python :给类或者类的对象添加打印内容 def __repr__(self)
通常情况下 打印一个类或者类的对象 会显示 xx.xx object at 0xaaaaabbbbbbb 只会告诉你这个对象或者类 储存在某个内存中,这是因为你的类没有实现相关的打印功能 print ...
- python魔术方法str_python 魔术方法(三)对象的打印 -- __repr__ 与 __str__
默认实现 如果我们没有实现两个方法的任何一个,会打印出什么呢? import logging logging.basicConfig(level=logging.INFO, format='%(asc ...
- java基础 io流 字节流 字符流 节点流 包装流 转换流 缓冲流 对象流 打印流 Properties类
目录 1.概念 2.常用的文件操作 2.1 创建文件 2.2 获取文件相关信息 2.3 目录的操作和文件删除 3. IO流原理及流的分类 3.1 流的分类 4.InputStream 字节输入流 4. ...
- Python学习:给类或者类的对象添加打印内容 def __repr__(self)
通常情况下 打印一个类或者类的对象 会显示 xx.xx object at 0xaaaaabbbbbbb 只会告诉你这个对象或者类 储存在某个内存中,这是因为你的类没有实现相关的打印功能 print ...
- python对象怎么打印出来
先抛出一个问题,之前有朋友问的: import numpy as npif __name__ == '__main__':a = np.array([1, 2, 3], dtype=np.int32) ...
- java IO之 序列流 集合对象Properties 打印流 流对象
序列流 也称为合并流. SequenceInputStream 序列流,对多个流进行合并. SequenceInputStream 表示其他输入流的逻辑串联.它从输入流的有序集合开始,并从 第一个输入 ...
最新文章
- lib和dll文件的区别和联系
- python 创建txt文件并写入字符串-python创建txt文件
- 纯C#实现Hook功能
- 【论文解读】百度提出新冠高风险小区预警算法,AAAI21收录!
- LeetCode 1272. 删除区间
- golang获取程序运行路径
- 借教室(洛谷-P1083)
- C++_类和对象_对象特性_友元_成员函数做友元---C++语言工作笔记054
- WPF/E CTP Quick Start - 第八部分:媒体(翻译)
- PHP设计模式——命令模式
- [翻译]XNA 3.0 Game Programming Recipes之six
- 一步一步实现 iOS 微信自动抢红包(非越狱)
- vs201中debug和release两个版本的区别
- 神通数据库导出sql脚本
- WEB数据挖掘相关术语整理
- 股票、债券、基金、期权、期货等的异同
- ImageIO.read(inputStream)读取.webp格式图片报错
- 找回Word未保存文档
- 计算机房的网络化管理,学校计算机房的设计与管理
- java正则表达式原理_Java 正则表达式详解