Как использовать PDF.js для загрузки файла, включенного в веб-приложение (не из файла: URL?

Я хочу иметь возможность отображать PDF-файлы в своем приложении Chrome, используя PDF.js, но документация несуществующий. Мне не удалось найти простых примеров или руководств, в которых показан код для загрузки PDF-файла с относительного URL-адреса, отображения страницы и навигации по PDF-файлу. У них есть очень сложные примеры, где 95% кода делают другие вещи, и их очень сложно разобрать и найти соответствующие функции. Я хотел бы:

  1. Включите соответствующий код в мое приложение (это «pdf.js», созданный «node make generic», и ничего больше? Или мне нужно также включить другие файлы JS?)

  2. Иметь возможность показывать PDF-файлы, которые находятся внутри моего myapp.crx файла

  3. Требуется ли для pdf.js «LocalStorage»? Будет ли localStorage по-прежнему разрешен в расширениях/приложениях Chrome или он устарел?

Может ли кто-нибудь сказать мне, возможен ли # 2 и как найти пример кода или документацию по правильным классам/функциям для вызова и файлам для включения/сборки?


person Don Rhummy    schedule 17.07.2013    source источник


Ответы (2)


  1. node make generic выводит в каталог build/generic. Этот каталог содержит два подкаталога: "build" и "web".
    "build" содержит "pdf.js", который является фактическим движком PDF.
    "web" содержит программу просмотра, аналогичную той, что находится в < a href="http://mozilla.github.io/pdf.js/web/viewer.html" rel="nofollow">http://mozilla.github.io/pdf.js/web/viewer.html< /а>.

  2. После копирования обоих этих предыдущих каталогов в ваше приложение вы сможете загрузить файл PDF, используя chrome.extensi/web/viewer.html?file=path%2Fto%3Ffile.pdf

  3. PDF.js не требует localStorage. Он используется, если он доступен, для сохранения настроек, таких как положение прокрутки, но если он недоступен, PDF.just продолжает работать без него.

Однако есть одна существенная проблема: PDF.js загружает файлы локализации, используя синхронный XMLHttpRequest. Это не разрешено в приложении Chrome. Вы можете решить эту проблему, сериализовав все файлы в locales, поместив их в один файл JavaScript, загрузив его в viewer.html и упростив l10n.js для чтения переводов из файла, который я только что описал.

person Rob W    schedule 17.07.2013
comment
Спасибо за ответ. Не могли бы вы рассказать немного больше о том, что вы имеете в виду под сериализацией всех файлов в locales? Насколько я вижу, папки locales нет. Там есть папка l10n, ты это имеешь в виду? Кроме того, если я хочу создать свою собственную программу просмотра и не использовать viewer.html, нужно ли мне об этом беспокоиться? Локализация используется pdf.js или viewer.js? - person Don Rhummy; 18.07.2013
comment
@DonRhummy В build/generic/ есть каталог локали. Если вы хотите использовать свою собственную программу просмотра, вам потребуется только pdf.js. Вы можете выбросить все веб-вещи .. - person Rob W; 18.07.2013
comment
Я видел ваш комментарий к @SergeyShevchenko и хотел перепроверить: когда я передаю URL-адрес PDFDocument (или любому другому классу, который мне нужно создать), я передаю его как path/to/file.pdf, а не path%2fto%2ffile.pdf, верно? - person Don Rhummy; 23.07.2013
comment
@DonRhummy Да. URL-кодирование необходимо только в том случае, если вы передаете параметры через строку запроса. Соответствующий источник для анализа параметров находится здесь (как видите, это специфично для viewer.js; вы сказали, что используете доморощенную программу просмотра, поэтому этот комментарий к вам не относится). - person Rob W; 23.07.2013
comment
Извините, что поднимаю старый вопрос, но я хочу перепроверить, сможет ли он загружать файлы в .crx, которое является приложением Chrome, а не расширением Chrome? (У приложений Chrome нет URL-адресов, которые можно поместить в адресную строку, как расширение) - person Don Rhummy; 25.09.2013
comment
@DonRhummy Вы можете получить абсолютный URL-адрес ресурса в своем приложении Chromium с помощью chrome.runtime.getURL< /а> - person Rob W; 25.09.2013

Просто для уточнения: обычно вы должны иметь доступ к файлу, запеченному в вашем CRX, указав относительный или абсолютный путь к нему во внутренней структуре каталогов CRX, например:

'мои файлы/pdfs/example.pdf'

С PDF.js, я думаю, это то, что «путь к файлу.pdf» должен быть в ответе Роба выше, дословно.

person Sergey Shevchenko    schedule 18.07.2013
comment
path%2Fto%2Ffile.pdf — это URL-кодированная версия path/to/file.pdf. Это не обязательно должен быть относительный URL-адрес, он также может быть абсолютным, если у страницы есть разрешение на доступ к URL-адресу. - person Rob W; 21.07.2013