一.接口部分的代码

        [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, , 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, , buffer1.Length)) > )
{
stmMemory.Write(buffer1, , 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[];
int n = ;
while (n > )
{
//一次从流中读多少字节,并把值赋给N,当读完后,N为0,并退出循环
n = stream.Read(bytes, , );
fs.Write(bytes, , 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 = ;
byte[] bytes = new byte[];
readCout = s.Read(bytes, , );
while (readCout > )
{
fs.Write(bytes, , readCout);
readCout = s.Read(bytes, , );
}
}
}
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 > )
{
fileList.Add(sb.ToString());
sb.Clear();
}
else
{
break;
}
} while (true);
}
return fileList.ToArray();
}
catch (Exception)
{
return null;
}
}

C# 导出pdf(浏览器不预览直接下载)的更多相关文章

  1. html+ashx + NPOI 实现导出Excel文件并且预览和下载

      先看看实现效果 简单描述一下实现过程: 1. 生成报表,返回报表文件路径 $.post 请求一般处理文件ashx ,通过npoi生成对应的excel文件.生成成功后,返回文件保存的完整路径 2.  ...

  2. PDF文件预览和下载

    背景:项目中实现pdf文件的预览以及下载 环境:jdk1.8.SpringBoot2.0.Maven    PDF.js下载地址将下载的源码拷入项目中    修改viewer.js: 将default ...

  3. 网页中动态嵌入PDF文件/在线预览PDF内容https://www.cnblogs.com/xgyy/p/6119459.html

    #网页中动态嵌入PDF文件/在线预览PDF内容# 摘要:在web开发时我们有时会需要在线预览PDF内容,在线嵌入pdf文件: 问题1:如何网页中嵌入PDF: 在网页中: 常用的几种PDF预览代码片段如 ...

  4. Node.js + gulp 合并静态页模版,文件更新自动热重载。浏览器可预览

    github地址:https://github.com/Liaozhenting/template 使用的是ejs的语法.其实你用什么文件后缀都可以,都是按ejs来解析. 模板文件放在componen ...

  5. 【ASP.NET 进阶】PDF文件在线预览(类似百度文库)

    工作需要完成文档的在线预览,现在完成了第一步PDF文件的预览,步骤是通过PDF转换工具pdf2swf.exe把PDF文件转换为SWF文件,然后通过FlexPaper就可以预览了.效果如下(GIF图片太 ...

  6. VS Code 如何直接在浏览器中预览页面

    VS Code 预览html页面的时候,默认需要在资源管理器中显示,再在浏览器中预览.今天介绍一下如何直接预览html页面. 方法一:自己配置快捷键 1.ctrl + shift + p 或者 F1  ...

  7. sublime text3 自己定义的不同浏览器的预览快捷键

    sublime text3 自己定义的不同浏览器的预览快捷键突然全部失效了,搞到现在一直没闹清楚怎么回事,翻看插件发现SideBarEnhancements这插件刚更新了,快捷键也是依赖这个插件弄得. ...

  8. 使用java的 htpUrlConnection post请求 下载pdf文件,然后输出到页面进行预览和下载

    使用java的 htpUrlConnection post请求 下载pdf文件,然后输出到页面进行预览和下载 2018年06月07日 10:42:26 守望dfdfdf 阅读数:235 标签: jav ...

  9. sublime text2-text3 定义的不同浏览器的预览快捷键

    sublime text3 自己定义的不同浏览器的预览快捷键突然全部失效了,搞到现在一直没闹清楚怎么回事,翻看插件发现SideBarEnhancements这插件刚更新了,快捷键也是依赖这个插件弄得. ...

随机推荐

  1. geetest拼图破解

    geetest拼图破解: 1.考虑到每个网站的拼图数量很少,可以先把他们下下来,后面在通过RGB来判断差异,来找出需要移动到的位置 2.通过python + selenium来控制页面的操控页面的元素 ...

  2. Docker从入门到实践(4-1)

    使用 Docker 镜像 在之前的介绍中,我们知道镜像是 Docker 的三大组件之一. Docker 运行容器前需要本地存在对应的镜像,如果本地不存在该镜像,Docker 会从镜像仓库下载该镜像. ...

  3. 【集合系列】- 深入浅出的分析IdentityHashMap

    一.摘要 在集合系列的第一章,咱们了解到,Map 的实现类有 HashMap.LinkedHashMap.TreeMap.IdentityHashMap.WeakHashMap.Hashtable.P ...

  4. Obtaining the backtrace - libunwind

    Sometimes when working on a large project, I find it useful to figure out all the places from which ...

  5. Spring与Shiro整合 登陆操作

    Spring与Shiro整合 登陆操作 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] 编写登陆Controller方法  讲解: 首先,如果你登陆失败的时候,它会把你的异常信息丢到 ...

  6. nginx-(三)基本模块1

    nginx常用模块介绍 ngx_http_access_module模块的配置(基于IP的访问控制) allow address | CIDR | unix: | all; deny address ...

  7. 从Excel到Python:最常用的36个Pandas函数

    本文涉及pandas最常用的36个函数,通过这些函数介绍如何完成数据生成和导入.数据清洗.预处理,以及最常见的数据分类,数据筛选,分类汇总,透视等最常见的操作. 生成数据表 常见的生成数据表的方法有两 ...

  8. Python开发-实现Excel套打打印

    一.目的 目前本人就职与甲方的工作,由于公司的ERP比较烂无法完美的设计套打,就想着自己用Python开发一个套打工具. 二.开发过程 刚开始我打算用Html的方式生成打印的文档,但是有两个无法解决的 ...

  9. 【前端】之HTML5基础知识

    HTML5 文件格式 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...

  10. C语言|博客作业11

    问题 回答 这个作业属于哪个课程 C语言程序设计ll 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/SE2019-2/homework/10127 我在 ...