代码实现报表打印

简介:

   代码实现报表打印

   

复制代码
     //初始化报表信息
private void SetReportInfo(string reportPath,string sourceName,DataTable dataSource,bool isFengPi)
{
if (!File.Exists(reportPath))
{
MessageBox.Show(
"报表文件:" + reportPath + " 不存在!","提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}

if (dataSource == null || dataSource.Rows.Count == 0)
{
MessageBox.Show(
"没有找到案卷号为:"+txtArchiveNum.Text.Trim()+"的相关目录信息", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
pos
= 1;
LocalReport report1
= new LocalReport();
//设置需要打印的报表的文件名称。
report1.ReportPath = reportPath;
if (isFengPi)
{
//设置参数
string archveTypeName = GetArchiveTypeName();
ReportParameter archiveType
= new ReportParameter("ArchiveType", archveTypeName);
report1.SetParameters(archiveType);
}
//创建要打印的数据源
ReportDataSource source = new ReportDataSource(sourceName, dataSource);
report1.DataSources.Add(source);
//刷新报表中的需要呈现的数据
report1.Refresh();
pos
= 2;
m_streams
= new List<Stream>();
string deviceInfo ="<DeviceInfo>" +
" <OutputFormat>EMF</OutputFormat>" +
" <PageWidth>21cm</PageWidth>" +
" <PageHeight>29.7cm</PageHeight>" +
" <MarginTop>2.0066cm</MarginTop>" +
" <MarginLeft>2.0066cm</MarginLeft>" +
" <MarginRight>2.0066cm</MarginRight>" +
" <MarginBottom>2.0066cm</MarginBottom>" +
"</DeviceInfo>";
Warning[] warnings;
//将报表的内容按照deviceInfo指定的格式输出到CreateStream函数提供的Stream中。
report1.Render("Image", deviceInfo, CreateStream, out warnings);
}

//声明一个Stream对象的列表用来保存报表的输出数据
//LocalReport对象的Render方法会将报表按页输出为多个Stream对象。
private List<Stream> m_streams;
//用来提供Stream对象的函数,用于LocalReport对象的Render方法的第三个参数。
private Stream CreateStream(string name, string fileNameExtension, Encoding encoding, string mimeType, bool willSeek)

{
pos
= 3;
//如果需要将报表输出的数据保存为文件,请使用FileStream对象。
Stream stream = new MemoryStream();
m_streams.Add(stream);
return stream;
}

//用来记录当前打印到第几页了
private int m_currentPageIndex;

#region 打印报表
private void Print()
{
pos
= 4;
m_currentPageIndex
= 0;
if (m_streams == null || m_streams.Count == 0)
return;
//声明PrintDocument对象用于数据的打印
PrintDocument printDoc = new PrintDocument();
//指定需要使用的打印机的名称,使用空字符串""来指定默认打印机
// printDoc.PrinterSettings.PrinterName = "";
//判断指定的打印机是否可用
if (!printDoc.PrinterSettings.IsValid)
{
MessageBox.Show(
"没有找到打印机!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
return;
}
pos
= 5;
printDoc.PrintPage
+= new PrintPageEventHandler(PrintPage);
//执行打印操作,Print方法将触发PrintPage事件。
printDoc.Print();

//释放资源
foreach (Stream stream in m_streams)
{
stream.Dispose();
stream.Close();
}
m_streams
= null;
}

private void PrintPage(object sender, PrintPageEventArgs ev)
{
pos
=6;
//Metafile对象用来保存EMF或WMF格式的图形,
//我们在前面将报表的内容输出为EMF图形格式的数据流。
m_streams[m_currentPageIndex].Position = 0;
Metafile pageImage
= new Metafile(m_streams[m_currentPageIndex]);
//指定是否横向打印
ev.PageSettings.Landscape = false;
//这里的Graphics对象实际指向了打印机
ev.Graphics.DrawImage(pageImage, ev.PageBounds);
m_streams[m_currentPageIndex].Close();
m_currentPageIndex
++;
//设置是否需要继续打印
ev.HasMorePages = (m_currentPageIndex < m_streams.Count);
}
#endregion

//打印封皮
private void btPrint_Click(object sender, EventArgs e)
{
string reportPath = Application.StartupPath + "\\Files\\ReportEnvelop.rdlc";
SetReportInfo(reportPath,
"DataSet1", GetDataSource(true), true);
Print();

}
复制代码
本文转自啊汉博客园博客,原文链接:http://www.cnblogs.com/hlxs/archive/2010/11/18/2087988.html
目录
相关文章
|
JavaScript 前端开发 容器
微搭低代码实现表单打印功能
微搭低代码实现表单打印功能
|
前端开发
后台添加菜单信息如何在前端循环遍历?
后台添加菜单信息如何在前端循环遍历?
42 0
|
机器人 C++
【什么是摆线减速器?设计、3D 打印和测试】
在本教程中,我们将学习什么是摆线驱动器,它是如何工作的,解释如何设计我们自己的模型和 3D 打印模型,以便我们可以在真实现场看到它并更好地了解它是如何工作的。
160 0
|
前端开发 容器
微搭低代码实现查询功能
微搭低代码实现查询功能
微搭低代码实现查询功能
(简易)测试数据构造平台: 10 (首页-菜单)
(简易)测试数据构造平台: 10 (首页-菜单)
(简易)测试数据构造平台: 10 (首页-菜单)
|
测试技术 Python
接口测试平台代码实现4:第一个页面
好了,咱书接上回,我们目前已经项目和app都创建好了。 现在我们用pycharm来打开这个项目,记住要选择到项目上(也就是ApiTest),层级别选错了,选对的话,pycharm是可以自动识别出来这是个django项目,给你安排好启动服务功能的哦~
接口测试平台代码实现4:第一个页面
|
JavaScript 前端开发 数据库
一个页面搞定几乎所有的列表需求的实现思路和一点代码。
     前情回顾 分页控件的使用能不能再简单一点呢,能不能一个页面搞定所有的列表需求?        其实如果要单独实现一个能够显示数据的表格,那么是很简单的,写一个for循环,把DataTable里面数据循环出来就OK了。
910 0
|
BI
在不预览的情况下打印本地报表
链接地址: https://msdn.microsoft.com/zh-cn/library/ms252091.aspx
783 0