Firefox下载后打破pdf

时间:2013-08-30 17:11:37

标签: firefox pdf download pdf.js

我们的网络应用程序提供下载pdf的功能。

当用户点击下载链接时,我们会在新标签页中打开pdf。

我的firefox使用pdfjs作为pdf查看器,我可以通过它的界面保存pdf。

在Firefox 19中一切都很好,但版本24下载文件看起来像已损坏(它显示该文件,但无法正确下载)。

我注意到文件的结果大小是2的最接近的幂,例如,如果我的原始pdf大小是97kb,那么在通过Firefox的pdfjs下载之后它的大小变为128kb并且我的桌面pdf查看器(如acrobat)无法打开它

我在相同版本的应用上测试了它。

更新

Demo pdf file - 通过linux google chrome viewer和linux firefox 21(pdfjs)下载一切都很好,但与linux firefox 23.0.1相同的问题

pdfjs或我们的服务器有问题吗?

更新#2

我查看了破损和未损坏文件的二进制内容:

$ git diff not-broken.dump broken.dump 
diff --git a/not-broken.dump b/broken.dump
index 3621089..5de337c 100644
--- a/not-broken.dump
+++ b/broken.dump
@@ -336,5 +336,7 @@
 000014f0  b8 d0 3d 76 85 f8 76 9d  e6 50 74 df e7 a7 bd b0  |..=v..v..Pt.....|
 00001500  00 f1 6e 05 63 0a 65 6e  64 73 74 72 65 61 6d 0a  |..n.c.endstream.|
 00001510  65 6e 64 6f 62 6a 0a 73  74 61 72 74 78 72 65 66  |endobj.startxref|
-00001520  0a 35 32 31 33 0a 25 25  45 4f 46 0a              |.5213.%%EOF.|
-0000152c
+00001520  0a 35 32 31 33 0a 25 25  45 4f 46 0a 00 00 00 00  |.5213.%%EOF.....|
+00001530  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
+*
+00010000

1 个答案:

答案 0 :(得分:3)

我们这里有一个真正的错误。我提交了:https://github.com/mozilla/pdf.js/issues/3634

由于数据传输没有指定内容长度,但使用分块传输编码,pdf.js将使用64kb的初始缓冲区,每次溢出时加倍。但是,一旦传输完成,pdf.js不会将该缓冲区缩小到实际大小,也不会记住实际大小,因此在下载时,整个过大的缓冲区(在您的示例中仍然是最初的64kb)将被传输。

我认为没有真正的解决方法,完全没有使用pdf.js(这是用户的选择)。