Полноценная программа для чтения PDF, написанная целиком на JavaScript
5 июля 2011 года
Увидел свет первый работоспособный релиз проекта pdf.js, в рамках которого создано приложение для просмотра PDF-файлов, написанное целиком на JavaScript с использованием технологий HTML5. Код проекта распространяется под лицензией BSD. По заявлению разработчиков в представленной версии им удалось полностью обеспечить корректное отображение PDF-обзора JavaScript-движка Tracemonkey, которое использовалось в качестве эталонного PDF-документа. Протестировать pdf.js в работе можно на данной странице.
Из особенностей pdf.js можно отметить:
- Поддержка масштабирования и навигации по страницам,
- Поддержка динамической загрузки шрифтов Type 1 и TrueType;
- Решение проблем с качеством отображения элементов страниц, например, отображаются тени для рамок и градиенты;
- Попиксельный вывод содержимого;
- Возможность вывода диаграмм и графиков;
- Реализация навигационного элемента, выполненного в виде столбца с эскизами страниц;
- Поддержка работы со сжатыми объектами;
- Так как код написан на безопасном высокоуровневом языке, он не подвержен уязвимостям, свойственным бинарным плагинам для просмотра PDF.
С технической стороны, в pdf.js используется своеобразная JIT-компиляция PDF: изначально представленные в файле бинарные массивы преобразуются в потоки байткода PDF, который затем транслируется в JavaScript-представление и выполняется. Сгенерированная на основе PDF JavaScript-программа выводит данные через HTML-тег canvas. При этом транслируемый в JavaScript байткод PDF можно разделить на простой и сложный. Простой код сводится к таким операциям, как "нарисовать кривую" или "вывести текст". Сложный код определяет такие операции, как "заполнение областей с затенением по маске". Усложняет реализацию то, что интегрированные в PDF данные, такие как шрифты и изображения, могут храниться в сжатом или закодированном виде.
К сожалению не обходится и без проблем, таких как трудность реализации поддержки вывода на печать и выделения текста при попиксельном формировании изображения. Кроме того, возможностей canvas недостаточно для полноценного рендеринга PDF. Потенциальным решением является дополнительное задействование SVG, но использование SVG потребляет значительно больше ресурсов. В качестве компромисса изучается вариант с начальной быстрой отрисовкой через canvas, формированием более качественного SVG-варианта в фоне и замещением canvas-варианта на SVG-вариант, после того как изображение будет готово.
Из планов на будущее отмечается реализация поддержки более качественного пиксельного рендеринга документов, оформленных в соответствии со спецификацией PDF 1.7. Ожидается расширение числа поддерживаемых web-браузеров (в настоящее время разработчики используют ночные сборки Firefox, в других браузерах полная работоспособность пока не гарантируется). Переработка внутренней архитектуры для поддержки технологии WebWorkers для обеспечения параллельного выполнения задач, требующих интенсивных вычислений. Оптимизация отзывчивости интерфейса и создание варианта для встраивания pdf.js в web-приложения.
В течение трех месяцев планируется реализовать набор возможностей, достаточных для просмотра большинства типичных PDF-документов. Проект развивается при поддержке и участии разработчиков Mozilla, поэтому не удивительно, что конечной целью разработки является интеграция pdf.js в Firefox для использования в качестве встроенного в браузер PDF-просмотрщика (в браузер Chrome дополнение для чтения PDF встроено начиная с выпуска 6).
Источники
править
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.