使用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();
        }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章