Увидел свет первый работоспособный релиз проекта 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).