【问题标题】:Firefox breaks pdf after downloadFirefox 下载后会破坏 pdf
【发布时间】:2013-09-03 11:53:22
【问题描述】:

我们的网络应用程序提供下载 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 --- 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

【问题讨论】:

  • 您是否在文本/十六进制编辑器中打开了错误的 pdf 文件以查看导致文件大小增加的原因?
  • 你有没有机会在网上有一个生活例子?如果没有,您能否至少发布初始加载请求和后续下载请求(Web 控制台、Wireshark 等)的标头(响应/回复)​​?
  • @MarcB 我已经更新了问题
  • @nmaier 我添加了实时示例

标签: firefox pdf download pdf.js


【解决方案1】:

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

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

我认为没有真正的解决方法,除了根本不使用 pdf.js(这是用户的选择)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 2012-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-25
    • 2015-10-12
    相关资源
    最近更新 更多