110,536
社区成员
发帖
与我相关
我的任务
分享
// 打印
protected void PrintDialog()
{
PrintDocument printDoc = new PrintDocument();
printDoc.PrintController = new System.Drawing.Printing.StandardPrintController();
printDoc.DocumentName = "报告-" + this.ReportNo;
if (PrinterName != "") // 如指定过打印机,则用指定的,一般使用默认打印机
printDoc.PrinterSettings.PrinterName = PrinterName;
if (!printDoc.PrinterSettings.IsValid)
{
string msg = String.Format("打印机不可用!! \"{0}\".", PrinterName);
Console.WriteLine(msg);
ErrMessage = msg;
return;
}
printDoc.PrintPage += new PrintPageEventHandler(PrintPage);
try
{
printDoc.Print(); // 开始打印
// ...
}
catch (Exception e)
{
if (!e.Message.Contains("成功")) // 对于提示"操作成功完成"的提醒,不做处理!
MessageBox.Show("现在不能打印," + e.Message);
}
}
// 页打印事件处理
protected void PrintPage(object sender, PrintPageEventArgs ev)
{
Metafile pageImage = new Metafile(m_streams[m_currentPageIndex]); // 根据数据流,生成图形数据
ev.Graphics.DrawImage(pageImage, ev.PageBounds);
m_currentPageIndex++;
ev.HasMorePages = (m_currentPageIndex < m_streams.Count);
}
protected void PrintPage(object sender, PrintPageEventArgs ev)
{
Metafile pageImage = new Metafile(m_streams[m_currentPageIndex]); // 根据数据流,生成图形数据
// 保存到临时文件并终止打印事件
pageImage.Save(@"c:\Swap\metaFile_caach.bmp");
ev.Cancel = true;
// ev.Graphics.DrawImage(pageImage, ev.PageBounds);
m_currentPageIndex++;
ev.HasMorePages = (m_currentPageIndex < m_streams.Count);
}
// 设置报告的设备信息
protected void SetDeviceInfo(LocalReport report)
{
Warning[] warnings;
m_streams = new List<Stream>();
m_currentPageIndex = 0;
try
{
report.Render("Image", DeviceInfo, CreateStream, out warnings);
}
catch (Exception e)
{
ErrMessage = e.Message + e.InnerException.Message;
System.Windows.Forms.MessageBox.Show(ErrMessage);
}
foreach (Stream stream in m_streams)
stream.Position = 0;
}
// 构建流
protected Stream CreateStream(string name, string fileNameExtension, Encoding enfcoding, string mimeType, bool willSeek)
{
Stream stream;
m_currentPageIndex++;
stream = new FileStream(ReportNo + "-" + m_currentPageIndex.ToString() + ".emf", FileMode.OpenOrCreate);
m_streams.Add(stream);
return stream;
}
// 打印报告
protected void PrintDialog()
{
if (m_streams == null || m_streams.Count == 0)
return;
m_currentPageIndex = 0; // 从首页开始打印
PrintDocument printDoc = new PrintDocument();
printDoc.PrintController = new System.Drawing.Printing.StandardPrintController();
printDoc.DocumentName = "报告-" + ReportNo + "-" + SpecimenXhSet;
if (PrinterName != "") // 如指定过打印机,则用指定的,一般使用默认打印机
printDoc.PrinterSettings.PrinterName = PrinterName;
if (!printDoc.PrinterSettings.IsValid)
{
string msg = String.Format("打印机不可用!! \"{0}\".", PrinterName);
Console.WriteLine(msg);
ErrMessage = msg;
return;
}
printDoc.PrintPage += new PrintPageEventHandler(PrintPage);
try
{
printDoc.Print(); // 开始打印
Thread.Sleep(500);
foreach (Stream stream in m_streams) // 使用完后,一定要关闭文件流对象!!
{
stream.Close();
}
if (System.IO.File.Exists(ReportNo + ".emf")) // 删除报告图像文件名!
File.Delete(ReportNo + ".emf");
for (int j = 0; j <= m_currentPageIndex; j++)
{
if (System.IO.File.Exists(ReportNo + "-" + j.ToString() + ".emf")) // 删除报告图像文件名!
File.Delete(ReportNo + "-" + j.ToString() + ".emf");
}
}
catch (Exception e)
{
if (!e.Message.Contains("成功")) // 对于提示"操作成功完成"的提醒,不做处理!
MessageBox.Show("现在不能打印," + e.Message);
}
}
// 页打印事件处理
protected void PrintPage(object sender, PrintPageEventArgs ev)
{
Metafile pageImage = new Metafile(m_streams[m_currentPageIndex]); // 根据数据流,生成图形数据
ev.Graphics.DrawImage(pageImage, ev.PageBounds);
m_currentPageIndex++;
ev.HasMorePages = (m_currentPageIndex < m_streams.Count);
}