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