我尝试使用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
答案 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
标记还需要明确的宽度和高度。像%这样的动态值会导致我的移动框架出现问题