zoukankan      html  css  js  c++  java
  • iText C# 合并PDF文件流,以及A5变A4时内容默认放在最底下的问题的解决方法;ASP.NET 实现Base64文件流下载PDF

    /// <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();
     
               }
  • 相关阅读:
    LeetCode 295. Find Median from Data Stream (堆)
    LeetCode 292. Nim Game(博弈论)
    《JavaScript 模式》读书笔记(4)— 函数2
    《JavaScript 模式》读书笔记(4)— 函数1
    《JavaScript 模式》读书笔记(3)— 字面量和构造函数3
    《JavaScript 模式》读书笔记(3)— 字面量和构造函数2
    《JavaScript 模式》读书笔记(3)— 字面量和构造函数1
    《JavaScript 模式》读书笔记(2)— 基本技巧3
    《JavaScript 模式》读书笔记(2)— 基本技巧2
    《JavaScript 模式》读书笔记(2)— 基本技巧1
  • 原文地址:https://www.cnblogs.com/waw/p/8637417.html
Copyright © 2011-2022 走看看