在ASP.NET C#中直接打印Crystal报表

ric*_*mer 5 c# asp.net crystal-reports

我使用SQL Server存储过程在Crystal Report中填充数据.我能够使用参数传递实现我想要的打印输出,并使用CR中的公式格式化每列.

在打印报告中,通常的过程是它将在Crystal Report Viewer中预览创建/生成的输出,然后,有打印,导出选项,它将首先将报告转换为PDF以继续打印功能

我想要的是当我点击打印按钮时,它会自动导致打印程序.

我是这个链接的答案如何使用C#Asp.net直接将水晶报告打印到客户端机器上

using oReportDocument.PrintToPrinter(1,true,0,0); 
Run Code Online (Sandbox Code Playgroud)

代码,其他人也建议填写页面init中的数据集,但我似乎迷失了如何做到这一点.

这是我目前正在使用的代码(通常的打印过程,它会引导您首先进入Crystal Report预览.

public partial class Report_MonthlySalesReportPrint : System.Web.UI.Page
{
    SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
    ReportDocument report = new ReportDocument();

    protected void Page_Load(object sender, EventArgs e)
    {
        con.Open();

        //Parameters to be passed as needed in formulas in Report
        string RP = Session["RP"].ToString();
        DateTime cms = Convert.ToDateTime(Session["CurrentMonthStart"].ToString());
        string Loc = Session["Location"].ToString();
        string MonthCurrent = Session["MonthCurrent"].ToString();
        string YearCurrent = Session["YearCurrent"].ToString();
        string MonthPrevious = Session["MonthPrevious"].ToString();
        string YearPrevious = Session["YearPrevious"].ToString();
        string MonthLastYear = Session["MonthLastYear"].ToString();
        string YearLastYear = Session["YearLastYear"].ToString();

        report.Load(Server.MapPath("MSRC.rpt"));

        CrystalReportViewer1.ReportSource = report;
        CrystalReportViewer1.ReuseParameterValuesOnRefresh = true;
        CrystalReportViewer1.DataBind();

        report.SetParameterValue(0, MonthLastYear);
        report.SetParameterValue(1, MonthCurrent);
        report.SetParameterValue(2, MonthPrevious);
        report.SetParameterValue(3, RP);
        report.SetParameterValue(4, Loc);
        report.SetParameterValue(5, cms);
        report.SetParameterValue(6, YearCurrent);
        report.SetParameterValue(7, YearPrevious);
        report.SetParameterValue(8, YearLastYear);

        report.PrintToPrinter(1, true, 0, 0);
        con.Close();
    }
}
Run Code Online (Sandbox Code Playgroud)

更新:

我只是需要更新以便澄清,以下接受的答案仅适用于服务器端.用户远程访问服务器时的含义,代码将无法正常工作.

ric*_*mer 3

1. 客户端打印

这是在基于 Web 的应用程序中进行打印的最理想方法,因为大多数用户肯定会远程访问服务器。

将此 JavaScript 代码放入水晶报表查看器所在的 .aspx 页面的 head 标记内。

     <script type="text/javascript">


                function Print() {
                      var dvReport = document.getElementById("dvReport");
                      var frame1 = dvReport.getElementsByTagName("iframe")[0];
                      if (navigator.appName.indexOf("Internet Explorer") != -1) {
                          frame1.name = frame1.id;
                          window.frames[frame1.id].focus();
                          window.frames[frame1.id].print();
                      }
                      else {
                          var frameDoc = frame1.contentWindow ? frame1.contentWindow : frame1.contentDocument.document ? frame1.contentDocument.document : frame1.contentDocument;
                          frameDoc.print();
                      }
                  }
            </script>
Run Code Online (Sandbox Code Playgroud)

在同一页面,在正文标记中放置此

  <body>
        <form id="form1" runat="server">
        <asp:Button ID="btnPrint" runat="server" Text="Print Directly" OnClientClick="Print()"></asp:Button>

          <div id="dvReport">
            <CR:CrystalReportViewer ID="CrystalReportViewer1" runat="server" AutoDataBind="true" ToolPanelView="None" EnableDatabaseLogonPrompt="false"  />


          </div>
        </form>
    </body>
Run Code Online (Sandbox Code Playgroud)

-- 记下那里的按钮。它应该位于包含水晶报表查看器的 div 之外。这肯定会起作用。请参阅有关此方法的完整讨论:http://www.aspsnippets.com/Articles/Print-Crystal-Report-on-Client-Side-on-Button-Click-using-JavaScript-in-ASPNet.aspx


2. 服务器端打印

这里最建议的答案是printToPrinter() Function。此方法是在服务器端完成的,因此,当您远程访问基于 Web 的应用程序/网站的服务器时,它会受到限制,除非客户端可以映射或可以访问服务器打印机。


请阅读此内容以获取更多信息:http://aspalliance.com/509_Automatically_Printing_Crystal_Reports_in_ASPNET.3