… LGPL проект:
Спонсор проекта — Darren Gates, владелец tufat.com.
Естественно, проект жалко — хотя бы потому, что кое-какие из его фич уникальны среди LGPL-инструментов. Хотелось бы найти продолжателя.
… и решил, что сэкономлю время, написав свой собственный велосипед с нуля.
К началу нового 2005 года на свет появился код, способный сжевать простой HTML без таблиц, распарсить простой CSS и сгенерировать соответствующий Postscript. (Возможно, для некоторых будет шоком узнать тот факт, что 90% вычислений, связанных с размещением текста на странице, происходило внутри Postscript-файла).
В январе 2005 было решено сменить лицензию на LGPL (вместо изначально предполагавшейся модели «всё за $5»).
В течение года скрит развивался, полнел, пополнялся фичами и терял баги. К концу года стало ясно что: выбранный подход «запишем всё в Postscript, а принтер сам разберётся» далёк от идеального — объем вычислений рос вместе со сложностью обрабатываемых страниц и даже преобразование с помощью ps2pdf на «большом» компьютере начало занимать несколько секунд. Было решено прекратить насиловать принтеры вычислениями, и, наконец, убрать алгоритмы размещения элементов из postscript. Это изменение было отмечено выпуском html2ps/pdf 1.0
В новом виде скрипт просуществовал почти до конца 2006 года, когда стало окончательно ясно, что так жить дальше нельзя — пользователи просили новых фич в объемах, неожиданных для такого небольшого community, удобного API для встраивания html2ps/pdf в сторонние проекты не было, да и перенесённые с Postscript алгоритмы легли на PHP довольно-таки «странным» образом, совершенно не упрощая внесение изменений.Пришло время второго (и последнего) переписывания ядра и появления версии 2.0.
Первые две трети 2007 года стала, пожалуй, лучшим временем проекта: появление нормального API, оптимизации (нет, скрипт не стал работать действительно быстро; тем не менее, его страстная любовьк ресурсам несколько поуменьшилась) и множество новых возможностей.
С лета 2007 у меня всё больше и больше времени начинает занимать личная жизнь и другой проект. В результате html2ps/pdf получал жалких 1-2 часа в неделю, которые тратились в основном на поддержку скрипта на форуме. В мае 2008 я решил, что продолжать в таком же духе дальше не имеет смысла, поговорил с Дарреном и прекратил попытки найти время для дальнейшей разработки.
Есть неплохо задокументированный API с примерами.
Скрипт старается (с моей точки зрения — достаточно успешно) править в исходном коде страниц такие мелочи, как незакрытые тэги, отсутствующие кавычки вокруг атрибутов, символы <, > и & в неположенных местах и так далее.
Теперь с плохом и страшном. Во-первых, солидная часть кода была написана мной четыре года назад (соответственно, опыта проектирования и программирования было на четыре года меньше); во-вторых, код пережил одну смену стиля кодирования и два переписывания ядра.Естественным результатом этого является то, что кое-где можно встретить код, за который мне стыдно, а кое-где — за который мне очень стыдно. (А еще мне стыдно за жалкое 5% покрытие тестами).
Другая проблема — объем кода (~1.5 мегабайт в ~350 файлах) и достаточно сложная предметная область (вы сами не представляете, насколько большое пространство для толкований на самом деле оставляют стандарты).
Если вы заинтересовались и плохое и страшное вас не напугало — пишите. Буду рад ответить.
- html2ps/pdf
- он же на sf.net,
- он же на freshmeat.net,
- он же на code.google.com.
Разработчики
Главным и единственным разрабочиком является ваш покорный слуга.Спонсор проекта — Darren Gates, владелец tufat.com.
Почему отдаю?
Нехватка времени для собственных проектов. Увы, в последний год я выкраивал от силы 1-2 часа в неделю для работы над html2ps/pdf, что сводилось в основном к ответам на форуме, правке багов по мере их обнаружения и (редко-редко) добавлению новых небольших фич.Естественно, проект жалко — хотя бы потому, что кое-какие из его фич уникальны среди LGPL-инструментов. Хотелось бы найти продолжателя.
Что значит «отдаю»?
- админские права в проектах;
- консультации по поводу того, почему внутри сделано именно так, а не иначе;
- при необходимости — посредничество с Дарреном.
Краткая история
Проект появился на свет осенью 2004 года как клон широко известного html2ps, написанного на Perl. Точнее, клоном он был примерно 5 минут до того момента как я заглянул в код html2ps…$pta=defined $p{"text-align"}?$p{"text-align"}:$body{"text-align"};
$pal=0;
$pal=1 if($pta=~/^c/i);
$pal=2 if($pta=~/^r/i);
$pal=3 if($pta=~/^j/i);
$bgcol=&col2rgb($body{"background"});
if(!$bgcol) {$bgcol="[16#FF 16#FF 16#FF]"};
if(!$p{"color"}) {$p{"color"}="black"};
$tcol=&col2rgb($p{"color"});
$lcol=&col2rgb($a__link{"color"});
if($lcol) {
$Lc="/Lc t D\n/Dl $lcol D\n";
$Lc.=$tcol ne $lcol?"/LX t D":"/LX f D";
} else {
$Lc="/Lc f D\n/LX f D";
}
$pcol=&col2rgb($pre{"color"});
if(!$pcol) {$pcol="[0 0 0]"};
$deftbg=&col2rgb($table{"background"});
… и решил, что сэкономлю время, написав свой собственный велосипед с нуля.
К началу нового 2005 года на свет появился код, способный сжевать простой HTML без таблиц, распарсить простой CSS и сгенерировать соответствующий Postscript. (Возможно, для некоторых будет шоком узнать тот факт, что 90% вычислений, связанных с размещением текста на странице, происходило внутри Postscript-файла).
В январе 2005 было решено сменить лицензию на LGPL (вместо изначально предполагавшейся модели «всё за $5»).
В течение года скрит развивался, полнел, пополнялся фичами и терял баги. К концу года стало ясно что: выбранный подход «запишем всё в Postscript, а принтер сам разберётся» далёк от идеального — объем вычислений рос вместе со сложностью обрабатываемых страниц и даже преобразование с помощью ps2pdf на «большом» компьютере начало занимать несколько секунд. Было решено прекратить насиловать принтеры вычислениями, и, наконец, убрать алгоритмы размещения элементов из postscript. Это изменение было отмечено выпуском html2ps/pdf 1.0
В новом виде скрипт просуществовал почти до конца 2006 года, когда стало окончательно ясно, что так жить дальше нельзя — пользователи просили новых фич в объемах, неожиданных для такого небольшого community, удобного API для встраивания html2ps/pdf в сторонние проекты не было, да и перенесённые с Postscript алгоритмы легли на PHP довольно-таки «странным» образом, совершенно не упрощая внесение изменений.Пришло время второго (и последнего) переписывания ядра и появления версии 2.0.
Первые две трети 2007 года стала, пожалуй, лучшим временем проекта: появление нормального API, оптимизации (нет, скрипт не стал работать действительно быстро; тем не менее, его страстная любовьк ресурсам несколько поуменьшилась) и множество новых возможностей.
С лета 2007 у меня всё больше и больше времени начинает занимать личная жизнь и другой проект. В результате html2ps/pdf получал жалких 1-2 часа в неделю, которые тратились в основном на поддержку скрипта на форуме. В мае 2008 я решил, что продолжать в таком же духе дальше не имеет смысла, поговорил с Дарреном и прекратил попытки найти время для дальнейшей разработки.
Плюсы и минусы
На текущий момент это единственный известный мне LGPL-инструмент, поддерживающий float'ы, position: absolute и position: fixed. Кроме этого, присутствует поддержка таких приятных мелочей(не говоря уже о «базовых» HTML / CSS), как:- Внутреннние и внешние ссылки;
- Сноски;
- Интерактивные формы;
- Генерация оглавления;
- Вставка «водяного знака»;
- Поддержка сложных таблицы c rowspan / colspan;
- Достаточно неплохой алгоритм разбиения на страницы (знающий о существовании CSS-свойств page-break-*, orphans и widows)
- Unicode (успешно применялся для документов, содержавших корейский вперемешку с французским);
Есть неплохо задокументированный API с примерами.
Скрипт старается (с моей точки зрения — достаточно успешно) править в исходном коде страниц такие мелочи, как незакрытые тэги, отсутствующие кавычки вокруг атрибутов, символы <, > и & в неположенных местах и так далее.
Теперь с плохом и страшном. Во-первых, солидная часть кода была написана мной четыре года назад (соответственно, опыта проектирования и программирования было на четыре года меньше); во-вторых, код пережил одну смену стиля кодирования и два переписывания ядра.Естественным результатом этого является то, что кое-где можно встретить код, за который мне стыдно, а кое-где — за который мне очень стыдно. (А еще мне стыдно за жалкое 5% покрытие тестами).
Другая проблема — объем кода (~1.5 мегабайт в ~350 файлах) и достаточно сложная предметная область (вы сами не представляете, насколько большое пространство для толкований на самом деле оставляют стандарты).
Если вы заинтересовались и плохое и страшное вас не напугало — пишите. Буду рад ответить.