侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

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

技术  /  管理员 发布于 5年前   253

前言

这篇文章主要给大家介绍了关于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;      }    }

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对AIDI的支持。


  • 上一条:
    c#使用linq把多列的List转化为只有指定列的List
    下一条:
    C#编写方法实例
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 2024.07.09日OpenAI将终止对中国等国家和地区API服务(0个评论)
    • 2024/6/9最新免费公益节点SSR/V2ray/Shadowrocket/Clash节点分享|科学上网|免费梯子(1个评论)
    • 国外服务器实现api.openai.com反代nginx配置(0个评论)
    • 近期文章
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2017-07
    • 2017-08
    • 2017-09
    • 2018-01
    • 2018-07
    • 2018-08
    • 2018-09
    • 2018-12
    • 2019-01
    • 2019-02
    • 2019-03
    • 2019-04
    • 2019-05
    • 2019-06
    • 2019-07
    • 2019-08
    • 2019-09
    • 2019-10
    • 2019-11
    • 2019-12
    • 2020-01
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-08
    • 2020-09
    • 2020-10
    • 2020-11
    • 2021-04
    • 2021-05
    • 2021-06
    • 2021-07
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-12
    • 2022-01
    • 2022-02
    • 2022-03
    • 2022-04
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-06
    • 2023-07
    • 2023-08
    • 2023-09
    • 2023-10
    • 2023-12
    • 2024-02
    • 2024-04
    • 2024-05
    • 2024-06
    • 2025-02
    • 2025-07
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客