读书人

vs2010 winform中rdlc 报表怎么直接打

发布时间: 2013-12-19 00:33:34 作者: rapoo

vs2010 winform中rdlc 报表如何直接打印
谁有直接打印的代码?

因为我要打印发票, 如何设置走纸问题, 现在总是跑两页.第二页是空的....
[解决办法]
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing.Imaging;
using System.IO;
using System.Drawing.Printing;
using Microsoft.Reporting.WinForms;

namespace DLAFMS.RVP {
public class ReportPrintImpl {
private List<Stream> m_streams;
private int m_currentPageIndex;
public int CurrentPageIndex {
get { return m_currentPageIndex; }
set { m_currentPageIndex = value; }
}
private PrintDocument pDocument;
public PrintDocument PDocument {
get { return pDocument; }
set { pDocument = value; }
}

public ReportPrintImpl() {
pDocument = new PrintDocument();
pDocument.PrintPage += new PrintPageEventHandler(pDocument_PrintPage);
}

/// <summary>
/// 呈现报表
/// </summary>
/// <param name="report">报表</param>
public void Export(LocalReport report) {
StringBuilder deviceInfo = new StringBuilder();
deviceInfo.Append("<DeviceInfo>")
.Append(" <OutputFormat>EMF</OutputFormat>")
.Append(" <PageWidth>8.5in</PageWidth>")
.Append(" <PageHeight>11in</PageHeight>")
.Append(" <MarginTop>0.1in</MarginTop>")
.Append(" <MarginLeft>0.2in</MarginLeft>")
.Append(" <MarginRight>0.1in</MarginRight>")
.Append(" <MarginBottom>0.1in</MarginBottom>")
.Append("</DeviceInfo>");

Warning[] warnings;
m_streams = new List<Stream>();
report.Render("Image", deviceInfo.ToString(), 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) {
Stream stream = new FileStream(name + "." + fileNameExtension, FileMode.Create);
m_streams.Add(stream);


return stream;
}

private void pDocument_PrintPage(object sender, PrintPageEventArgs e) {
Metafile pageImage = new Metafile(m_streams[m_currentPageIndex]);
e.Graphics.DrawImage(pageImage, 0, 0);
m_currentPageIndex++;
e.HasMorePages = (m_currentPageIndex < m_streams.Count);
}
}
}
调用如下所示:
ReportForm frmReport = new ReportForm();//报表窗体
ReportInitImpl report = new ReportInitImpl();//填充报表数据的类,换成你自己的
ReportPrintImpl reportPrint = new ReportPrintImpl();//直接打印的类
report.InitReportData(frmReport.rv_License, license);//将数据填充到报表中,换成你自己的
frmReport.Show();
frmReport.rv_License.SetDisplayMode(DisplayMode.PrintLayout);
frmReport.rv_License.ZoomMode = ZoomMode.Percent;
reportPrint.CurrentPageIndex = 0;
reportPrint.Export(frmReport.rv_License.LocalReport);
reportPrint.PDocument.Print();
frmReport.Close();

读书人网 >C#

热点推荐