Asp.net iTextShap使用HttpHandler制作的流式PDF将损坏的PDF发送到移动设备

Asp.net iTextShap使用HttpHandler制作的流式PDF将损坏的PDF发送到移动设备,asp.net,mobile,itextsharp,httphandler,Asp.net,Mobile,Itextsharp,Httphandler,当PC打开页面时,以下代码会发送完美的PDF文件,但PDF文件将无法工作,并且无论我在移动电话(Android、iOS)中使用何种应用程序(Adobe reader、Chrome等)打开页面,都会弹出一条消息“not a valid PDF”(非有效PDF): 我什么都试过了,但还是没有结果。简单地说,如果带有此处理程序的页面是由移动设备打开的,则文件已损坏。如果文件是在PC中下载的,然后发送到移动设备,它将正常工作!这增加了混乱 我做错了什么 更新 将处理程序转换为页面后,工作正常。所以Htt

当PC打开页面时,以下代码会发送完美的PDF文件,但PDF文件将无法工作,并且无论我在移动电话(Android、iOS)中使用何种应用程序(Adobe reader、Chrome等)打开页面,都会弹出一条消息“not a valid PDF”(非有效PDF):

我什么都试过了,但还是没有结果。简单地说,如果带有此处理程序的页面是由移动设备打开的,则文件已损坏。如果文件是在PC中下载的,然后发送到移动设备,它将正常工作!这增加了混乱

我做错了什么

更新


将处理程序转换为页面后,工作正常。所以HttpHandler肯定有问题。还是不知道是什么

您是否有办法从移动设备获取文件的原始字节以进行检查?如果没有,你能把你的处理程序版本的样本发布到我们可以检查的地方吗?无论是哪一种,最好不要使用像Google或Dropbox这样可以呈现PDF的服务,我们想要的是能够传输PDF而无需进行任何解释的服务,所以可以压缩它。@ChrisHaas这是一个内部网页,同样的处理程序在PC和Windows phone设备中运行良好,只是在android和iOS中都不行,在移动设备中打开从同一个httpHandler下载到PC中的文件就可以了!这真的很让人困惑。@ChrisHaas无论如何,上面的代码就是确切的处理程序,除了我正在删除pdf构造部分,如果你感兴趣,你可以添加一两行,然后测试它……有“它工作”和“它看起来工作”两种,我更感兴趣的是后者,这在处理pdf时非常常见。这种格式允许二进制文件本身有一点灵活性,并且其中可能有一些垃圾数据,有些客户端(碰巧在台式机上)可以处理,而有些客户端(碰巧在移动设备上)则会抱怨。有些客户非常严格地遵守标准,有些客户几乎在执行过程中就弥补了这一点。
public class PdfHttpHandler : IHttpHandler
{

    public void ProcessRequest(HttpContext context)
    {
        HttpResponse Response = context.Response;

        string fileName = "somefile.pdf";
        byte[] pdf = GetPDF();

        // stream the pdf
        Response.Buffer = false;
        Response.Clear();
        Response.ClearContent();
        Response.ClearHeaders();
        Response.ContentType = "application/pdf";
        Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName);
        Response.BinaryWrite(pdf);
        Response.Flush();
        Response.End();
    }

    protected byte[] GetPDF()
    {
        var doc = new Document();
        using (var ms = new MemoryStream())
        {
            using (var wri = PdfWriter.GetInstance(doc, ms))
            {
                doc.SetPageSize(iTextSharp.text.PageSize.A4);
                doc.SetMargins(25f, 25f, 20f, 50f);
                doc.Open();

                /***
                     construct the pdf
                ***/

                doc.Close();
                return ms.ToArray();
            }
        }
    }
}