c#直接横向打印LocalReport

环境说明:VS2012,打印机型号:Zebra  ZP Series-200 dpi

 

申明变量:

private int m_currentPageIndex;
private List<Stream> m_streams;

 

private PaperSize _paperSize;

private ReportPageSettings _reportPageSettings;

打印按钮代码:

Public void Print(PaperSize paperSize,ReportPageSettings settings,string printerName)
{

_paperSize= paperSize;

_reportPageSettings=settings;
RenderReport();
m_currentPageIndex = 0;
Print(printerName);
}

 

private void RenderReport()
{
string deviceInfo =
"<DeviceInfo>" +
" <OutputFormat>EMF</OutputFormat>" +
string.Format(" <PageWidth>{0}in</PageWidth>", _paperSize.Height/100) +
string.Format(" <PageHeight>{0}in</PageHeight>", _paperSize.Width/100) +
string.Format(" <MarginTop>0in</MarginTop>", _reportPageSettings.Margins.Top / 100) +
string.Format(" <MarginLeft>0in</MarginLeft>", _reportPageSettings.Margins.Left / 100) +
string.Format(" <MarginRight>0in</MarginRight>", _reportPageSettings.Margins.Right / 100) +
string.Format(" <MarginBottom>0in</MarginBottom>", _reportPageSettings.Margins.Bottom / 100) +
"</DeviceInfo>";
Warning[] warnings;
m_streams = new List<Stream>();
//将报表的内容按照deviceInfo指定的格式输出到CreateStream函数提供的Stream中。
this.rptViewer.LocalReport.Render("Image", deviceInfo, CreateStream, out warnings);

foreach (Stream stream in m_streams)
stream.Position = 0;
}

 

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 void Print(string printName)
{
if (m_streams == null || m_streams.Count == 0)
return;

//声明PrintDocument对象用于数据的打印
PrintDocument printDoc = new PrintDocument();

//指定需要使用的打印机的名称,使用空字符串""来指定默认打印机
printDoc.PrinterSettings.PrinterName = printName;
printDoc.DefaultPageSettings.Landscape = true;
printDoc.DefaultPageSettings.Margins = _reportPageSettings.Margins;
printDoc.DefaultPageSettings.PaperSize = _paperSize;
//判断指定的打印机是否可用
if (!printDoc.PrinterSettings.IsValid)
{

  throw new InvalidPrinterException(_reportPageSettings);

  return;

}

//声明PrintDocument对象的PrintPage事件,具体的打印操作需要在这个事件中处理。
printDoc.PrintPage += new PrintPageEventHandler(PrintPage);
printDoc.EndPrint += printDoc_EndPrint;
//执行打印操作,Print方法将触发PrintPage事件。
printDoc.Print();
}

 

private void PrintPage(object sender, PrintPageEventArgs ev)
{
Metafile pageImage = new Metafile(m_streams[m_currentPageIndex]);

//这里的Graphics对象实际指向了打印机
ev.Graphics.DrawImage(pageImage,ev.PageBounds);
//pageImage.Save(string.Format("{0}.jpg", m_currentPageIndex));

m_currentPageIndex++;
//设置是否需要继续打印
ev.HasMorePages = (m_currentPageIndex < m_streams.Count);
}

private void printDoc_EndPrint(object sender, PrintEventArgs e)
{
if (m_streams != null)
{
foreach (Stream stream in m_streams)
stream.Close();

m_streams = null;
}
}

 

转载于:https://www.cnblogs.com/my_sql/archive/2013/04/08/3007119.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值