从Server.Execute调用创建ZIP文件

时间:2012-12-19 15:46:17

标签: c# .net dotnetzip

我有一个.NET网站和一个页面,当导航到(使用EssentialObjects PDF库)时,它将返回生成的PDF。

我希望有另一个页面可以在循环中多次调用Server.Execute并执行PDF页面的URL,并使用返回的响应在内存中创建PDF并使用DotNetZip压缩它们并将包含多个PDF的最终zip文件返回给用户。

我该怎么做呢?

1 个答案:

答案 0 :(得分:1)

对于任何想要这样做的人,我最终都使用了这段代码。然后可以轻松地将其放入循环中以获取一大堆页面,将它们转换为PDF,并将它们全部压缩到一个zip文件中。

Dictionary<string, byte[]> pdfByteList = new Dictionary<string, byte[]>();
string pageName = "TestPage";
string htmlToConvert = GetHTML(pageName); //Perform the Server.Execute() code here and return the HTML

PdfConverter converter = new PdfConverter();
byte[] pdfBytes = converter.GetPdfBytesFromHtmlString(htmlToConvert);
pdfByteList.Add(pageName, pdfBytes);

using (ZipFile zip = new ZipFile())
{
    int i = 0;
    foreach(KeyValuePair<string,byte[]> kvp in pdfByteList)
    {
        zip.AddEntry(kvp.Key, kvp.Value);
        i++;
    }

    Response.Clear();
    Response.BufferOutput = true; // false = stream immediately
    Response.ContentType = "application/zip";
    Response.AddHeader("content-disposition", "attachment; filename=TheZipFile.zip");
    zip.Save(Response.OutputStream);
}