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