2015-04-07 3 views
5

मैं SQL सर्वर संग्रहीत प्रक्रियाओं का उपयोग कर क्रिस्टल रिपोर्ट में डेटा पॉप्युलेट कर रहा हूं। मैं सीआर में सूत्र का उपयोग कर प्रत्येक कॉलम को गुजरने और स्वरूपित पैरामीटर का उपयोग करके अपने वांछित मुद्रण आउटपुट को प्राप्त करने में सक्षम था।सीधे क्रिस्टल रिपोर्ट प्रिंट करें एएसपी.NET सी #

प्रिंटिंग रिपोर्ट में, सामान्य प्रक्रिया यह क्रिस्टल रिपोर्ट व्यूअर में बनाए गए/जेनरेट किए गए आउटपुट का पूर्वावलोकन करेगी, फिर प्रिंट, निर्यात विकल्प होंगे जहां प्रिंटिंग कार्यों पर आगे बढ़ने के लिए रिपोर्ट को पीडीएफ में परिवर्तित कर दिया जाएगा

जब मैं प्रिंट बटन पर क्लिक करता हूं, तो मैं स्वचालित रूप से प्रिंटिंग प्रक्रियाओं का नेतृत्व करूंगा।

मैं जवाब How to print crystal report directly to a client machine using C# Asp.net

using oReportDocument.PrintToPrinter(1,true,0,0); 

कोड के लिए इस लिंक को भूमिका में थे, दूसरों को भी पेज init में डाटासेट भरने के लिए सुझाव दे, लेकिन मैं इसे कैसे करना है पर खो लग रहा हूँ। ।

यह मेरा वर्तमान में काम कर कोड (सामान्य मुद्रण प्रक्रिया है, जहां यह आप क्रिस्टल रिपोर्ट पूर्वावलोकन करने के लिए पहले का नेतृत्व करेंगे है

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(); 
    } 
} 

UPDATED: इस स्पष्टीकरण के प्रयोजनों के लिए अद्यतन करने के लिए

मैं बस जरूरत है कि स्वीकार किए जाते हैं जवाब नीचे सर्वर साइड पर केवल काम करेंगे। जब उपयोगकर्ता दूर से सर्वर तक पहुँच रहा है, कोड काम नहीं करेगा मतलब।

उत्तर

2

1. क्लाइंट साइड मुद्रण

यह एक वेब आधारित आवेदन में मुद्रण में सबसे आदर्श विधि अधिकांश उपयोगकर्ताओं को निश्चित रूप से हो सकता है दूर से सर्वर एक्सेस करने के रूप में है।

इस जावास्क्रिप्ट कोड को अपने .aspx पृष्ठ के मुख्य टैग के अंदर रखें जहां क्रिस्टल रिपोर्ट दर्शक रहता है। वहाँ में बटन के ध्यान में रखना -

 <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> 
एक ही पृष्ठ के साथ

, शरीर टैग में इस

<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> 

डाल दिया। यह उस div के बाहर होना चाहिए जो क्रिस्टल रिपोर्ट व्यूअर को संलग्न करता है। यह निश्चित रूप से काम करेगा। इस पद्धति पर पूरी चर्चा देखें: http://www.aspsnippets.com/Articles/Print-Crystal-Report-on-Client-Side-on-Button-Click-using-JavaScript-in-ASPNet.aspx


2. सर्वर साइड मुद्रण

सबसे सुझाव दिया जवाब यहां printToPrinter() समारोह है।यह विधि सर्वर-साइड पर की जाती है, इसलिए, यह तब तक सीमित है जब आप अपने वेब-आधारित एप्लिकेशन/वेबसाइट के सर्वर तक दूरस्थ रूप से पहुंच रहे हैं, जब तक कि क्लाइंट सर्वर प्रिंटर के साथ मैप या एक्सेस न हो।


कृपया अधिक जानकारी के लिए इस पढ़ें: http://aspalliance.com/509_Automatically_Printing_Crystal_Reports_in_ASPNET.3

2
 using System.Drawing.Printing; 
     using Crystal Decisions.CrystalReports.Engine; 
     using Crystal Decisions.Shared; 
     protected void Page_Load(object sender, EventArgs e) 
     { 
     void(); 
     } 
     public void() 
     { 
     try 
     { 
     ReportDocument crystalReport = new ReportDocument(); 
     crystalReport.Load(Server.MapPath("~/CrystalReport2.rpt")); 
     DataSet dsCustomers = GetData("select * from visitor_details where id ='" + Session["sessionvid"] + "' and plant ='" + Session["sessionplant"] + "'"); 

     DataTable dataTable = dsCustomers.Tables[0]; crystalReport.Database.Tables["visitor_details"].SetDataSource((DataTable)dataTable); 
      CrystalReportViewer2.ReportSource = crystalReport; 
      CrystalReportViewer2.Zoom(100); 
      //crystalReportViewer1.ExportReport() ; 
      CrystalReportViewer2.RefreshReport(); 
      crystalReport.PrintOptions.PrinterName = GetDefaultPrinter(); 
      crystalReport.PrintToPrinter(1, false, 0, 0); 
     } 
     catch 
     { 
      Response.Write("<script LANGUAGE='JavaScript' >alert('connect printer settings')</script>"); 
     } 

}

+0

हाय @balajibran, हम लगभग कि मैं क्या पोस्ट किया है के आधार पर एक ही कोड है। केवल अंतर यह है कि मैं डेटासेट और डेटाटेबल का उपयोग नहीं करता हूं। मैंने crystalReport.PrintToPrinter (1, झूठी, 0, 0) डालकर आपके सुझाव का पालन किया; केवल मेरे वर्तमान कोड में, लेकिन कुछ भी नहीं बदला है, यह अभी भी क्रिस्टल रिपोर्ट व्यूअर का पूर्वावलोकन कर रहा है। – rickyProgrammer

+0

अच्छी खबर, यह पहले से ही मेरे लिए काम करता है, थोड़ी देर पहले एकमात्र समस्या यह है कि मैं सही प्रिंटर से कनेक्ट नहीं था। हालांकि, मेरे पास कुछ और प्रश्न हैं, मैं इसे कैसे सेट कर सकता हूं जहां प्रिंटर डायलॉग बॉक्स में तुरंत प्रिंट करने से पहले दिखाया जा सकता है, मेरा मतलब है कि मुझे पेपर आकार सेट करने और आमतौर पर प्रिंट करने वाले उपयोगकर्ता को सूचित करने की आवश्यकता है। – rickyProgrammer

+0

मैंने इस के लिए वोट दिया है क्योंकि यह समस्या का उत्तर देता है, हालांकि मैं जो चाहता था वह प्रिंटर डायलॉग को प्रिंटर का चयन करने के लिए पहले पॉप अप करना चाहिए, क्योंकि हमारे द्वारा उपयोग किए जाने वाले कोड के साथ, यह सचमुच रिपोर्ट को सीधे और तत्काल प्रिंट करता है। मुझे अधिक लचीली मुद्रण विकल्पों के लिए एक प्रिंट संवाद बॉक्स की आवश्यकता है। मैं उसे कैसे कर सकता हूँ? धन्यवाद – rickyProgrammer

2

यह मेरे लिए काम करता है। यदि आवश्यक हो तो आप अपना खुद का PageSettings बना सकते हैं, अन्यथा केवल एक emtpy का उपयोग करें।

यदि आप एक प्रिंट संवाद खोलना चाहते हैं, तो बस PrintDialog का उपयोग करें;

using System.Windows.Forms; 

//... 

ReportClass report = new ReportClass(); 
report.FileName = @"C:/Layout.rpt"; 
report.Load(); 
report.SetDataSource(YourSource); 

PrinterSettings settings = new PrinterSettings(); 

PrintDialog pdialog = new PrintDialog(); 
if (pdialog.ShowDialog() == DialogResult.OK) 
{ 
    settings = pdialog.PrinterSettings; 
} 

report.PrintToPrinter(settings, new PageSettings() { }, false); 
+0

हाय @DionV। प्रिंटरनाम पर, क्या मुझे वास्तविक पूर्ण प्रिंटर नाम रखना चाहिए? डेटासर्सेनेम को भी, अगर मैं डेटासेट का उपयोग नहीं कर रहा हूं और मेरे डेटा स्रोत सीधे संग्रहीत प्रक्रिया से आता है तो मुझे क्या करना चाहिए? – rickyProgrammer

+0

@rickyProgrammer हाँ, पूर्ण प्रिंटरनाम। 'SetDataSource' विधि' डेटाटेबल 'या यहां तक ​​कि' IENumerable' भी स्वीकार करती है। यदि आपका डेटा संग्रहीत प्रक्रिया से आता है तो आपको शायद 'डेटाटेबल' मिलेगा। –

+0

मैंने क्रिस्टलरपोर्ट.प्रिंटटॉप्रिंटर (1, झूठी, 0, 0) का उपयोग कर समस्या को हल कर लिया है; मैं बस इसमें शामिल हूं कि मेरे कोड में ऊपर पोस्ट किया गया है और यह सचमुच पृष्ठ को सीधे प्रिंट करता है, हालांकि प्रिंटर का चयन करने के लिए पहले प्रिंट संवाद बॉक्स को पॉप-अप करने के लिए मैं जो चाहता था वह प्रिंट करता है। – rickyProgrammer

0
  CrystalReportSaleSlip _CrystalReportSaleSlip = new CrystalReportSaleSlip(); 
      _CrystalReportSaleSlip.SetDataSource(dtReport); 

      _CrystalReportSaleSlip.PrintOptions.PrinterName = "Hp Laserjet M1522 MFP Series PCL 6"; 
      _CrystalReportSaleSlip.PrintToPrinter(1, false, 0, 0); 
      crystalReportViewer1.Refresh(); 
संबंधित मुद्दे