我们的Web应用程序提供了下载pdf的功能。
当用户单击下载链接时,我们将在新选项卡中打开pdf。
我的firefox使用pdfjs作为pdf查看器,我可以通过它的界面保存pdf。
在Firefox 19中一切正常,但是版本24的下载文件看上去已损坏(它显示了该文件,但无法正确下载)。
我注意到文件的结果大小为2的最接近幂,例如,如果我的原始pdf大小为97kb,则通过Firefox的pdfjs下载文件后,其大小变为128kb,而我的桌面pdf查看器(如acrobat)无法打开它。
我在我们的应用程序的相同版本上进行了测试。
更新
Demo pdf file-通过linux Google chrome浏览器和linux firefox 21(pdfjs)下载一切都很好,但是linux firefox 23.0.1有同样的问题
pdfjs或我们的服务器有问题吗?
更新#2
我查看了损坏和未损坏文件的二进制内容:
$ git diff not-broken.dump broken.dump
差异--git a / not-broken.dump b / broken.dump
索引3621089..5de337c 100644
-/不间断的转储
+++ 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
最佳答案
我们这里有一个真正的错误。我提交了:https://github.com/mozilla/pdf.js/issues/3634
由于数据传输未指定内容长度,而是使用分块传输编码,因此pdf.js将使用64kb的初始缓冲区,每次缓冲区溢出时都会加倍。但是,一旦传输完成,pdf.js不会将缓冲区缩小到实际大小,也不会记住实际大小,因此下载后,整个超大缓冲区(示例中仍为初始的64kb)将被传输。
我认为没有真正的解决方法,根本不使用pdf.js(这是用户选择的)。