Рендеринг PDF с помощью HTML5 и JavaScript (pdf.js)

    Андреас Гал (Andreas Gal) с коллегами из Mozilla разработали первый нормальный движок pdf.js для отображения PDF средствами HTML5/JavaScript (демо).

    По мнению разработчиков, рендеринг PDF непосредственно в браузере гораздо удобнее для пользователя, потому что ему не придётся думать об установке внешних программ для просмотра PDF, многие из которых к тому же не полностью поддерживают важные спецификации PDF и заставляют осваивать непривычный интерфейс (не такой, как в браузере).

    Внедрение в браузер нативных или open-source плагинов тоже нельзя назвать идеальным решением, потому что это потенциальная брешь в безопасности.

    Разработка pdf.js идёт уже более месяца, но только сейчас разработчики решили объявить об этом на широкую аудиторию. Они хотели сначала завершить основные фичи (шрифты Type1, градиенты и др.), чтобы движком можно было хоть как-то пользоваться. Но совершенной неожиданностью стал большой интерес сообщества к этому проекту, а шила в мешке не утаишь, так что пришлось раскрыть карты раньше срока.

    План проекта таков. Сначала они хотят довести pdf.js до идеального (попиксельно неотличимого) рендеринга на одном тестовом документе: это научный доклад с описанием JavaScript-компилятора TraceMonkey. Именно этот документ отображается в вышеупомянутом демо. Конечно, там ещё много глюков и артефактов рендеринга, но в целом понятно, о чём речь. Прямо сейчас допиливают поддержку шрифтов Type1 PostScript, так что скоро демо-документ станет гораздо приятнее на вид.

    Дальше планируется реализовать другие опции PDF через canvas и обсудить, как можно с помощью JavaScript реализовать самые сложные спецификации PDF, для которых нет прямого соответствия в HTML Canvas.

    Разработчики считают, что в течении трёх месяцев они смогут довести pdf.js до такого уровня, что он сможет отображать большинство PDF-документов в Сети. В будущем можно ожидать, что pdf.js станет нативной частью браузера Firefox (сначала выпустят расширение).

    Авторы проекта также надеются, что и другие браузеры последуют их примеру и внедрят у себя поддержку pdf.js, код которого опубликован под свободной лицензией (модифицированная BSD).
    Метки:
    Поделиться публикацией
    Похожие публикации
    Комментарии 34
    • –7
      Ну наконец-то можно отказаться от флеша и спокойно все пдфки читать с телефона. Андреас Гал с коллегами из Mozilla — молодцы!
      Вот только, если не ошибаюсь, сначала грузится вся пдфка, а не по странице. Посмотрим во что это всё выльется, небось скоро и плагин для Jquery выйдет.
      • –2
        Создать из pdf.js плагин для jQuery — это тривиальная задача по инкапсуляции готового кода. Вот только весить такой плагин будет далеко не мало.
        • –1
          Современные реалии такие, что очень часто ради одной-двух функций, люди таскают с собой полноценные библиотеки. И учитывая, что интернет во многих местах не особо и дорогой, веб-зразработчики(не все конечно) считают, ну 70кб погоды не сделают.
          • 0
            Погоду делает не столько собственно вес js-файла (который качается за доли секунды), сколько объем самого кода (который браузеру нужно распарсить и что-то с ним сделать).
        • +1
          вы действительно думаете, что с jQuery(как с блютуф) все вещи становятся лучше?
          • +1
            Эм… а где я это сказал? Просто сейчас даже самое простенькие вещи в виде плагинов выпускают.
          • +3
            А причём флеш и пдф? Флеш даже «нативно» то пдф не поддерживает, разве что через спец конверторы SWFTool или FlashPaper…
            • +1
              FlashPaper — это отображение swf, полученного из SWFTool, причем загружает он swf крайне неаккуратно, тратя безумное кол-во памяти и процессора, из-за реализации стримера.
          • +2
            Как кстати! Пусть еще сырой, но я уже знаю, где его применю :)
            • +2
              многие из которых к тому же не полностью поддерживают важные спецификации PDF

              А будет ли pdf.js поддерживать все эти спецификации? Другими словами — по каким причинам не поддерживаются спецификации в существующих решениях и не будут ли эти же причины мешать и в pdf.js?
              • +2
                В Опере не завелся тестовый пример, а в Хроме всё ок.
                Жду поддержки typed-arrays в этом браузере :)
                • +3
                  Отличная новость. Пора уже уходить от концепции «всё во флеше».
                  • +3
                    Эх, а текст выделить то нельзя, кажется :(
                    • 0
                      Подскажите, есть ли аналог данного движка, но для формата DjVu?
                      • +4
                        Не думаю. Для DocMe я пишу нативный рендер на флеше, очень много подводных камней в спецификации DJVU. Вейвлеты там (IW44) — самая неприятная штука. Работа на 50-55% сделана, после чего, полагаю, можно будет портировать и на js (только, конечно, для очень современных браузеров)
                      • 0
                        А можно наоборот? Из pdf в html? А то какие-то уроды выпустили указ по которому все положения и приказы на сайте гос. органов должны быть в формате html + скачивание…
                        • 0
                          Из PDF можно нагенерировать картинок, которые потом вывесить на сайте. А полноценный OCR с правильной разметкой — врядли получится.
                          • 0
                            Быстрый поиск в Google нашёл PDFTOHTML. Но у него лицензия GPL. И в demo-примере кое-где «мусор» наблюдается.

                            Вообще, многие журналы делают две картинки страницы с высоким и низким разрешением и вывешивают это дело в интернет в специальном просмотрщике.
                          • 0
                            Сам сейчас занимаюсь такой же задачей. Из платных тулзовин/sdk могу посоветовать только это www.investintech.com/products/developer/ — она у меня лучше всего конвертировала. Но так как клиент не согласился покупать, пришлось писать свой конвертер, использую iTextSharp и PDF Clown.

                          • 0
                            Вещь отличная, но пока что кириллицу не понимает (или такая пдфка попалась) и большие пдф файлы не открывает. Буду следить за проектом.
                            • 0
                              Посмотрите продуты Adeptol они рендерят на js сотни форматов включая пдф. И в целом вполне читабельно рендерят хотя конечно никакой попиксельной идентичности
                              • 0
                                А где вы там js-вьювер нашли? Флеш-вьювер вижу, а js — нет.
                                • 0
                                  Могу ошибаться, на моей памяти их продукт Document Viewer в appliance версии имел js обёртку. Сейчас посмотрел их клауд сервис действительно на флеше.
                                  • 0
                                    Обертка-то всегда была, только она была мостом к флешу, и только. А так, пользуются они обычным swftools, и отображением полученной swf.
                              • 0
                                А цивильная генерация pdf из шаблонов html+css на js в браузере в природе существует?
                                • 0
                                  гм… внезапно пришло на ум использование виртуального pdf принтера
                                  • 0
                                    а виртуальный принтер стоит у всех пользователей и есть js доступ к нему?
                                    • 0
                                      Нет конечно же, хотя для Линукса фактически да, а диалог печати то через js уже сто лет вызывается.
                                      Но в целом согласен что система получается интерактивная, а не автоматическая.
                                • +1
                                  Скажите, это только у меня в «демо» открывается только белый лист? Причем как в ФФ 5, так и в Хроме 12
                                  • +1
                                    Подождите, у меня через несколько минут появилось.
                                    • 0
                                      Промотайте вперёд. У меня почему-то страницы, которые ближе к концу, моментально рендерятся, остальные похуже; первая так и осталась белым листом.
                                    • 0
                                      А почему бы не написать интерпретатор postscript а потом использовать тот же ghostscript для интерпретации pdf?
                                      • 0
                                        А можно ещё так.
                                        • 0
                                          Именно этот документ отображается в вышеупомянутом демо.
                                          Поправьте демо, плиз. Битая ссылка.

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