C#导出pdf的实现方法(浏览器不预览直接下载)

作者:好名字可以让你的朋友更容易记住你 时间:2023-11-04 05:48:10 

前言

这篇文章主要给大家介绍了关于C#导出pdf的实现方法,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧

方法如下:

一.接口部分的代码


[HttpGet]
   public HttpResponseMessage ExportPdf(string id)
   {
     string pdfName = "";
//id 查询条件,根据实际情况修改即可
//pdfName 例如download.pdf
     byte[] pdfData= _policyGapManagerService.ExportPdf(id, out pdfName);//获得pdf字节
     var result = new HttpResponseMessage(HttpStatusCode.OK)
     {
       Content = new ByteArrayContent(pdfData)
     };
     result.Content.Headers.ContentDisposition =
       new ContentDispositionHeaderValue("attachment")
       {
         FileName = pdfName
       };
     result.Content.Headers.ContentType =new MediaTypeHeaderValue("application/pdf");
     return result;
   }

二.返回pdfbyte数组

1.下载http模式的pdf文件(以ASP.NET为例,将PDF存在项目的目录下,可以通过http直接打开项目下的pdf文件)


#region 调用本地文件使用返回pdfbyte数组

/// <summary>
   /// 调用本地文件使用返回pdfbyte数组
   /// </summary>
   /// <param name="srcPdfFile">‘D:\in2434341555551.pdf'</param>
   /// <returns></returns>

public static byte[] GetSignaturePDFByte(string srcPdfFile)
   {
     using (FileStream fsRead = new FileStream(srcPdfFile, FileMode.Open, FileAccess.Read, FileShare.Read))
     {
       int fsLen = (int)fsRead.Length;
       byte[] hebyte = new byte[fsLen];
       fsRead.Read(hebyte, 0, hebyte.Length);
       return hebyte;
     }
   }

#endregion 调用本地文件使用返回pdfbyte数组

#region 从网站上下载pdf,转化为字节流

/// <summary>
   /// 从网站上下载pdf,转化为字节流
   /// </summary>
   /// <param name="srcPdfFile">文件地址:'https://******/group2/M00/00/04/wKj-mlpcoZ2IUbK5AACrpaV6k98AAAB6gAAAAAAAKu9562.pdf'</param>

/// <returns></returns>
   public static Byte[] GetByteByRemoteURL(string srcPdfFile)
   {
     byte[] arraryByte;
     HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(srcPdfFile);
     req.Method = "GET";
     using (WebResponse wr = req.GetResponse())
     {
       StreamReader responseStream = new StreamReader(wr.GetResponseStream(), Encoding.UTF8);
       int length = (int)wr.ContentLength;
       byte[] bs = new byte[length];

HttpWebResponse response = wr as HttpWebResponse;
       Stream stream = response.GetResponseStream();

//读取到内存
       MemoryStream stmMemory = new MemoryStream();
       byte[] buffer1 = new byte[length];
       int i;
       //将字节逐个放入到Byte 中
       while ((i = stream.Read(buffer1, 0, buffer1.Length)) > 0)
       {
         stmMemory.Write(buffer1, 0, i);
       }
       arraryByte = stmMemory.ToArray();
       stmMemory.Close();
     }
     return arraryByte;
   }

#endregion 从网站上下载pdf,转化为字节流

#region 从网站上下载文件,保存到其他路径

/// <summary>
   /// 从网站上下载文件,保存到其他路径
   /// </summary>
   /// <param name="pdfFile">文件地址</param>
   /// <param name="saveLoadFile">保存文件路径:D:\12221.pdf</param>
   /// <returns></returns>
   public string SaveRemoteFile( string saveLoadFile , string pdfFile)
   {
     //bool flag = false;
     var f = saveLoadFile + Guid.NewGuid().ToString("D") + ".pdf";
     Uri downUri = new Uri(pdfFile);
     //建立一个WEB请求,返回HttpWebRequest对象
     HttpWebRequest hwr = (HttpWebRequest)WebRequest.Create(downUri);
     //流对象使用完后自动关闭
     using (Stream stream = hwr.GetResponse().GetResponseStream())
     {
       //文件流,流信息读到文件流中,读完关闭
       using (FileStream fs = File.Create(f))
       {
         //建立字节组,并设置它的大小是多少字节
         byte[] bytes = new byte[102400];
         int n = 1;
         while (n > 0)
         {
           //一次从流中读多少字节,并把值赋给N,当读完后,N为0,并退出循环
           n = stream.Read(bytes, 0, 10240);
           fs.Write(bytes, 0, n);//将指定字节的流信息写入文件流中
         }
       }
     }

//return flag;
     //return _outPath + saveLoadFile;
     return f;
   }

#endregion 从网站上下载文件,保存到其他路径

2.ftp模式的pdf文件


/// <summary>
   /// 下载FTP文件。
   /// </summary>
   /// <param name="offsetPath">相对路径</param>
   /// <param name="fileName">文件名称</param>
   /// <returns>下载结果,本地文件路径</returns>
   public string DownLoad(string offsetPath,string fileName)
   {
     try
     {
       FtpWebRequest ftpWeb = (FtpWebRequest)WebRequest.Create(_ftpRootPath + offsetPath + fileName);
       ftpWeb.Method = WebRequestMethods.Ftp.DownloadFile;
       ftpWeb.UseBinary = true;
       var resp = ftpWeb.GetResponse();
       using (FileStream fs = new FileStream(_outPath + fileName, FileMode.Create))
       {
         using (var s = resp.GetResponseStream())
         {
           if (s == null) { return "文件不存在!"; }

int readCout = 0;
           byte[] bytes = new byte[1024];
           readCout = s.Read(bytes, 0, 1024);
           while (readCout > 0)
           {
             fs.Write(bytes, 0, readCout);
             readCout = s.Read(bytes, 0, 1024);
           }
         }
       }
       resp.Close();
       return _outPath + fileName;
     }
     catch (Exception e)
     {
       return e.Message;
     }

}

/// <summary>
   /// 判断文件是否存在
   /// </summary>
   /// <param name="offsetPath"></param>
   /// <param name="fileName"></param>
   /// <returns></returns>
   public bool FileExists(string offsetPath, string fileName)
   {
     try
     {
       FtpWebRequest ftpWeb = (FtpWebRequest)WebRequest.Create(_ftpRootPath + offsetPath + fileName);
       ftpWeb.Method = WebRequestMethods.Ftp.DownloadFile;
       ftpWeb.UseBinary = true;
       var resp = (FtpWebResponse)ftpWeb.GetResponse();
       resp.Close();
       return true;
     }
     catch (Exception)
     {
       return false;
     }
   }

/// <summary>
   /// 获取目录下所有文件
   /// </summary>
   /// <returns></returns>
   public string[] Files(string offsetPath)
   {
     try
     {
       FtpWebRequest ftpWeb = (FtpWebRequest)WebRequest.Create(_ftpRootPath + offsetPath);
       ftpWeb.Method = WebRequestMethods.Ftp.ListDirectory;
       Stream stream = ftpWeb.GetResponse().GetResponseStream();
       if (stream == null)
       {
         return null;
       }
       List<string> fileList = new List<string>();
       using (StreamReader sr = new StreamReader(stream))
       {
         StringBuilder sb = new StringBuilder();
         do
         {
           sb.Append(sr.ReadLine());
           if (sb.Length > 0)
           {
             fileList.Add(sb.ToString());
             sb.Clear();
           }
           else
           {
             break;
           }
         } while (true);
       }
       return fileList.ToArray();
     }
     catch (Exception)
     {
        return null;
     }
   }

来源:https://www.cnblogs.com/hahahayang/p/12053913.html

标签:c#,导出,pdf
0
投稿

猜你喜欢

  • 带你了解Java常用类小结

    2023-04-15 14:38:26
  • springboot集成redis并使用redis生成全局唯一索引ID

    2023-11-28 05:42:39
  • Java concurrency之非公平锁_动力节点Java学院整理

    2022-07-31 22:04:37
  • 一文带你了解C#中抽象方法与虚方法的区别

    2023-07-23 00:14:32
  • JAVA swing布局管理器实例解析

    2022-01-11 05:05:15
  • Java即将引入新对象类型来解决内存使用问题

    2023-03-30 18:12:42
  • Java算法比赛常用方法实例总结

    2023-11-28 07:15:26
  • 不使用他人jar包情况下优雅的进行dubbo调用详解

    2022-04-20 11:43:46
  • 用java实现杨辉三角的示例代码

    2023-08-12 09:02:21
  • Java的枚举类型使用方法详解

    2023-11-19 04:32:55
  • C语言安全编码之数组索引位的合法范围

    2021-12-08 06:09:51
  • 应用启动数据初始化接口CommandLineRunner和Application详解

    2023-02-06 05:00:33
  • Java中数组在内存中存放原理的讲解

    2022-12-10 03:48:35
  • Gson之toJson和fromJson方法的具体使用

    2021-07-20 16:28:47
  • 浅析C# 函数的传值与传址

    2023-11-22 04:46:57
  • Android实现三角形气泡效果方式汇总

    2021-12-20 06:21:51
  • 解决Map集合使用get方法返回null抛出空指针异常问题

    2023-11-25 00:14:00
  • Android Application的使用全面解析

    2023-08-26 04:23:49
  • java中this的n种使用方法

    2023-12-23 13:13:23
  • AOP从静态代理到动态代理(Emit实现)详解

    2023-11-27 14:49:56
  • asp之家 软件编程 m.aspxhome.com