0

当用户单击打印按钮时,我正在使用 MVC3 和 evopdf ( http://www.evopdf.com/ ) 创建 pdf。

我有一个初始视图,其中包含一个表单和打印按钮以及一个专为打印而设计的第二个视图。

单击打印按钮调用 javascript 提交表单,该表单调用打印操作。

我想要发生的是,一旦单击打印按钮,就会显示“处理”消息。生成 pdf 后,我希望删除该消息。

这是 javascript(我没有包含我所有的 javascript,因为有些部分不相关)

$(document).ready(function () {
    $(".btn").click(function () {
        var delay = 10; 
        $("#AjaxDelay").val(delay);

        $.blockUI();
        $('#printForm').submit();
    });

    $('#printForm').submit(function () {
        $.blockUI();    
        $.ajax({
            url: this.action,
            type: this.method,          
            success: function (data) {
                $.unblockUI();
                //I need to open the pdf in appropriate app, adobe pdf viewer or similar
            },
            failure:function(data) {
                alert("error");
                $.unblockUI();
            }
        });
        return false;
    });

});

表格

@using (Html.BeginForm("PrintView", "Index", new { format = "pdf/", id = Model.ID,     AjaxDelay = Model.AjaxDelay }, FormMethod.Get, new { id="printForm"  }))
{
    @Html.HiddenFor(m=>m.AjaxDelay)         
    <button type="button" class="btn print" >Print</button>        
}

索引控制器

public ActionResult PrintView(int id)
{           
    var model = GetData(id);
    return View(model);
}

这是我的 HttpHandler

public void ProcessRequest(HttpContext context)
{
    if (!context.Request.IsAuthenticated) return;    
    ProducePDF(context, "pdf title", 20);
}

private void ProducePDF(HttpContext context, string title,int delay)
{
    var pdfConverter = GetPdfConverter();

    // set the license key
    pdfConverter.LicenseKey = "licence key here";
    pdfConverter.JavaScriptEnabled = true;

    var pdfBytes = pdfConverter.GetPdfBytesFromUrl(context.Request.Url.ToString().Replace(".pdf/", ""));

    // send the PDF document as a response to the browser for download
    var response = HttpContext.Current.Response;
    response.Clear();
    response.AddHeader("Content-Type", "application/pdf");
    response.AddHeader("Content-Disposition", String.Format("attachment; filename=" + title + ".pdf; size={0}", pdfBytes.Length));
    response.BinaryWrite(pdfBytes);
    response.End();
}   

谢谢。

4

1 回答 1

0

我找到了一个使用 jquery cookie 插件并将 cookie 附加到响应的解决方案,如这篇 stackoverflow 文章中所述。

控制器操作完成后使用 Javascript 隐藏图像 MVC3

我确实需要做一个小改动,因为我必须在删除 cookie 时指定路径。

于 2013-07-24T11:45:08.080 回答