C# RDLC报表不出现预览窗体直接输出到打印机
#region 直接打印区域
/// <summary>
/// 直接打印到打印机
/// </summary>
/// <param name="reportFullFileName"></param>
/// <param name="reportTitle"></param>
/// <param name="reportDSTable1"></param>
/// <param name="reportDSTable2"></param>
/// <param name="reportDSTable3"></param>
/// <param name="reportDSTable4"></param>
/// <param name="reportDSTable5"></param>
/// <param name="hasSubReport"></param>
/// <param name="subReportDSTable1"></param>
/// <param name="subReportDSTable2"></param>
/// <param name="tPageSettings"></param>
/// <param name="tPrinterSettings"></param>
/// <param name="logoFileName1"></param>
/// <param name="logoFileName2"></param>
/// <param name="logoFileName3"></param>
public void PrintReportDrc(string reportFullFileName, string reportTitle, DataTable reportDSTable1,
DataTable reportDSTable2 = null, DataTable reportDSTable3 = null, DataTable reportDSTable4 = null,
DataTable reportDSTable5 = null, bool hasSubReport = false, DataTable subReportDSTable1 = null,
DataTable subReportDSTable2 = null, System.Drawing.Printing.PageSettings tPageSettings = null, System.Drawing.Printing.PrinterSettings tPrinterSettings = null, string logoFileName1 = null, string logoFileName2 = null, string logoFileName3 = null)
{
if (!File.Exists(reportFullFileName))
{
MyMsg.Error("T.1201/指定的报表文件不存在,请检查!");
this.Close();
return;
}
this.Text += "(" + reportTitle + ")"; this.RptvMain.Reset();
this.RptvMain.ProcessingMode = ProcessingMode.Local;
this.RptvMain.LocalReport.ReportPath = reportFullFileName;//必须在前面,否则出现The source of the report definition has not been specified错误
this.RptvMain.LocalReport.EnableExternalImages = true; // RDLC报表显示本地图片必须设置(默认是关闭) #region 处理参数
ReportParameterInfoCollection reportParameterInfos = RptvMain.LocalReport.GetParameters();
List<string> parasNames = new List<string>();
foreach (ReportParameterInfo rpi in reportParameterInfos)
{
parasNames.Add(rpi.Name);
} List<ReportParameter> reportParameters = new List<ReportParameter>();
if (parasNames.Contains("LogoFile1"))
{
if (string.IsNullOrEmpty(logoFileName1))
{
logoFileName1 = "RptLogoDft1.jpg";
}
logoFileName1 = AppInfo.GetPath(AppInfo.AppPath.Report) + @"\Images\" + logoFileName1;
logoFileName1 = @"file:///" + logoFileName1.Replace(@"\", @"/");
ReportParameter reportParameter = new ReportParameter("LogoFile1", logoFileName1);
reportParameters.Add(reportParameter);
}
if (parasNames.Contains("LogoFile2"))
{
if (string.IsNullOrEmpty(logoFileName2))
{
logoFileName2 = "RptLogoDft2.jpg";
}
logoFileName2 = AppInfo.GetPath(AppInfo.AppPath.Report) + @"\Images\" + logoFileName2;
logoFileName2 = @"file:///" + logoFileName2.Replace(@"\", @"/");
ReportParameter reportParameter = new ReportParameter("LogoFile2", logoFileName2);
reportParameters.Add(reportParameter);
}
if (parasNames.Contains("LogoFile3"))
{
if (string.IsNullOrEmpty(logoFileName3))
{
logoFileName3 = "RptLogoDft3.jpg";
}
logoFileName3 = AppInfo.GetPath(AppInfo.AppPath.Report) + @"\Images\" + logoFileName3;
logoFileName3 = @"file:///" + logoFileName3.Replace(@"\", @"/");
ReportParameter reportParameter = new ReportParameter("LogoFile3", logoFileName3);
reportParameters.Add(reportParameter);
}
if (reportParameters.Count > )
{
this.RptvMain.LocalReport.SetParameters(reportParameters);
}
#endregion #region 处理Dataset
this.RptvMain.LocalReport.DataSources.Clear();
if (reportDSTable1 != null)
{
ReportDataSource rds1 = new ReportDataSource("DataSet1", reportDSTable1);
this.RptvMain.LocalReport.DataSources.Add(rds1);
}
if (reportDSTable2 != null)
{
ReportDataSource rds2 = new ReportDataSource("DataSet2", reportDSTable2);
this.RptvMain.LocalReport.DataSources.Add(rds2);
}
if (reportDSTable3 != null)
{
ReportDataSource rds3 = new ReportDataSource("DataSet3", reportDSTable3);
this.RptvMain.LocalReport.DataSources.Add(rds3);
}
if (reportDSTable4 != null)
{
ReportDataSource rds4 = new ReportDataSource("DataSet4", reportDSTable4);
this.RptvMain.LocalReport.DataSources.Add(rds4);
}
if (reportDSTable5 != null)
{
ReportDataSource rds5 = new ReportDataSource("DataSet5", reportDSTable5);
this.RptvMain.LocalReport.DataSources.Add(rds5);
} #endregion //定义子报表处理方法
if (hasSubReport)
{
subDSTable1 = subReportDSTable1;
subDSTable2 = subReportDSTable2;
RptvMain.LocalReport.SubreportProcessing += new SubreportProcessingEventHandler(LocalReport_SubreportProcessing);
} RptvMain.SetDisplayMode(DisplayMode.PrintLayout);
RptvMain.ZoomMode = ZoomMode.Percent;
RptvMain.ZoomPercent = ;
try
{
if (tPageSettings != null) RptvMain.SetPageSettings(tPageSettings);
if (tPrinterSettings != null) RptvMain.PrinterSettings = tPrinterSettings;
}
catch (Exception)
{ }
RptvMain.LocalReport.Refresh();
RptvMain.RefreshReport(); #region 直接打印定义
m_streams = new List<Stream>();
ReportPageSettings pageSettings = RptvMain.LocalReport.GetDefaultPageSettings(); decimal pgWidth = decimal.Round(HpString.NZ2Decimal(pageSettings.PaperSize.Width * 2.54 / ), );
decimal pgHeight = decimal.Round(HpString.NZ2Decimal(pageSettings.PaperSize.Height * 2.54 / ), );
decimal mgTop = decimal.Round(HpString.NZ2Decimal(pageSettings.Margins.Top * 2.54 / ), );
decimal mgLeft = decimal.Round(HpString.NZ2Decimal(pageSettings.Margins.Left * 2.54 / ), );
decimal mgRight = decimal.Round(HpString.NZ2Decimal(pageSettings.Margins.Right * 2.54 / ), );
decimal mgBottom = decimal.Round(HpString.NZ2Decimal(pageSettings.Margins.Bottom * 2.54 / ), ); string deviceInfo = "<DeviceInfo>" +
" <OutputFormat>EMF</OutputFormat>" +
" <PageWidth>"+ pgWidth + "cm</PageWidth>" +
" <PageHeight>" + pgHeight + "cm</PageHeight>" +
" <MarginTop>" + mgTop + "cm</MarginTop>" +
" <MarginLeft>" + mgLeft + "cm</MarginLeft>" +
" <MarginRight>" + mgRight + "cm</MarginRight>" +
" <MarginBottom>" + mgBottom + "cm</MarginBottom>" +
"</DeviceInfo>";
RptvMain.LocalReport.Render("Image", deviceInfo, CreateStream, out Warning[] warnings);
//==================================================开始打印
m_currentPageIndex = ;
if (m_streams == null || m_streams.Count == )
return;
//声明PrintDocument对象用于数据的打印
PrintDocument printDoc = new PrintDocument
{
DefaultPageSettings = RptvMain.GetPageSettings()
};
//如果没有指定打印机设置,则使用空字符串""来指定默认打印机
if (RptvMain.PrinterSettings == null)
{
printDoc.PrinterSettings.PrinterName = "";
}
else
{
printDoc.PrinterSettings = RptvMain.PrinterSettings;
}
//判断指定的打印机是否可用
if (!printDoc.PrinterSettings.IsValid)
{
MyMsg.Warning("没有找到指定的打印机:" + printDoc.PrinterSettings.PrinterName);
return;
}
printDoc.PrintPage += new PrintPageEventHandler(PrintPage);
//执行打印操作,Print方法将触发PrintPage事件。
printDoc.Print(); //释放资源
foreach (Stream stream in m_streams)
{
stream.Dispose();
stream.Close();
}
m_streams = null;
#endregion
} //声明一个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) {
//如果需要将报表输出的数据保存为文件,请使用FileStream对象。
Stream stream = new MemoryStream();
m_streams.Add(stream);
return stream;
} //用来记录当前打印到第几页了
private int m_currentPageIndex; #region 打印页面
private void PrintPage(object sender, PrintPageEventArgs ev)
{
m_streams[m_currentPageIndex].Position = ;
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.Graphics.FillRectangle(System.Drawing.Brushes.White, adjustedRect); ev.Graphics.DrawImage(pageImage, adjustedRect); m_streams[m_currentPageIndex].Close();
m_currentPageIndex++; ev.HasMorePages = (m_currentPageIndex < m_streams.Count);
}
#endregion
#endregion
C# RDLC报表不出现预览窗体直接输出到打印机的更多相关文章
- FastReport合并多份报表为一份预览打印
效果 比较简单,直接贴代码 //打印第一份报表 procedure TForm1.Button2Click(Sender: TObject); begin frxReport1.LoadFromFil ...
- C# WinForm RDLC报表不预览直接连续打印
用微软的RDLC报表直接打印不预览 直接上代码. //打印清单 System.Data.DataTable dt = print_QD(dr); ReportViewer rvDoc = new Re ...
- 根据 Power BI Desktop(预览版)中的报表页创建工具提示
根据 Power BI Desktop 中创建的报表页,可创建直观丰富的报表工具提示,这些提示在你将鼠标悬停在视觉对象上时显示. 通过创建用作工具提示的报表页,使自定义工具提示包含视觉对象.图像以及在 ...
- 通过程序预览Office文档
我承认,标题是夸大了,就是为了吸引注意力.这里只有Word文档和Excel文档的预览代码. Word://此部分来源:http://princed.mblogger.cn/posts/11885.as ...
- 关闭rdlc报表打印预览后,关闭客户端,抛出异常“发生了应用程序级的异常 将退出”
问题:关闭rdlc报表打印预览后,关闭客户端,抛出异常“发生了应用程序级的异常 将退出” 办法:在容纳ReportViewer的窗体后台代码中,添加如下代码即可 protected override ...
- RDLC 图形报表预览时 “本地报表处理期间错误”
在RDLC报表中有图形报表的导出和打印都正常,但预览时"本地报表处理期间错误",这是因为你设置的图形太宽已经超过默认的A4 纸的宽度,解决办法:报表页面的报表--->报表属性 ...
- rdlc报表的导出及预览时表头
感谢各路大神的博客,总结rdlc报表中目前用到的知识,积累. 一.rdlc报表PDF打印出现空白页 1.先至Report.rdlc報表設計的頁面,選擇功能表上的[報表]->[報表屬性],在[配置 ...
- Dynamics AX 2012 R2 SSRS报表在VS2010中预览没有数据
今天,Reinhard 在VS中制作SSRS报表,预览的时候发现显示不出数据. 仔细检查了数据处理环节和临时表里的数据,都发现没有问题. 用同事的账号登陆同样的开发环境,发现他的账号可以在VS中预览到 ...
- RM报表预览,只有固定的1个订单页面
明明选了多个记录,预览时,只显示最后一个. 原因: 主项数据的数据集选了报表自带的虚拟数据集了.
随机推荐
- CentOS 多版本python安装pip
首先配置环境 安装 zlib,zlib-devel,openssl,openssl-devel yum install zlib yum install zlib-devel yum install ...
- 【转】从Mac/OS和iOS开放源码浅谈UNIX家谱
阅读数:1245 苹果公司在各类开源项目中长期贡献着自己的力量,但其UNIX系统技术一直都属于闭源阵营(这一点可以从NUX OS阵营和家谱图中得到答案).然而,以封闭闻名的苹果公司,2017年国庆期间 ...
- [译]2D空间中使用四叉树Quadtree进行碰撞检测优化
操作系统:Windows8.1 显卡:Nivida GTX965M 开发工具:Unity2017.2.0f3 原文出处 : Quick Tip: Use Quadtrees to Detect Lik ...
- 使用Visual Studio进行 Android开发的十大理由
[原文发表地址]Top 10 reasons to use Visual Studio for C++ Android Development! Visual Studio: C++跨平台的移动解决方 ...
- 2017面向对象程序设计(Java)第六周学习总结
转眼间,2017年的法定节日已经休完,我们的java学习也已经进行了六周.下面,我将对上个礼拜的学习情况进行总结. 首先,是学习态度问题.虽然同学们已经从家或者各个旅游景点回来,但是心还是没回来.有同 ...
- BashProfile
[BashProfile] ~/.bash_profile. alias ll='ls -l -G -a' alias gp='grep --colour -R'
- 2015年传智播客JavaEE 第168期就业班视频教程11-导入配置文件
资源文件放在Source Folder目录下面,这个目录同样会编译到classes目录下 web.xml的 <listener> <listener-class>org.spr ...
- [Training Video - 7] [Database connection] Part 1
try, catch and finally in db connection Forming groovy connection string and obtaining Connection Ob ...
- Please ensure that adb is correctly located at 。。。。。。。。。。。。
遇到问题描述: 运行Android程序控制台输出 [2012-07-18 16:18:26 - ] The connection to adb is down, and a severe error ...
- 5 CrawlSpider操作
CrawlSpider 提问:如果想要通过爬虫程序去爬取"糗百"全站数据新闻数据的话,有几种实现方法? 方法一:基于Scrapy框架中的Spider的递归爬取进行实现(Reques ...