流式PDF到网页失败 [英] Stream a PDF to a web page failing
本文介绍了流式PDF到网页失败的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个网址为PDF,我想的PDF为多达我的网页浏览器。
我能成功(我认为)检索的PDF文件。然后,当我做Response.BinaryWrite()我得到一个文件已损坏,无法修复请从Adobe Reader的错误。
这里的code我有:
保护无效的Page_Load(对象发件人,EventArgs的发送)
{
如果(的IsPostBack)
{
字节[] =输出DoWork的(宀://localhost/test.pdf);
Response.Clear();
Response.ContentType =应用程序/ PDF
Response.AddHeader(内容处置,内联;文件名= MyPDF.PDF);
Response.AddHeader(内容长度,output.Length.ToString());
Response.BinaryWrite(输出);
到Response.End();
}
} 公共字节[]的DoWork(字符串requestUrl)
{
字节[] responseData;
HttpWebRequest的REQ = NULL;
HttpWebResponse RESP = NULL;
StreamReader的strmReader = NULL; 尝试
{
REQ =(HttpWebRequest的)WebRequest.Create(requestUrl); 使用(RESP =(HttpWebResponse)req.GetResponse())
{
字节[]缓冲区=新的字节[resp.ContentLength]
BinaryReader读者=新BinaryReader(resp.GetResponseStream());
reader.Read(缓冲液,0,buffer.Length);
responseData =缓冲;
}
}
最后
{
如果(REQ!= NULL)
{
REQ = NULL;
} 如果(RESP!= NULL)
{
resp.Close();
RESP = NULL;
}
} 返回responseData; }
解决方案
显然,我需要使用的ReadBytes()出于某种原因,从URL阅读PDF文件时,你没有得到所有你所要求的字节
保护无效的Page_Load(对象发件人,EventArgs的发送)
{
如果(的IsPostBack)
{
字节[] =输出DoWork的(宀://localhost/test.pdf);
Response.Clear();
Response.ContentType =应用程序/ PDF
Response.AddHeader(内容处置,附件);
Response.AddHeader(内容长度,output.Length.ToString());
Response.BinaryWrite(输出);
到Response.End();
}
} 公共字节[]的DoWork(字符串requestUrl)
{
字节[] responseData;
HttpWebRequest的REQ = NULL;
HttpWebResponse RESP = NULL;
StreamReader的strmReader = NULL; 尝试
{
REQ =(HttpWebRequest的)WebRequest.Create(requestUrl); 使用(RESP =(HttpWebResponse)req.GetResponse())
{
字节[]缓冲区=新的字节[resp.ContentLength]
使用(BinaryReader读卡器=新BinaryReader(resp.GetResponseStream()))
{
缓冲= reader.ReadBytes(buffer.Length);
reader.Close();
}
responseData =缓冲;
}
}
最后
{
如果(REQ!= NULL)
{
REQ = NULL;
} 如果(RESP!= NULL)
{
resp.Close();
RESP = NULL;
}
} 返回responseData; }
I have a URL to a PDF and I want to serve up the PDF to my page viewer.
I can successfully (I think) retrieve the PDF file. Then when I do the Response.BinaryWrite() I get a "The file is damaged and could not be repaired" error from the adobe reader.
Here's the code I have:
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
{
byte[] output = DoWork("Http://localhost/test.pdf");
Response.Clear();
Response.ContentType = "application/pdf";
Response.AddHeader("content-disposition", "inline; filename=MyPDF.PDF");
Response.AddHeader("content-length", output.Length.ToString());
Response.BinaryWrite(output);
Response.End();
}
}
public byte[] DoWork(string requestUrl)
{
byte[] responseData;
HttpWebRequest req = null;
HttpWebResponse resp = null;
StreamReader strmReader = null;
try
{
req = (HttpWebRequest)WebRequest.Create(requestUrl);
using (resp = (HttpWebResponse)req.GetResponse())
{
byte[] buffer = new byte[resp.ContentLength];
BinaryReader reader = new BinaryReader(resp.GetResponseStream());
reader.Read(buffer, 0, buffer.Length);
responseData = buffer;
}
}
finally
{
if (req != null)
{
req = null;
}
if (resp != null)
{
resp.Close();
resp = null;
}
}
return responseData;
}
解决方案
Apparently, I need to use ReadBytes() For some reason, when reading a PDF from a URL, You don't get all of the bytes that you requested.
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
{
byte[] output = DoWork("Http://localhost/test.pdf");
Response.Clear();
Response.ContentType = "application/pdf";
Response.AddHeader("content-disposition", "attachment");
Response.AddHeader("content-length", output.Length.ToString());
Response.BinaryWrite(output);
Response.End();
}
}
public byte[] DoWork(string requestUrl)
{
byte[] responseData;
HttpWebRequest req = null;
HttpWebResponse resp = null;
StreamReader strmReader = null;
try
{
req = (HttpWebRequest)WebRequest.Create(requestUrl);
using (resp = (HttpWebResponse)req.GetResponse())
{
byte[] buffer = new byte[resp.ContentLength];
using (BinaryReader reader = new BinaryReader(resp.GetResponseStream()))
{
buffer = reader.ReadBytes(buffer.Length);
reader.Close();
}
responseData = buffer;
}
}
finally
{
if (req != null)
{
req = null;
}
if (resp != null)
{
resp.Close();
resp = null;
}
}
return responseData;
}
这篇关于流式PDF到网页失败的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文