是你发我邮件了?
批量我没有到过,我也查了一下,有关案例不知道适合不适合你
Code
现有环境条件及客户需求:
B/S系统中水晶报表单个打印已经完成,现在客户要求在现有基础上实现报表的批量打印,即选择多条记录点击"打印"按钮后即可以一次性打印所有报表。
分析与思考:
1.B/S中要实现批量打印首先排除传统的报表预览打印,只有通过循环报表关键字生成报表后直接打印,但C#中PrintToPrinter方法只能打印至服务器端打印机,通过在服务器端安装各客户端打印机驱动并提供用户选择打印机界面即可解决问题。
2.如果选择报表过多,循环势必过长,这样用户等待时间就长,为了让用户感觉等待时间为0可用后台进程处理,即把循环打印的方法放入新创建的进程中。
开发过程中注意到有关事项:
1.创建报表后直接打印至服务端
ReportDocument rDoc = 创建的报表;
rDoc.PrintOptions.PrinterName = 选择打印机名称;
rDoc.PrintToPrinter(1,false,0,999);
2.枚举服务端打印机列表
private void getPrintList()
{
if(System.Drawing.Printing.PrinterSettings.InstalledPrinters.Count == 0)
{
this.Alert("服务器没有安装打印机!");
return;
}
PrintDocument pDoc = new PrintDocument();
string strDefaultPrinter = pDoc.PrinterSettings.PrinterName;//获取默认打印机
foreach(string strPrinter in PrinterSettings.InstalledPrinters)
{
lbxPrintList.Items.Add(strPrinter);
if(strPrinter == strDefaultPrinter)
{
lbxPrintList.SelectedValue = strPrinter;
}
}
}
3.创建线程
1) 线程中方法要用到的参数必须通过Session获取
2) HttpContext.Current方法在线程中的方法中无效,须在创建线程前调用(通过创建新类或Session传递)
Thread trd = new Thread(new ThreadStart(PintTask));
CSDN链接:
http://topic.csdn.net/u/20080408/11/7ce748c9-a791-4683-b1e9-5a066dc972a7.html
水晶报表虽然有批量报表打印功能,但是对于一次批量打印出多张不同报表,同一张报表采用不同参数多次打印等方式,均需经过单独编程才能实现;一些较简单的分片式报表打印仅支持纵向分页,不支持横向分页;不支持分栏打印;不支持一纸多页打印;不支持末页不足空行;支持缩放;支持精确打印;总体比较下来,水晶的这一功能没有finereport好用