解决crystal report 的打印次数限制

遇到这个问题的原因打印次数已经达到了注册表HKEY_LOCAL_MACHINE/SOFTWARE/Crystal Decisions/10.2/Report Application Server/Server 中的PrintJobLimit中设置的75。 

解决方法:重启服务器,使打印计数归零。我们可以在程序中加入一个堆栈,每当加载一个报表时入栈,当堆栈中的报表数目达到注册表中的报表最大限制时,清空堆栈。另外在页面Unload时,释放报表资源。代码如下:

 
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using CrystalDecisions;
using CrystalDecisions.CrystalReports;
using CrystalDecisions.CrystalReports.Engine;
public class ReportFactory
{
    private static int MAX_PRINT = 75;
    protected static Queue reportQueue = new Queue();
    protected static ReportDocument  CreateReport(Type reportclass)
    {
        object report = Activator.CreateInstance(reportclass);
        reportQueue.Enqueue(report);
        return (ReportDocument)report;
    }
    public static ReportDocument GetReport(Type reportclass)
    {
        if (reportQueue.Count >= MAX_PRINT)
        {
            for (int i = 1; i <= MAX_PRINT; i++)
            {
                ((ReportDocument)reportQueue.Dequeue()).Close();
                ((ReportDocument)reportQueue.Dequeue()).Dispose();
            }
        }
        return CreateReport(reportclass);
    }
}
 在加载报表的页面:
    protected void Page_Load(object sender, EventArgs e)
    {
        myReport = new ReportDocument();
        myReport = ReportFactory.GetReport(myReport.GetType());
    }
 
    protected void Page_Unload(object sender, EventArgs e)
    {
        if (myReport != null)
        {
            myReport.Close();
            myReport.Dispose();
        }
    }

你可能感兴趣的:(c#,crystalreport,asp.net,maximum,report,processing)