通过PDF显示远程PDF.JS在iPad上崩溃Safari

时间:2014-05-16 16:13:30

标签: ios asp.net ipad safari pdf.js

我尝试使用PDF.JS在我的ASP.NET网站上显示远程PDF。我有一个名为" ShowPDF.aspx"的网页表格。下载远程PDF和response.binary写入文件字节。然后我在网站上有一个iFrame,它使用showpdf.aspx作为我的PDF.JS查看器的src文件,所以本质上看起来类似于:

<iframe src="http://path/to/pdfjs/viewer.html?file=http://path/to/ShowPDF.aspx"></iframe>

ShowPDF.aspx是我的解决方法,需要将PDF作为本地可用文件。在IE,Chrome和FireFox上,这一切都有效。在我的iPad(iOS 7.0.6)上,Safari打开iFrame,加载文档,2秒后崩溃(如,safari完全关闭)。转储日志显示错误:

Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Subtype: KERN_INVALID_ADDRESS at 0x00000...

如果我使用相同的PDF,并将其存储在我的本地Web项目中,并引用该文件,它工作正常,所以我认为它与我的&#34; ShowPDF&#34;码。根据下面的代码,任何人都可以想到我可以改变什么?或者,是否有人有任何其他解决方法? CORS对我来说不起作用,因为我无法更改我的文件托管位置的HTTP标头(天蓝云存储)。谢谢。

&#34; ShowPDF.aspx&#34;代码(此处截断了几行,但ratingPDF是对存储在云中的文件的字节数组的引用):

Dim ratingPDF As CloudBlockBlob = blobContainer.GetBlockBlobReference("somefilename")

Dim buffer As Byte()

Using ms As New MemoryStream
    ratingPDF.DownloadToStream(ms)
    buffer = ms.ToArray
End Using

Response.ClearHeaders()
Response.Clear()

Response.AddHeader("content-length", buffer.Length.ToString())
Response.AddHeader("content-disposition", "inline; filename=somefilename")
Response.AddHeader("Expires", "0")
Response.AddHeader("Pragma", "Cache")
Response.AddHeader("Cache-Control", "private")

Response.ContentType = "application/pdf"

Response.BinaryWrite(buffer)

Try
    Response.End()
Catch tEx As Threading.ThreadAbortException
   'nothing
Catch ex As Exception
End Try

3 个答案:

答案 0 :(得分:0)

其他人遇到这个问题,不幸的是,此时我决定不在iPad上使用PDF.JS。相反,我在新的浏览器选项卡中打开PDF,而不是尝试在我的网站中使用类似于以下内容的“内联”打开它来确定当前设备是否为iSomething:

if( navigator.userAgent.match(/iPhone|iPad|iPod/i) ) {
    window.open('myPDF.pdf');
}

答案 1 :(得分:0)

是的,我在尝试使用html <object>标记嵌入pdf时遇到了同样的问题。我最终决定将我的pdf转换为带有imagemagick的图像(取决于你有什么样的pdf,你可能想选择.png或.jpg)并为移动用户提供图像,而不是文档。

另一个选择是使用pdf2htmlEX将您的pdf转换为HTML,这会创建大量文件,但仍然很有趣。

答案 2 :(得分:0)

在某些情况下,object标记还需要明确的宽度和高度。像这样的动态值会导致我的移动框架出现问题