Saturday, May 29, 2010

Формирование pdf из js

Обнаружилась интересная библиотека jspdf - позволяющая создавать простейшие pdf из js. Она основана на коде(скорее принципах и как пример) fpdf. Позволяет менять размер шрифта и размещать текст на странице - pdf возвращается как datauri, отлично работает в linux, но в windows есть несколько проблемок: ie не понимает datauri ни в каких формах, кроме как встроенное в страницу изображение, firefox при установленных обработчиках pdf(например: acrobat reader) происходит переход на этот url и показывается черный экран вместо контента страницы, иначе предложение загрузить. Это решаемо достаточно просто контент отправляется обратно на сервер как параметр POST, в ответ возвращается уже как контент с типом pdf - и все нормально работает.

P.S.: Я немного улучшил эту библиотеку добавив смену цвета шрифтов, поддерживается градации серого и полная RGB палитра.

Monday, May 17, 2010

gtkhtml

Прогресс добавления поддержки css:

libxml2


Может изменять кодировку поэтому дерево всегда приходит в utf8. То есть она частично снимает проблему конвертации - нужна только в ответном запросе.

Библиотека может сама делать простейшие http запросы - это скорее дополнительная возможность, чем очень важная функция для данного случая - получать зависимые части скорее всего не нужно, так как только вызывающая сторона знает откуда получены данные.

После получения полного контента нужно отмечать что пришел последняя часть информации - если не указать то могут быть не полностью обработан полученные данные - разбор полностью выполняется только для полностью корректных частей. Если данные были не корректно отформатированы - то libxml всегда пытается  вернуть корректное дерево.

Сама библиотека:


Отрисовка дерева строиться на собственном виде дерева элементов - поэтому
четкого преобразования полученного DOM дерева  в дерево элементов один в один получить нельзя. Сейчас с моими изменениями пытаемся реализовать почти преобразование один в один - поэтому многие вещи отображаются не корректно. Например картинки - если они находятся на более чем одном уровне вложенности их не показывает, так как описания потока отображения(clue) - поддерживает только определенный вид вложенности - и определенные комбинации не могут быть отработаны так как код реализации выравнивания и раз размещения реализованы не для всех потоков(точнее по части функционала в каждом) .

Замена реализации отрисовки на данном этапе мне кажется не правильным путем - так еще больше оторвет мою ветвь от от основной - и вероятность принятия изменений в основную ветвь еще больше упадет и будет сложнее тестировать, так как появятся новые специфичные ошибки и старые тесты даже при аналогичном отображении будут иметь другую структуры элементов и старые тесты скорее всего проваляться.
Сейчас основной различие - применены все мои изменения для исправления мелких ошибок функциональности(выделены как патчи в bugzilla): исправления относительных путей, поддержка datauri и мелкие исправление в makefile. И не выделенные в качестве изменений: зависимости от гнома при компиляции(gnome-common,gconf), удален парсер html и рекурсивная обработка дерева.

В общем пока планирую - вернуться к не рекурсивному обходу дерева(стандартным старым функциям) и попытаться запостить патч в стандартную ветвь.

Стоит прочитать.....

Недавно дочитал книгу о физике Ричарде Ф.Фейнмане.'Вы, конечно, шутите, мистер Фейнман!' - очень веселая и интересная книга, рекомендовал бы в любом случая прочитать. Физика(и вообще наука) в книге упоминается очень вскользь и очень простыми для понимания фразами, можно читать книгу как собрание интересных историй из жизни.