C#导出pdf的实现方法(浏览器不预览直接下载)
前言
这篇文章主要给大家介绍了关于C#导出pdf的实现方法,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧
方法如下:
一.接口部分的代码
[HttpGet]
publicHttpResponseMessageExportPdf(stringid)
{
stringpdfName="";
//id查询条件,根据实际情况修改即可
//pdfName例如download.pdf
byte[]pdfData=_policyGapManagerService.ExportPdf(id,outpdfName);//获得pdf字节
varresult=newHttpResponseMessage(HttpStatusCode.OK)
{
Content=newByteArrayContent(pdfData)
};
result.Content.Headers.ContentDisposition=
newContentDispositionHeaderValue("attachment")
{
FileName=pdfName
};
result.Content.Headers.ContentType=newMediaTypeHeaderValue("application/pdf");
returnresult;
}
二.返回pdfbyte数组
1.下载http模式的pdf文件(以ASP.NET为例,将PDF存在项目的目录下,可以通过http直接打开项目下的pdf文件)
#region调用本地文件使用返回pdfbyte数组 //////调用本地文件使用返回pdfbyte数组 /// ///‘D:\in2434341555551.pdf' /// publicstaticbyte[]GetSignaturePDFByte(stringsrcPdfFile) { using(FileStreamfsRead=newFileStream(srcPdfFile,FileMode.Open,FileAccess.Read,FileShare.Read)) { intfsLen=(int)fsRead.Length; byte[]hebyte=newbyte[fsLen]; fsRead.Read(hebyte,0,hebyte.Length); returnhebyte; } } #endregion调用本地文件使用返回pdfbyte数组 #region从网站上下载pdf,转化为字节流 /// ///从网站上下载pdf,转化为字节流 /// ///文件地址:'https://******/group2/M00/00/04/wKj-mlpcoZ2IUbK5AACrpaV6k98AAAB6gAAAAAAAKu9562.pdf' /// publicstaticByte[]GetByteByRemoteURL(stringsrcPdfFile) { byte[]arraryByte; HttpWebRequestreq=(HttpWebRequest)HttpWebRequest.Create(srcPdfFile); req.Method="GET"; using(WebResponsewr=req.GetResponse()) { StreamReaderresponseStream=newStreamReader(wr.GetResponseStream(),Encoding.UTF8); intlength=(int)wr.ContentLength; byte[]bs=newbyte[length]; HttpWebResponseresponse=wrasHttpWebResponse; Streamstream=response.GetResponseStream(); //读取到内存 MemoryStreamstmMemory=newMemoryStream(); byte[]buffer1=newbyte[length]; inti; //将字节逐个放入到Byte中 while((i=stream.Read(buffer1,0,buffer1.Length))>0) { stmMemory.Write(buffer1,0,i); } arraryByte=stmMemory.ToArray(); stmMemory.Close(); } returnarraryByte; } #endregion从网站上下载pdf,转化为字节流 #region从网站上下载文件,保存到其他路径 /// ///从网站上下载文件,保存到其他路径 /// ///文件地址 /// 保存文件路径:D:\12221.pdf /// publicstringSaveRemoteFile(stringsaveLoadFile,stringpdfFile) { //boolflag=false; varf=saveLoadFile+Guid.NewGuid().ToString("D")+".pdf"; UridownUri=newUri(pdfFile); //建立一个WEB请求,返回HttpWebRequest对象 HttpWebRequesthwr=(HttpWebRequest)WebRequest.Create(downUri); //流对象使用完后自动关闭 using(Streamstream=hwr.GetResponse().GetResponseStream()) { //文件流,流信息读到文件流中,读完关闭 using(FileStreamfs=File.Create(f)) { //建立字节组,并设置它的大小是多少字节 byte[]bytes=newbyte[102400]; intn=1; while(n>0) { //一次从流中读多少字节,并把值赋给N,当读完后,N为0,并退出循环 n=stream.Read(bytes,0,10240); fs.Write(bytes,0,n);//将指定字节的流信息写入文件流中 } } } //returnflag; //return_outPath+saveLoadFile; returnf; } #endregion从网站上下载文件,保存到其他路径
2.ftp模式的pdf文件
//////下载FTP文件。 /// ///相对路径 /// 文件名称 /// 下载结果,本地文件路径 publicstringDownLoad(stringoffsetPath,stringfileName) { try { FtpWebRequestftpWeb=(FtpWebRequest)WebRequest.Create(_ftpRootPath+offsetPath+fileName); ftpWeb.Method=WebRequestMethods.Ftp.DownloadFile; ftpWeb.UseBinary=true; varresp=ftpWeb.GetResponse(); using(FileStreamfs=newFileStream(_outPath+fileName,FileMode.Create)) { using(vars=resp.GetResponseStream()) { if(s==null){return"文件不存在!";} intreadCout=0; byte[]bytes=newbyte[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(Exceptione) { returne.Message; } } //////判断文件是否存在 /// ////// /// publicboolFileExists(stringoffsetPath,stringfileName) { try { FtpWebRequestftpWeb=(FtpWebRequest)WebRequest.Create(_ftpRootPath+offsetPath+fileName); ftpWeb.Method=WebRequestMethods.Ftp.DownloadFile; ftpWeb.UseBinary=true; varresp=(FtpWebResponse)ftpWeb.GetResponse(); resp.Close(); returntrue; } catch(Exception) { returnfalse; } } /// ///获取目录下所有文件 /// ///publicstring[]Files(stringoffsetPath) { try { FtpWebRequestftpWeb=(FtpWebRequest)WebRequest.Create(_ftpRootPath+offsetPath); ftpWeb.Method=WebRequestMethods.Ftp.ListDirectory; Streamstream=ftpWeb.GetResponse().GetResponseStream(); if(stream==null) { returnnull; } List fileList=newList (); using(StreamReadersr=newStreamReader(stream)) { StringBuildersb=newStringBuilder(); do { sb.Append(sr.ReadLine()); if(sb.Length>0) { fileList.Add(sb.ToString()); sb.Clear(); } else { break; } }while(true); } returnfileList.ToArray(); } catch(Exception) { returnnull; } }
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对毛票票的支持。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。