添加引用
  1. 从“项目”菜单中,选择“添加引用”。将显示“添加引用”对话框。

  2. 从“.NET”选项卡上显示的列表框中,选择 Winforms 和 Drawing 组件。

添加代码
  1. 应打开 Program.cs 文件以供编辑。如果未打开,在“解决方案资源管理器”窗口中双击 Program.cs 文件。

  2. 使用以下代码替换 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 对象进行打印相关推荐

  1. vue用watch监听对象,打印oldValue和newValue相同的问题

    vue用watch监听对象,打印oldValue和newValue相同的问题 背景 做节目设计器时候,当组件超出限制大小时,需要回滚此次操作,但是数据没有备份,拿不到旧数据.因此在watch中监听变化 ...

  2. IO流的字符流+对象流+打印流+内存流+随机访问流(2)

    IO流的字符流+对象流+打印流+内存流+随机访问流(2) 一.字符流 1.利用字符输出转换流 向文件写入数据 1.文件存在的情况 2.文件不存在的情况 经验:所有的输出流,当文件不存在时都会创建文件 ...

  3. python 打印列表对象,python – 打印对象列表

    我是一个 Python新手.我有这个小问题.我想打印一个对象列表,但它打印的是对象的一些奇怪的内部表示.我甚至定义了__str__方法,但我仍然得到这个奇怪的输出.我在这里错过了什么? class p ...

  4. Python :给类或者类的对象添加打印内容 def __repr__(self)

    通常情况下 打印一个类或者类的对象 会显示 xx.xx object at 0xaaaaabbbbbbb 只会告诉你这个对象或者类 储存在某个内存中,这是因为你的类没有实现相关的打印功能 print ...

  5. python魔术方法str_python 魔术方法(三)对象的打印 -- __repr__ 与 __str__

    默认实现 如果我们没有实现两个方法的任何一个,会打印出什么呢? import logging logging.basicConfig(level=logging.INFO, format='%(asc ...

  6. java基础 io流 字节流 字符流 节点流 包装流 转换流 缓冲流 对象流 打印流 Properties类

    目录 1.概念 2.常用的文件操作 2.1 创建文件 2.2 获取文件相关信息 2.3 目录的操作和文件删除 3. IO流原理及流的分类 3.1 流的分类 4.InputStream 字节输入流 4. ...

  7. Python学习:给类或者类的对象添加打印内容 def __repr__(self)

    通常情况下 打印一个类或者类的对象 会显示 xx.xx object at 0xaaaaabbbbbbb 只会告诉你这个对象或者类 储存在某个内存中,这是因为你的类没有实现相关的打印功能 print ...

  8. python对象怎么打印出来

    先抛出一个问题,之前有朋友问的: import numpy as npif __name__ == '__main__':a = np.array([1, 2, 3], dtype=np.int32) ...

  9. java IO之 序列流 集合对象Properties 打印流 流对象

    序列流 也称为合并流. SequenceInputStream 序列流,对多个流进行合并. SequenceInputStream 表示其他输入流的逻辑串联.它从输入流的有序集合开始,并从 第一个输入 ...

最新文章

  1. lib和dll文件的区别和联系
  2. python 创建txt文件并写入字符串-python创建txt文件
  3. 纯C#实现Hook功能
  4. 【论文解读】百度提出新冠高风险小区预警算法,AAAI21收录!
  5. LeetCode 1272. 删除区间
  6. golang获取程序运行路径
  7. 借教室(洛谷-P1083)
  8. C++_类和对象_对象特性_友元_成员函数做友元---C++语言工作笔记054
  9. WPF/E CTP Quick Start - 第八部分:媒体(翻译)
  10. PHP设计模式——命令模式
  11. [翻译]XNA 3.0 Game Programming Recipes之six
  12. 一步一步实现 iOS 微信自动抢红包(非越狱)
  13. vs201中debug和release两个版本的区别
  14. 神通数据库导出sql脚本
  15. WEB数据挖掘相关术语整理
  16. 股票、债券、基金、期权、期货等的异同
  17. ImageIO.read(inputStream)读取.webp格式图片报错
  18. 找回Word未保存文档
  19. 计算机房的网络化管理,学校计算机房的设计与管理
  20. java正则表达式原理_Java 正则表达式详解

热门文章

  1. 什么鬼!基于备份恢复的实例数据还能变多?
  2. 工厂模式理解了没有?
  3. HYSBZ 1503 郁闷的出纳员 伸展树
  4. Stuts2的struts.devMode设置成true后,不起作用,仍需要重启tomcat
  5. 极客学院职业路径图课程视频下载-爬虫
  6. Mysqli的批量CRUD数据
  7. PMP考前复习题 系列三
  8. 配置VMware ESXi 5事件发送到SYSLOG服务器
  9. Struts2--标签tag
  10. cakephp中使用大括号的形式避免用点号连接sql语句