在最近的一个项目中有一个下载的业务需求。下面代码实现了生成pdf以zip格式形式进行压缩处理最后将zip邮件发送,一下代码仅供参考,大家有什么好的意见,我们可以交流一下。
ZipOutputStream zipOutputStream;
using (MemoryStream ms = new MemoryStream())
{
zipOutputStream = new ZipOutputStream(ms);
Encoding gbk = Encoding.GetEncoding("gbk");
ZipConstants.DefaultCodePage = gbk.CodePage;
foreach (var key in ticketUniqueIdList)
{
JsonObject json = WordToPdf(key, taskId);
string tuid = masterUrl +。。。。 + key;//基于安全考虑就不全部显示了
string strImgPath = masterUrl + "。。。。。" + HttpUtility.UrlEncode(tuid);
var document = new Document(PageSize.A4);
MemoryStream memory = new MemoryStream();
PdfWriter pdfwriter = PdfWriter.GetInstance(document, memory);
document.Open();
PdfPTable table = CreateTable(json["activityname"].ToString(), json["activitytime"].ToString(), json["activityplace"].ToString(), json["billname"].ToString(), json["signinfo"].ToString(), strImgPath);
document.Add(table);
document.Add(new Paragraph(" 使用说明:"
, font));
pdfwriter.CloseStream = false;
document.Close();
byte[] buffer = memory.GetBuffer();
string fileName = key;
var entry = new ZipEntry(fileName + ".pdf");
entry.CompressionMethod = CompressionMethod.Deflated;
entry.Size = buffer.Length;
memory.Flush();
memory.Close();
zipOutputStream.PutNextEntry(entry);
zipOutputStream.Write(buffer, 0, buffer.Length);
}
zipOutputStream.Flush();
zipOutputStream.Finish();
string zipname = survey.Title + DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString() +
DateTime.Now.Day.ToString() + ".zip";
ms.Position = 0;
if (!(Utiles.IsPcBrowserRequest(Request)))
{
mail.AddAttachment(ms, zipname);
mail.Send();
return null;
}
}