Обновить
65
0
Petr Myazin @PQR

Разработчик

Отправить сообщение
А на js сколько этот бот потреблял памяти?
Я длительное время использовал MPDF, но он медленный, поэтому изучал альтернативы, тестировал разные варианты. Ещё один интересный сопособ: рендрить с помощью Node и PhantomJS: www.npmjs.com/package/phantomjs-pdf

Но я в итоге остановился на wkhtmltopdf. Расскажу свой опыт.

Во-первых, есть готовая обёртка на PHP: github.com/mikehaertl/phpwkhtmltopdf (сам ей не пользуюсь, у меня простая задача, все аргументы зафиксированы, нет смысла в этой обёртке)

Во-вторых, генерировать временный html файл на диске не обязательно, wkhtmltopdf умеет принимать исходный html через stdin, если указать параметр "-" (прочерк). На PHP получается как-то так:
$descriptorspec = [
    0 => ['pipe', 'r']; //stdin
    1 => ['pipe', 'w']; //stdout
    2 => ['pipe', 'w']; //stderr
];

//Обратите внимание на аргументы, которые я передаю при запуске wkthmltopdf 
//--disable-smart-shrinking без этого аргумента, всё становится каких-то не правильных пропорций
//--dpi 96 если принудительно не поставить dpi, то размеры указанные в css в милиметрах на печати будут совсем не такими!
//- последний аргумент это прочерк, чтобы передать html через stdin
//bypass_shell (только для Windows): при установке в TRUE процесс будет запущен в обход оболочки cmd.exe
//это нужно для обхода бага https://bugs.php.net/bug.php?id=60181 "proc_open fails to read quoted whitespaced directories in Windows"
$process = proc_open("/path/to/wkthmltopdf --disable-smart-shrinking --margin-left 20mm --dpi 96 -", $descriptorspec, $pipes, null, null, ['bypass_shell' => true]);

if (is_resource($process)) {
    
    //Пишем в stdin html контейнт
    fwrite($pipes[0], $html);
    fclose($pipes[0]);

    //Читаем результаты и ошибки, если они вам нужны в приложении
    $stdOut = stream_get_contents($pipes[1]);
    $stdErr = stream_get_contents($pipes[2]);
    fclose($pipes[1]);
    fclose($pipes[2]);

    $exitCode= proc_close($process);

}


Более подробно про разные параметры принимаемые wkthmltopdf рекомендую почитать здесь: wkhtmltopdf.org/usage/wkhtmltopdf.txt

Да, если нужен header-html и footer-html, то пара временных html файлов на диске всё-таки понадобится.

В третьих, на Linux машинах есть неприятный баг, что шрифты выглядят меньше, чем при печати в PDF этого же html файла с помощью браузера: github.com/wkhtmltopdf/wkhtmltopdf/issues/2171
По этому багу, в том числе, есть много обсуждений на StackOverflow, но фикса в ближайшее время не предвидится, предлагается workaround: github.com/wkhtmltopdf/wkhtmltopdf/issues/2171#issuecomment-139164039

Но я использую другой подход: есть отдельный windows сервер, на котором запускается wkthmltopdf, а обращение идёт к нему через простенький самописный веб-сервис: принимает html контент в POST и возвращает готовый PDF — так и живём.

Вообще по wkhtmltopdf активность на github почти нулевая, баги не фиксятся, но ничего лучше пока не нашел. Кто знает C++ — присоединяйтесь к проекту, внесите свой вклад в opensource!

Есть ещё www.princexml.com — но он платный и жутко дорогой!
Это интересно, расскажите подробнее, в чём причины такой высокой скорости компиляции Delphi? Сам язык значительно проще или есть и другие существенные факторы?
У меня есть, прочитал, уже не нужна. Пишите в личку.
Новость отличная, но из этого поста так и не понял, в чём конкретно профит? Я и раньше мог пользоваться git на windows. Полез смотреть по ссылкам, вот более подробное описание: groups.google.com/forum/m/#!topic/git-for-windows/Pc-0uI6KEAc
Это всё конечно круто, вернее, это лучше чем ничего, но вся эта синхронизация и переходы между продуктами по ссылкам с номерами тикетов и коммитов туда-сюда выглядят костыльно.

Вот крутой план: даёшь единый продукт! Чтобы YouTrack + TeamCity + Upsource + какя-нибудь wiki ala confluence + функционал хостинга репозиториев типа gitlab/github enterprise/stash = JetBrains Ultimate App! И всё это чтобы было написано на Kotlin, работало быстро, без багов, с возможностью использовать разные backend СУБД (Oracle,Postgree,MySQL,MSSQL,Mongo,Rethink...), с удобным инсталлятором standalone версии (которая сама бы обновлялась) и с облачным сервисом!
Им бы отказаться от рельс в пользу Go — вот это будет крутая история успеха!
Вопрос по YouTrack возник: раньше видел на самом сайте YouTrack упоминание, что он создан с помощью MPS, теперь этого упоминания нет. Хотя на самом сайте MPS такой абзац остался (https://www.jetbrains.com/mps/). Вы всё ещё используете MPS в YouTrack? А теперь пишете новую версию YouTrack на Kotlin — т.е. MPS оказался не так удобен?
Если уж вы знакомы с PhpStorm, тот как могли пройти мимо WebStorm для Node.js и клиентской разработки?
walkor/Workerman — Асинхронный событийный PHP-фреймворк.
API на столько простой, что это просто бомба! (по сравнению с тем же ReactPHP).
Ваша ссылка слишком обобщена, вот конкретная по programming language; www.google.com/trends/explore#q=%2Fm%2F09gbxjr%2C%20%2Fm%2F0jgqg&cmpt=q&tz=
То, что PHP иногда быстрее Go, уже были примеры: github.com/dimroc/etl-language-comparison/pull/12
На Yii не пишу, но это действительно удобно, зря мануалы умалчивают.
Из реальной жизни: есть класс описывающий выпадающий список HtmlSelect. Конструктор принимает массив опций. Но иногда не хочется прям так сразу готовить этот массив опций (делать запросы к базе, например). Вместо этого передадим в анонимную функцию, которая умеет строить и возвращать массив опций. А внутри HtmlSelect::render() мы проверим, запускать ли функцию или у нас на руках готовый массив значений. Эдакий DependencyInjection для бедных — вместо целого сервиса предоставляющего список опций мы передаём либо готовые опции (допустим, примитивные [1=>'Yes', 0=>'No']), либо функцию.
Тоже читал статью и ждал такого абзаца «callable vs callback» — интересная тема, жаль упущена!
Да, тоже появилось ощущение «ниши Go». Даёшь сравнение nim и go!
Это гугл-перевод?
Приложение и генераторы были преобразованы в PSR-2. Самые большие изменения в текущем стиле Laravel — это вложенность пространств имен и структур управления, которые теперь пойдут по тот же ветке.

В оригинале: laravel-news.com/2015/06/laravel-5-1-released
The app and generators have been converted to PSR-2. The biggest change from current Laravel style is tabs to spaces and control structures will now go on the same line.

«Пойдут по той же ветке», ага
Да, на Haskell я тоже пробовал переехать: pqr7.wordpress.com/2014/09/03/haskell-vs-php — чёт не пошло.
Что происходит дальше, многие видели неоднократно… Джон не справляется и через 3-6 месяцев покидает компанию.
С точки зрения Джона всё не так уж и плохо — 3-6 месяцев получал ЗП в два раза большую, чем если бы устроился на подходящую его навыкам работу!
Кстати, я в основном программирую на PHP. Какое-то время назад заинтересовался Clojure, посмотрел лекции Рича Хикки, купил книжечку, читаю (люблю сначала толстую книжку прочитать). И тут в статье:
Вердикт: Clojure — функциональный PHP.
Получается в правильном направлении двигаюсь :)

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность

Специализация

Фулстек разработчик
Ведущий
PHP
MySQL