Пользователь
102,0
рейтинг
17 июня 2011 в 01:24

Разработка → Рендеринг PDF с помощью HTML5 и JavaScript (pdf.js)

HTML*
Андреас Гал (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).
Анатолий Ализар @alizar
карма
744,5
рейтинг 102,0
Пользователь
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (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
    Именно этот документ отображается в вышеупомянутом демо.
    Поправьте демо, плиз. Битая ссылка.

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