Reden Rodriguez Ответов: 0

Как сделать многократную печать отчета crystal в ASP.NET


привет разработчики, моя проблема в том, что я могу распечатать несколько страниц, но то, что я собираюсь сделать, это то, что я сначала загружу его в формате pdf и напечатаю все это, я сделал кнопку одним щелчком мыши с помощью javascript, но я не могу сделать несколько страниц вот мой код ниже.

protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                Session["pager"] = ((DataTable)Session["table"]).Rows.Count;
                rptDoc.Load(Server.MapPath(Session["path"].ToString()));
                string aaa = Session["path"].ToString();
                rptDoc.SetDataSource((DataTable)Session["table"]);
                reportViewer.ReportSource = rptDoc;
                reportViewer.RefreshReport();
                if (!IsPostBack)
                {
                    Session["index"] = 1;
                    lblback.Text = Session["back"].ToString();
                }
            }
            catch (Exception ex)
            {
                error.ErrorLogs(Session["UserName"].ToString(), url, ex);
                ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "alertmessage", "alert('" + ConString.ErrorMessage() + "')", true);
            }
        }


<input id="btnPrint" type="button" value="Print" onclick="Print()" />



<div id="dvReport">  
                <CR:CrystalReportViewer ID="reportViewer" runat="server" AutoDataBind="true"
                    BestFitPage="False" EnableDatabaseLogonPrompt="False" EnableParameterPrompt="False" PrintMode="ActiveX" HasGotoPageButton="False" HasPageNavigationButtons="False" />
            </div> 



<script type="text/javascript">
    function Print() {
            var dvReport = document.getElementById("dvReport");
            var frame1 = dvReport.getElementsByTagName("iframe")[0];
            if (navigator.appName.indexOf("Internet Explorer") != -1 || navigator.appVersion.indexOf("Trident") != -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>


Что я уже пробовал:

мой исходный код таков.
protected void btnPrint_Click(object sender, EventArgs e)
       {
           Session["pager"] = ((DataTable)Session["table"]).Rows.Count;
           rptDoc.Load(Server.MapPath(Session["path"].ToString()));
           string aaa = Session["path"].ToString();
           rptDoc.SetDataSource((DataTable)Session["table"]);
           reportViewer.ReportSource = rptDoc;
           reportViewer.RefreshReport();

           PrinterSettings printerSettings = new PrinterSettings();
           PrintDocument localPrinter = new PrintDocument();
           printerSettings.PrinterName = localPrinter.PrinterSettings.PrinterName;
           rptDoc.PrintToPrinter(printerSettings, new PageSettings(), false);
       }


я меняю его на javascript из-за какой-то проблемы с принтером на моей стороне, я могу использовать это и печатать несколько страниц, но всякий раз, когда я запускал это, клиент пытался использовать мой сайт
PrintDocument localPrinter = new PrintDocument();
это вызывает ошибку, которую я не могу обнаружить клиентской печати, но когда я попробовал ее работу, она отлично работает, поэтому я попробовал javascript.

Richard Deeming

Исходный код не будет работать, потому что он работает на сервере. Он будет способен печатать только на принтере, подключенном к вашему серверу и установленном для пользователя AppPool. Если это не приложение интрасети, с сервером и пользователями, находящимися в одном офисе, это не будет делать то, что вы хотите.

Печать с Javascript, как известно, очень сложна. Судя по тому, что PrintMode="ActiveX", Средство просмотра Crystal Reports использует решение, которое будет работать только в Internet Explorer на Windows и только в том случае, если пользователь разрешил вашему сайту "инициализация и использование элементов ActiveX, не помеченных как безопасные для использования".

Ваш лучший выбор, вероятно, состоит в том, чтобы экспортировать отчет в PDF и позволить пользователю загрузить его и распечатать самостоятельно.

0 Ответов