Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Если вдруг кого-то интересует, как я рендерю Снапшоты... Лучше решение?

49K
20 ноября 2011 года
vorobej
129 / / 17.11.2011
Я рендерю снапшоты исопользуюя простейшую прогу: wkhtmltoimage (wkhtmltopdf)

http://code.google.com/p/wkhtmltopdf/

Очень сильная вещь, особенно для генерации PDF файлов. Использует WebKit. Очень советую.

Если кто знает более мощное решение, прошу отписаться... Ибо к сожалению не все сайты могу отрендерить.
Но те, какие могу (95%) делает кстати очень быстро. Рендерингом на ФидБаке занимается одельный Perl демон (т.е. не напрямую через PHP, по причине безопасности, но и это возможно)
4
20 ноября 2011 года
mike
3.7K / / 01.10.2002
Спасибо. Уже давно воюю с этой проблемой. В основном в фоне. Столь простого решения не ожидал увидеть.

Заработало с первого раза.
4
20 ноября 2011 года
mike
3.7K / / 01.10.2002
Поторопился. Попробуй сделай снапшот с yandex.ru
49K
20 ноября 2011 года
vorobej
129 / / 17.11.2011
Пожалуйста =) На самом деле я почти пол дня потратил на поиск решения (еще когда мне нужно было рендерить ПДФ). Не смотря на то что:

а) И правда сработало с первого раза
б) В какой-то независимой статистике я читал, что это САМОЕ быстрое решение на рынке

откопать его было не так просто. Я просто не cдавался именно потому, что хотелось найти универсальное решение, HTML/CSS to PDF, чтобы облегчить себе жизнь в дальнейшем раз и навсегда. Т.е. по сути я им пользуюсь в своей другой система для генерации Фактур, таблиц, да в принципе чего угодно по схеме:

1. Парсер движка генерирует в принципе тот же ХТМЛ код, что выводит на экран (только css меняет на более принт френдли)
2. Я его сохраняю в отдельный хтмл файл на локальном диске (сss там уже встроен в файл)
3. Запуская программу Перл демоном.
4. На выходе готовый ПДФ, обычно в шикарном качестве (даже JS Jquery FLOT графики рендерит без труда)
5. Все счастливы
49K
20 ноября 2011 года
vorobej
129 / / 17.11.2011
Цитата:



Да, вот яндекс не берет в упор... YouTube тоже..

Притом включен JS или нет без разницы.. Я с этим еще буду сражаться

Edit: Самое большое подозрение на Флеш. Я вот сейчас к примеру нашел сайт только с флеш роликом и он тоже отказывается:
http://www.albinoblacksheep.com/flash/potter

49K
20 ноября 2011 года
vorobej
129 / / 17.11.2011
Это ВЕЛИКАЯ победа!! =))

http://www.feedbackme.org/83fi37

http://www.feedbackme.org/19cfg38

=) Как? Элементарно: --use-xserver.

Не поверишь, но догадался методом тыка =)) Единственное, что X Server должен быть запущен, что кстати приводит к другому роду проблем..
369
20 ноября 2011 года
Kesano
451 / / 09.10.2007
Респект. Толковая работа. Не юзал, но сам факт выкладывания такого решения, которое может быть крайне полезным для всякого рода онлайн - каталогов - супер.
49K
20 ноября 2011 года
vorobej
129 / / 17.11.2011
Спасибо! ;)

Вот кстати реальный пример того, как работает с этим мой Perl демон на ФидБаке:

Я делаю 3 попытки получить снапшот:
1. Х Сервер с ЖаваСкрипт
2. Х Сервер без Жаваскрипт
3. Без Х сервера и без ЖаваСкрипт

Код:
system('wkhtmltoimage --use-xserver --width 1024 --height 768 \''.$DT[1].'\' '.$file);
                   
                    my $filesize = -s $file;
                   
                    # Try 2
                    if(!$filesize) {
                        $status = 'NJS ';
                        system(wkhtmltoimage --use-xserver --width 1024 --height 768 --disable-javascript \''.$DT[1].'\' '.$file);
                    }
                   
                    $filesize = -s $file;
                   
                    # Try 3
                    if(!$filesize) {
                        $status = 'NXS ';
                        system('wkhtmltoimage --width 1024 --height 768 --disable-javascript \''.$DT[1].'\' '.$file);
                    }
                   
                    $filesize = -s $file;


Проверка через $filesize очень удобна, поскольку если у проги не получается сделать снапшот, файл на выходе имеет нуль размер.


Далее, как обойти вовпрос постоянно включенного X Сервера не подключая монитор... Ну тут несколько вариантов. Я использую Nomachine NX Server. Запускаю удаленную Х сессию для пользователя только для демона, запускаю сам демон и отключаюсь.. Вауля! магия сделана.

Но у этого решения свои последствия, а именно: если сервак отключится (к примеру обрыв электричества, УПС не выдержал и сервак сам себя отключает) то потом после перезапуска, демон будет работать в "пассивном" режиме, выполняя только снапшоты "попытки 3".. Запускать Х сервер придется в ручную...
4.7K
20 ноября 2011 года
bobik02
140 / / 11.09.2007
Цитата: vorobej

Запускать Х сервер придется в ручную...


Почему вручную ?
Например rc.local прописать. Даже если из под юзера надо su username -c ваша команда запукса.

274
20 ноября 2011 года
Lone Wolf
1.3K / / 26.11.2006
Цитата: vorobej

Далее, как обойти вовпрос постоянно включенного X Сервера не подключая монитор... Ну тут несколько вариантов. Я использую Nomachine NX Server. Запускаю удаленную Х сессию для пользователя только для демона, запускаю сам демон и отключаюсь.. Вауля! магия сделана.


а xvfb, не проще?

49K
20 ноября 2011 года
vorobej
129 / / 17.11.2011
Цитата:
Например rc.local прописать. Даже если из под юзера надо su username -c ваша команда запукса.



Тут дело не в команде, а в скорее постоянно активной сессии X Сервера

Цитата:
а xvfb, не проще?


Проще, в 1000 раз проще! Точнее правильнее... Только вот ну никак я не смог с ней подружиться.. Не запускается в упор.. Куче ошибок на выходе

274
21 ноября 2011 года
Lone Wolf
1.3K / / 26.11.2006
а какой номер display-а использует wkhtmltoimage по умолчанию, или как задать нужный?
49K
21 ноября 2011 года
vorobej
129 / / 17.11.2011
А вот этого я кстати не знаю, но знаю что для того, чтобы wkhtmltoimage так же генерировал Флеш, используют примерно следующую форму:

xvfb-run --server-args="-screen 0, 1024x768x24" ./wkhtmltoimage-amd64 --use-xserver --javascript-delay 2000 --window-status Done --enable-plugins http://www.hulu.com hulu.jpg

Но я так и не смог ее запустить. Там надо ставить куче библиотек дополнительно и я просто не стал заморачиваться в силу не хватки времени и нашел более простое, но конечно же временное решение.
14
22 ноября 2011 года
Phodopus
3.3K / / 19.06.2008
по умолчанию все нормальные программы обычно используют $DISPLAY
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог