2013-08-30 4 views
3

Наше веб-приложение обеспечивает возможность загрузки pdf.Firefox распаковывает pdf после загрузки

Когда пользователь нажимает на ссылку для загрузки, мы открываем pdf-файл на новой вкладке.

Мой firefox использует pdfjs как средство просмотра PDF, и я могу сохранить PDF через его интерфейс.

Все было в порядке в Firefox 19, но версия 24 загружала файл, который выглядит как поврежденный (он отображает этот файл, но не может его загрузить правильно).

Я заметил, что размер файла результата равен ближайшей мощности 2, например, если мой первоначальный формат pdf составляет 97 кбайт, а затем загрузив его через pdfjs Firefox, его размер станет 128 КБ, а мои настольные PDF-теги (например, акробат) не могут Открой это.

Я тестировал его в той же версии нашего приложения.

обновление

Demo pdf file - все нормально с загрузкой через линукс просмотра Google хром и Linux FireFox 21 (pdfjs), но та же проблема с Linux светлячок 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 
+0

Вы открыли плохие pdf-файлы в текстовом/шестнадцатеричном редакторе, чтобы узнать, что вызывает увеличение размера файла? –

+0

Есть ли шанс, что у вас есть пример жизни в Интернете? Если нет, можете ли вы по крайней мере опубликовать заголовки (ответ/ответ) для первоначального запроса на загрузку и последующего запроса на загрузку (веб-консоль, Wireshark и т. Д.)? – nmaier

+0

@MarcB Я обновил вопрос –

ответ

3

То, что мы имеем здесь подлинную ошибка. Я подал: https://github.com/mozilla/pdf.js/issues/3634

Поскольку передача данных не указывает длину содержимого, но использует закодированную кодировку передачи, в pdf.js будет использоваться начальный буфер 64 КБ, который будет удваиваться каждый раз, когда он будет переполняться. Однако, как только передача будет завершена, pdf.js не уменьшит этот буфер до фактического размера и не запомнит фактический размер, так что после загрузки будет загружен весь избыточный буфер (все еще начальный 64kb в вашем примере) ,

Я не думаю, что существует реальная работа, не использующая pdf.js вообще (это выбор пользователя).