C# 下载多个pdf

C# 下载多个pdf,c#,asp.net,C#,Asp.net,我试图在我的asp.net应用程序中下载多个pdf作为附件。我使用pdfstamper(itextsharp)创建了一些模板和填充值。我可以填写这些值,但无法下载 private void FillForm(string path, DataTable BridgeValues, DataTable Comments, DataTable Maintenance,string Newfilename) { try { string

我试图在我的asp.net应用程序中下载多个pdf作为附件。我使用pdfstamper(itextsharp)创建了一些模板和填充值。我可以填写这些值,但无法下载

private void FillForm(string path, DataTable BridgeValues, DataTable Comments, DataTable Maintenance,string Newfilename)
    {
        try
        {
            string pdfTemplate = path;
            string newFile = Newfilename;
            string Pathser = "";
            if (!System.IO.Directory.Exists(Server.MapPath(@"~/PDF/")))
            {
                System.IO.Directory.CreateDirectory(Server.MapPath(@"~/PDF/"));
            }

            if (Directory.Exists(Server.MapPath(@"~/PDF/")))
            {
               Pathser = Server.MapPath(@"~/PDF/" + Newfilename);
            }
            System.IO.MemoryStream mStream = new System.IO.MemoryStream();
            // create a new PDF reader based on the PDF template document
            PdfReader pdfReader = new PdfReader(pdfTemplate);
            PdfStamper pdfStamper = new PdfStamper(pdfReader, new FileStream(Pathser, FileMode.Create));
            AcroFields pdfFormFields = pdfStamper.AcroFields;
            DataColumn dc = null;
            for (int i = 0; i < BridgeValues.Columns.Count - 1; i++)
            {
                dc = BridgeValues.Columns[i];
                pdfFormFields.SetField(dc.ColumnName.ToString(),  BridgeValues.Rows[0][dc].ToString());
            }
            pdfStamper.FormFlattening = true;

            // close the pdf
            pdfStamper.Close();
            ////Response.ContentType = "application/octet-stream";
            Response.ContentType = "application/pdf";
            ////Response.AddHeader("Content-Disposition", "attachment; filename=Report.pdf");
            Response.AddHeader("Content-Disposition", "attachment; filename=" + Newfilename + "");
            ////Response.BinaryWrite(mStream.ToArray());
            Response.TransmitFile(Server.MapPath(("~/PDF/"+ Newfilename)));
            Response.Clear();
            Response.End();
        }
        catch (System.Threading.ThreadAbortException lException)
        {

            // do nothing

        }
    }
private void FillForm(字符串路径、数据表桥接值、数据表注释、数据表维护、字符串Newfilename)
{
尝试
{
字符串pdfTemplate=path;
字符串newFile=Newfilename;
字符串Pathser=“”;
如果(!System.IO.Directory.Exists(Server.MapPath(@“~/PDF/”)存在)
{
System.IO.Directory.CreateDirectory(Server.MapPath(@“~/PDF/”);
}
if(Directory.Exists(Server.MapPath(@“~/PDF/”))
{
Pathser=Server.MapPath(@“~/PDF/”+Newfilename);
}
System.IO.MemoryStream mStream=新的System.IO.MemoryStream();
//基于PDF模板文档创建新的PDF阅读器
PdfReader PdfReader=新PdfReader(pdfTemplate);
PdfStamper PdfStamper=newpdfstamper(pdfReader,newfilestream(Pathser,FileMode.Create));
AcroFields pdfFormFields=pdfStamper.AcroFields;
DataColumn dc=null;
对于(int i=0;i
我第一次尝试创建一个pdf时,它工作了,但后来当我尝试下载多个文件时,它给出了一个执行选项。
无法计算表达式,因为代码已优化或调用堆栈顶部有本机帧。

我认为通过发出一个请求并从操作返回集合,您无法下载多个文件。我建议您需要允许用户下载多个文件,然后将它们压缩并将归档文件流式传输到浏览器


下面是一个压缩多个文件的示例:

为什么要捕获ThreadAbortException?它将自动重新启动,但您不应该捕获它。。。至于异常-不包括“无法计算表达式…”部分-这正是调试器显示的,它不是异常的一部分。这是我做的最后一次尝试,有一些执行选项“无法计算表达式,因为代码已优化或本机框架位于调用堆栈顶部。”所以我试过了捕捉部分。不,这不是例外。真的,真的不是。这就是调试器中显示的内容。如果您查看邮件的例外情况,则不会是这样。我正在循环浏览文件的数量并下载它们,但这是个坏主意。正如您所说,我将以zip格式下载它们。我可以在服务器上保存许多文件并以zip格式下载吗?有任何示例吗?