使用PrintDocument打印reportview的数据,可实现打印当前页功能

List<Stream> m_streams;
        private int m_currentPageIndex;
        private void Export(LocalReport report)
        {
            if (m_streams != null)
            {
                for (int i = 0; i < m_streams.Count; i++)
                {
                    m_streams[i].Close();
                }
                m_streams.Clear();
                m_streams = null;
            }
            string deviceInfo = @"<DeviceInfo>" + " <OutputFormat>EMF</OutputFormat>" + "</DeviceInfo>";
            Warning[] warnings;
            m_streams = new List<Stream>();
            report.Render("Image", deviceInfo, CreateStream, out warnings);
        }
        private Stream CreateStream(string name, string fileNameExtension, Encoding encoding, string mimeType, bool willSeek)
        {
            //Stream stream = new FileStream(name + "." + fileNameExtension, FileMode.Create);
            Stream stream = new MemoryStream();
            m_streams.Add(stream);
            return stream;
        }
        private void Print()
        {
            try
            {
                if (m_streams == null || m_streams.Count == 0)
                {
                    return;
                }
                PrintDocument printDoc = new PrintDocument();
                //设置默认打印机名称
                //printDoc.PrinterSettings.PrinterName = "";
                //if (!printDoc.PrinterSettings.IsValid)
                //{
                //    MessageBox.Show("找不到打印机");
                //    return;
                //}
                printDoc.PrintPage += new PrintPageEventHandler(PrintPage);
                printDoc.Print();
            }
            catch
            {
            }
        }

        void PrintPage(object sender, PrintPageEventArgs e)
        {
            m_streams[m_currentPageIndex].Position = 0;
            Metafile pageImage = new Metafile(m_streams[m_currentPageIndex]);
            System.Drawing.Rectangle adjustedRect = new Rectangle(
                e.PageBounds.Left - (int)e.PageSettings.HardMarginX,
                e.PageBounds.Top - (int)e.PageSettings.HardMarginY,
                e.PageBounds.Width,
                e.PageBounds.Height);
            e.PageSettings.Landscape = false;
            e.Graphics.DrawImage(pageImage, adjustedRect);
            m_streams[m_currentPageIndex].Close();
            m_currentPageIndex++;
            //设置是否继续打印
            e.HasMorePages = (m_currentPageIndex < m_streams.Count);
        }

private void button1_Click(object sender, EventArgs e)
        {
            Export(reportview1);
            Print();
        }

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值