首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

vs2010 winform中rdlc 报表怎么直接打印

2013-12-19 
vs2010 winform中rdlc 报表如何直接打印谁有直接打印的代码?因为我要打印发票, 如何设置走纸问题, 现在总

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();

热点排行