/// <summary> 合併PDF檔(集合) </summary> /// <param name="files">欲合併PDF檔之集合(一筆以上)</param> /// <param name="pagesize">纸张大小</param> public static MemoryStream mergePDFStream(MemoryStream[] files, Rectangle pagesize = null) { //outMergeFile = Server.MapPath(outMergeFile); //if (outMergeFile == null) //{ // outMergeFile = "d:\\" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + new Random().Next(1000) + ".pdf"; //} PdfReader reader; Document document; if (pagesize == null) { pagesize = PageSize.A4; } document = new Document(pagesize); //var fs = new FileStream(outMergeFile, FileMode.Create); MemoryStream fs = new MemoryStream(); //BufferedStream bfs = new BufferedStream(fs); PdfWriter writer = PdfWriter.GetInstance(document, fs); writer.CloseStream = false; //不自动关闭内存流. document.Open(); PdfContentByte cb = writer.DirectContent; PdfImportedPage newPage; for (int i = 0; i < files.Length; i++) { //这里的是,读取字节流 reader = new PdfReader(files[i].ToArray()); int iPageNum = reader.NumberOfPages; for (int j = 1; j <= iPageNum; j++) { document.NewPage(); newPage = writer.GetImportedPage(reader, j); //cb.Add(newPage); //cb.MoveTo(0, 0); // PageSize.A4.Height - newPage.Height 解决itext 高度的问题. itext 的y 轴默认是从下面开始 cb.AddTemplate(newPage, 0, pagesize.Height - newPage.Height); } } document.Close(); byte[] fileBuffer = fs.GetBuffer(); return fs; }
//Base64文件流 byte[] buffer = Convert.FromBase64String(decodedString); System.IO.Stream iStream = new System.IO.MemoryStream(buffer); try { int length; long dataToRead; string filename = sn + ".pdf";//保存的文件名称 dataToRead = iStream.Length; Response.Clear(); Response.ClearHeaders(); Response.ClearContent(); Response.ContentType = "application/pdf"; //文件类型 Response.AddHeader("Content-Length", dataToRead.ToString());//添加文件长度,进而显示进度 Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(filename, System.Text.Encoding.UTF8)); while (dataToRead > 0) { if (Response.IsClientConnected) { length = iStream.Read(buffer, 0, 10000); Response.OutputStream.Write(buffer, 0, length); Response.Flush(); buffer = new Byte[10000]; dataToRead = dataToRead - length; } else { dataToRead = -1; } } } catch (Exception ex) { Response.Write("文件下载时出现错误!"); } finally { if (iStream != null) { iStream.Close(); } //结束响应,否则将导致网页内容被输出到文件,进而文件无法打开 Response.Flush(); Response.End(); }