建议用水晶报表的导出功能进行打印...
---------------------------------------------客户端报表打印的最常用方法是用户将报表导出为可以从他们的客户机打印的格式。 要为用户设置导出选项,请在 Web 窗体中添加一个导出按钮。当用户单击此按钮时,报表导出到 Web 服务器并且将导出文件传送给客户端机器。用户使用他或她的计算机上可以读取导出的文件格式的应用程序打印该文件。 Crystal Reports 提供了导出为几种不同格式的能力,包括 Adobe PDF 和 Microsoft Word。 导出为 PDF下面的示例演示如何将报表导出为 PDF 格式并将其发送到客户端机器。 注意   ASPNET 帐户必须具有写入将报表导出到的文件夹的权限。如果该文件夹没有至少设置更改权限,您将会收到一条错误消息,告诉您临时报表文件出错。出现这条错误消息是因为 ASPNET 帐户在导出时创建了一个临时报表文件,但是在试图将该报表文件写入到导出文件夹时由于权限不足而失败。手动创建的文件夹可能不会自动将完全控制赋予 ASPNET 帐户。[Visual Basic] 
' 定义 Crystal Reports 变量
Dim crReportDocument As ReportDocument
Dim crExportOptions As ExportOptions
Dim crDiskFileDestinationOptions As DiskFileDestinationOptions
Dim Fname as String' 以下代码可以直接放在窗体的构造函数中对 
'  InitializeComponent() 的调用之后,或者放在 ,
'  Button_Click 事件内部,在该事件中,客户端使用该按钮
'  来获取报表的可打印副本。crReportDocument = New ReportDocument()
' 以下代码行加载 
'  示例报表“Chart.rpt”
crReportDocument.Load ("C:\Program Files\Microsoft Visual Studio .NET 2003\Crystal Reports\Samples\Reports\Feature Examples\Chart.rpt")Fname = "c:\exports\" & Session.SessionID.ToString & ".pdf"
crDiskFileDestinationOptions = New DiskFileDestinationOptions()
CrDiskFileDestinationOptions.DiskFileName = Fname
crExportOptions = crReportDocument.ExportOptions
With crExportOptions
   .DestinationOptions = crDiskFileDestinationOptions
   .ExportDestinationType = ExportDestinationType.DiskFile
   .ExportFormatType = ExportFormatType.PortableDocFormat
End With
crReportDocument.Export()
' 以下代码将 pdf 文件写入 
'  客户端浏览器。
Response.ClearContent()
Response.ClearHeaders()
Response.ContentType = "application/pdf"
Response.WriteFile(Fname)
Response.Flush()
Response.Close()' 从磁盘删除导出的文件
System.IO.File.Delete(Fname)

解决方案 »

  1.   

    在 Web 上打印水晶报表的四种方法
    如果想使用户能够打印在 Web 上访问的整个多页报表,您有下列选项: 1、使用Web 窗体 Viewer 工具栏上的“打印”按钮将报表导出为 PDF。 2、使用Web 窗体 Viewer 工具栏上的“导出”按钮,导出报表为可以由客户端的现有应用程序打印的格式。 3、使用PrintToPrinter 方法从服务器打印报表。 4、将报表作为一个连续的页提供以通过 Internet Explorer 浏览器在客户端启用打印。 如果用户无权访问打印导出的报表所需的应用程序,并且服务器端打印存在安全性或访问权限问题,您可能需要使用户能够从他们的浏览器打印报表。此方法将整个报表作为一个连续的页显示在 Web 窗体 Viewer 控件中,因而能够使用浏览器的打印功能。 在应用程序中,可以在现有 Web 窗体 Viewer 旁边添加一个按钮,该按钮可以将客户端重定向到新的、在浏览器中将整个报表显示为一个连续页的 Web 窗体 Viewer。可以对第二个窗体上的查看器进行格式化,以便禁用组树和工具栏,并将查看器的 SeparatePages 属性设置为 False。 注意   这种打印方法有一个局限,即无法控制页眉、页脚和分页符的定位。
    crReportDocument = New Income_Statement()
    CrystalReportViewer1.ReportSource = crReportDocument
    CrystalReportViewer1.SeparatePages = False
    CrystalReportViewer1.DisplayGroupTree = False
    CrystalReportViewer1.DisplayToolbar = False
      

  2.   

    调用下面函数,将CryReport换成你水晶报表文件名,Report为水晶报表实例,OptionStr为操作类型,可选"Portable Document (PDF)"(用pdf打印) "MS Word (DOC)"(用word打印)
    private void ExportReport(CryReport Report,string OptionStr)
    {

    string ExportPath;

    ExportPath = Request.PhysicalApplicationPath + "Exported\\";
    if (Directory.Exists(ExportPath) == false) Directory.CreateDirectory(Request.PhysicalApplicationPath + "Exported\\");    
    ReportDocument crReportDocument = (ReportDocument)Report;
    DiskFileDestinationOptions crDiskFileDestinationOptions = new DiskFileDestinationOptions();
    ExportOptions crExportOptions = crReportDocument.ExportOptions; switch(OptionStr)
    {
    case "Portable Document (PDF)":
    crDiskFileDestinationOptions.DiskFileName = ExportPath + "PortableDoc.pdf";
    crExportOptions.DestinationOptions = crDiskFileDestinationOptions;
    crExportOptions.ExportDestinationType = ExportDestinationType.DiskFile;
    crExportOptions.ExportFormatType = ExportFormatType.PortableDocFormat;
    break;
    case "MS Word (DOC)":
    crDiskFileDestinationOptions.DiskFileName = ExportPath + "Word.doc"; crExportOptions.ExportDestinationType = ExportDestinationType.DiskFile;
    crExportOptions.ExportFormatType = ExportFormatType.WordForWindows;
    crExportOptions.DestinationOptions = crDiskFileDestinationOptions;
    break;
    }

    try
    {
    // Export the report
    crReportDocument.Export();
    crReportDocument.Close();
    Response.ClearContent();
    Response.ClearHeaders();
    switch(OptionStr)
    {
    case "Portable Document (PDF)":
    Response.ContentType="application/pdf";
    Response.WriteFile(ExportPath + "PortableDoc.pdf");
    break;
    case "MS Word (DOC)":
    Response.ContentType="application/msword";
    Response.WriteFile(ExportPath + "Word.doc");
    break;
    }  Response.Flush();
    Response.Close();
    }
    catch (Exception err)
    {
    Response.Write("<BR>");
    Response.Write(err.Message.ToString());
    }
    }