我也遇到过这样的问题。
我的解决方法是,把报表导出成EXCEL文件,再将其在EXCEL中打印。

解决方案 »

  1.   

    如何在程序里控制水晶报表的页边距(海波.NET)
    ——————————————————————————————————————
    概念和原理:
    1、PageMargins
    获取报表页边距。
    使用ApplyPageMargins方法应用更改。
    PrintOptions 成员,CrystalDecisions.CrystalReports.Engine 命名空间
    2、ApplyPageMargins
    应用通过PrintOptions.PageMargins属性设置的更改。 
    PrintOptions 公共实例方法,CrystalDecisions.CrystalReports.Engine 命名空间
    3、PageMargins 成员
    公共实例字段
    bottomMargin Int32。下边距的大小。 
    leftMargin Int32。左边距的大小。 
    rightMargin Int32。右边距的大小。 
    topMargin Int32。上边距的大小。 
    ——————————————————————————————————————
    事例代码:
    [Visual Basic] 
    Private Sub SetMargins(ByVal left As Integer, ByVal top As Integer, ByVal right As Integer, ByVal bottom As Integer)
       Dim margins As PageMargins   ' 获取 PageMargins 结构并设置
       '报表边距。
       margins = Report.PrintOptions.PageMargins
       margins.leftMargin = left
       margins.topMargin = top
       margins.rightMargin = right
       margins.bottomMargin = bottom   ' 应用页边距。
       Report.PrintOptions.ApplyPageMargins(margins)
    End Sub
    [C#] 
    private void SetMargins(int left, int top, int right, int bottom)
    {
       PageMargins margins;   // 获取 PageMargins 结构并设置
       //报表边距。
       margins = Report.PrintOptions.PageMargins;
       margins.leftMargin = left;
       margins.topMargin = top;
       margins.rightMargin = right;
       margins.bottomMargin = bottom;   // 应用页边距。
       Report.PrintOptions.ApplyPageMargins(margins);
    }
    [C++] 
    static void SetMargins(int left, int top, int right, int bottom)
    {
       PageMargins margins;   // 获取 PageMargins 结构并设置 
       //报表边距。
       margins = Report->PrintOptions->PageMargins;
       margins.leftMargin = left;
       margins.topMargin = top;
       margins.rightMargin = right;
       margins.bottomMargin = bottom;   // 应用页边距。
       Report->PrintOptions->ApplyPageMargins(margins);
    };
      

  2.   

    海波.NET
    问题:
    pagemargins.leftmargin 的單位是甚麼?可否改? 與cm的換算關係如何?
    ——————————————————————————————————————
    解决方案:
    1、單位是twips
    2、换算关系:
    点素(Twip)
    英寸(Inch) 
    点(Point)
    毫米(Millimeter) 
    象素(Pixel,这与屏幕分辨率有关)
    厘米(Centimeter)1英寸= 1440 Twips
    1 厘米 = 567 Twips
    1 英寸 = 72 Points
      

  3.   

    海波.NET
    问题:Crystal Report的打印的时候,如何直接打印而不打开打印设置窗口?
    ——————————————————————————————————————
    解决方案:
    ReportDocument.PrintToPrinter 方法
    ReportDocument 类 | ReportDocument 成员 | CrystalDecisions.CrystalReports.Engine 命名空间
    要求
    命名空间:CrystalDecisions.CrystalReports.Engine 
    平台:Windows 98,Windows NT 4.0,Windows Millennium Edition,Windows 2000
    程序集:CrystalDecisions.CrystalReports.Engine使用 PrintOptions.PrinterName 属性将报表的指定页输出到选定的打印机上。如果未选择打印机,则将使用报表中指定的默认打印机。[Visual Basic] 
    Public Overridable Sub PrintToPrinter(ByVal nCopies As Integer, ByVal collated As Boolean, ByVal startPageN As Integer, ByVal endPageN As Integer)
    [C#] 
    public virtual void PrintToPrinter (int nCopies , bool collated , int startPageN , int endPageN );
    [C++] 
    public virtual void PrintToPrinter (int nCopies , bool collated , int startPageN , int endPageN );
    参数
    nCopies 
    指明要打印的份数。 
    collated 
    指明是否逐份打印。 
    startPageN 
    指明要打印的第一页。 
    endPageN 
    指明要打印的最后一页。 
    备注
    若要打印所有页,请将 startPageN 参数和 endPageN 参数设置为零。 示例
    下面的示例设置报表的页边距,选择打印机,并打印报表。[Visual Basic] 
    Private Sub PrintReport(ByVal printerName As String)
       Dim margins As PageMargins   ' 获取 PageMargins 结构并设置
       ' 报表边距。
       margins = Report.PrintOptions.PageMargins
       margins.bottomMargin = 350
       margins.leftMargin = 350
       margins.rightMargin = 350
       margins.topMargin = 350
       ' 应用页边距。
       Report.PrintOptions.ApplyPageMargins(margins)   ' 选择打印机。
       Report.PrintOptions.PrinterName = printerName' 打印报表。将 startPageN 和 endPageN
       '参数设置为 0 表示打印所有页。
       Report.PrintToPrinter(1, False, 0, 0)
    End Sub
    [C#] 
    private void PrintReport(string printerName)
    {
       PageMargins margins;   // 获取 PageMargins 结构并设置
       //报表的边距。
       margins = Report.PrintOptions.PageMargins;
       margins.bottomMargin = 350;
       margins.leftMargin = 350;
       margins.rightMargin = 350;
       margins.topMargin = 350;
       // 应用页边距。
       Report.PrintOptions.ApplyPageMargins(margins);   // 选择打印机。
       Report.PrintOptions.PrinterName = printerName;   // 打印报表。将 startPageN 和 endPageN 
       // 参数设置为 0 表示打印所有页。
       Report.PrintToPrinter(1, false,0,0);
    }
    [C++] 
    void PrintReport(String* printerName)
    {
       PageMargins margins;   // 获取 PageMargins 结构并设置
       //报表的边距。
       margins = Report->PrintOptions->PageMargins;
       margins.bottomMargin = 350;
       margins.leftMargin = 350;
       margins.rightMargin = 350;
       margins.topMargin = 350;
       // 应用页边距。
       Report->PrintOptions->ApplyPageMargins(margins);   // 选择打印机。
       Report->PrintOptions->PrinterName = printerName;   // 打印报表。将 startPageN 和 endPageN 
       // 参数设置为 0 表示打印所有页。
       Report->PrintToPrinter(1, false,0,0);
    };