流式PDF到网页失败 [英] Stream a PDF to a web page failing

查看:232
本文介绍了流式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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆