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个订单页面
明明选了多个记录,预览时,只显示最后一个. 原因: 主项数据的数据集选了报表自带的虚拟数据集了.
随机推荐
- ansible模块学习
ansible的功能: 模块化任务,调用特定的模块,完成特定的任务 基于python语言实现,由paramiko.pyyaml和jinja2三个模块构建 部署简单,agentless,ansible基 ...
- Go Methods and Interfaces
[Go Methods and Interfaces] 1.Go does not have classes. However, you can define methods on struct ty ...
- nice & renice
[nice & renice & getpriority & setpriority] 1.nice & renice 参考:http://man.ddvip.com/ ...
- ICG游戏:斐波那契博弈
描述: 有一堆个数为n(n>=2)的石子,游戏双方轮流取石子,规则如下: 1)先手不能在第一次把所有的石子取完,至少取1颗: 2)之后每次可以取的石子数至少为1,至多为对手刚取的石子数的2倍: ...
- 报错提示:mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in..的处理方式
PHP操作数据库的时候如果出现报错: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in.. ...
- ubuntu的命令行状态和图形化界面切换 (转)
1.ubuntu命令状态切换到图形化界面 startx 如果命令不能识别 执行 sudo apt-get install xinit 还需要提前安装桌面环境 比如 gnome 比如 KDE 安装方法 ...
- SpringBoot配置Druid
Druid是Java语言中最好的数据库连接池.Druid能够提供强大的监控和扩展功能.关于详细介绍可查看http://www.iteye.com/magazines/90 SpringBoot中集成D ...
- 马婕 2014MBA专硕考试 报刊选读 6(转)
http://blog.sina.com.cn/s/blog_3e66af4601016udh.html Protecting the weakest保护最弱势群体The recession may ...
- Android的/system/lib里加入自己的so库
执行下命令: 1 重新挂载/system目录,使之能读写:mount -o remount,rw /dev/null /system 2 修改这个文件的权限:chmod 777 /system 3 利 ...
- 一个用户管理的ci框架的小demo--转载
一个ci框架的小demo 最近在学习ci框架,作为一个初学者,在啃完一遍官方文档并也跟着官方文档的例程(新闻发布系统)做了一遍,决定在将之前练习PHP与MySQL数据库的用户管理系统再用ci框架实现一 ...