Евгений
Спасибо
Alexey Mishurovskiy
Всем привет! чем генерировать красивые PDFки ? кроме wkhtml толи лыжи не едут, то ли я его готовить не умею.
Alexey Mishurovskiy
по уровню *деца как то так
Alexey Mishurovskiy
А чем не понравился wkhtml?
криво и не так как надо
Alexey Mishurovskiy
я говорю - может я его готовить не умею..
Елнур
я говорю - может я его готовить не умею..
поэтому и спрашиваю, какой именно аспект. Может со шрифтами проблема, отступы, поля страницы, и т.д.
Павел
Всем привет! чем генерировать красивые PDFки ? кроме wkhtml толи лыжи не едут, то ли я его готовить не умею.
Хз почему у нас такой странный флоу на одном из проектов - делаем excel а потом конвертация в pdf. Мб потому что доки и всякие таблицы.
Alexey Mishurovskiy
пытались счет сделать - все поехало, печати, подписи, вообще все не так как в окне браузера
Alexey Mishurovskiy
может какие-то секреты верстки есть под PDF?
Елнур
пытались счет сделать - все поехало, печати, подписи, вообще все не так как в окне браузера
Понятно. Лично я создаю отдельную верстку под PDF с нуля, со своими стилями, тэгами и т.д.
Елнур
если в основном таблицы, то через LibreOffice
Елнур
Можно посмотреть на сторону клиентских генераторов PDF на js
Alexey Mishurovskiy
если в основном таблицы, то через LibreOffice
То есть берем офис, делаем страницу, оформляем, делаем HTML и кормим wk?
Елнур
Alexey Mishurovskiy
нет. Делаем офис и через него сохраняем как pdf
ну не, у меня на лету данные собираются
Vlad
у пхп кстати какие то беды с туллингом в плане офисов/пдф
Vlad
что то есть. но работает максимально убого
Елнур
У меня все ок
тоже wkhtml?
Alexey Mishurovskiy
у пхп кстати какие то беды с туллингом в плане офисов/пдф
Да так то не проблема микросервис поднять и из него класть в S3 готовый pdf )
Юра
тоже wkhtml?
Нет что-то другое
Alexey Mishurovskiy
у питона гораздо лучше в этом плане
Да так то от языка не зависит. тот же wk не имеет к пыху никакого отношения
Елнур
у питона гораздо лучше в этом плане
насколько я знаю, wkhtml и сделан на python
Юра
mpdf попробуйте у меня все ок с ним
Vlad
там плюсы
Юра
А ну так. там главное чтобы быстро а не качественно)
Alexey Mishurovskiy
насколько я знаю, wkhtml и сделан на python
Так почитаешь чаты, такое чувство что пол вселенной сделано на питон
Alexey Mishurovskiy
а по факту убогий язык как и го
Елнур
https://github.com/wkhtmltopdf/wkhtmltopdf
пардон, посмотрел их packaging репозиторий)
Vlad
тот же самый офис. это вообще беда. сгенерировать красивую табличку и чтобы не текло это добро
Vlad
на сколько я знаю всего лишь один инструмент годный есть.
Vlad
И какое же?
https://github.com/wilsonglasser/spout
Vlad
оригинал box/spout
Vlad
Да так то от языка не зависит. тот же wk не имеет к пыху никакого отношения
ну как сказать)) питон полюбили всякие аналитики/data-science, а им надо часто генерировать отчеты. Вот и появились неравнодушные люди и наколбасили инструментов
Null
Врываюсь с ноги, так сказать. https://www.npmjs.com/package/pdfkit Очень простая и удобная штука.
Александр
Всем привет! чем генерировать красивые PDFки ? кроме wkhtml толи лыжи не едут, то ли я его готовить не умею.
Можно за морочится, то через печать chroma сделать) У меня как-то был проект, там так сделали.
Александр
Это как?
Формируем html код, потом можно его напрямую в хром пульнуть через команду, он вернёт pdf файл. Либо можно использовать что то типо такого https://gotenberg.dev/
Diana Dvoryak
объясните пж, что означает эта строчка, особенно: doctrine.orm.entity_manager и выдает ошибку, deprecated, как можно исправить?
Юра
Это Dependency Injection
Max
объясните пж, что означает эта строчка, особенно: doctrine.orm.entity_manager и выдает ошибку, deprecated, как можно исправить?
Получает из контейнера симфони entity manager. В новых версиях так не принято делать (если ещё работает). Нужно получить em через DI в конструкторе
Юра
Симфони вырезает из контейнера все непубличные сервисы которые никуда не инджектятся и в новой версии ты получишь ошибку что сервис was inlined or removed from container
Max
Публичные сервисы разве работают за пределами тестов?
Юра
Тестовый кернел просто по-моему отдельным пасом делает все сервисы публичными
Max
Неа, пришлось в тестовом конфиге писать для всех дефолт - public
Юра
Странно вроде в доке даде у них написано
Max
Мб я чёт не так вызывал 🤷‍♂
Max
Ты про юниты говоришь?
Юра
Да
Юра
Юра
If you need to test private services that have been removed (those who are not used by any other services), you need to declare those private services as public in the config/services_test.yaml file
Юра
А вон оно что
Max
Кстати, есть тупой вопрос. Всегда думал что когда в юнит тестах мокаешь бд, реальная бд не нужна. Но мы катнули в пайплайн без бд и тесты не взлетели. Wtf
Alexey Mishurovskiy
А что значит мокаешь бд
Max
По факту он льет фикстуры и прочее в бд, а после тестов стирает. А нет способа обойтись без бд?
Alexey Mishurovskiy
Ну зависит от приложения
Alexey Mishurovskiy
Если приложение использует бд то бд надо
Alexey Mishurovskiy
В чем пррьлем в пайплайне либо подключиться либо поднять контейнер и потом его потушить
Max
А что значит мокаешь бд
Да разные тесты есть. С дата фикстурами Или просто с вызовом em->flush(), затем поиск
Alexey Mishurovskiy
Ну у меня вот есть биллинг в приложении, который теститс более чем 100 ассертами после разных состояний
Alexey Mishurovskiy
Как тут без бд
Max
В чем пррьлем в пайплайне либо подключиться либо поднять контейнер и потом его потушить
Не проблема. Но юниты должны работать без внешних сервисов, нет?
Max
Как тут без бд
Есть абстракция над бд - доктрина
Alexey Mishurovskiy
Прекрасно, как ты на тестах без бд отработаешь например внешние ключи или несовпадение типа, например при забытой миграции
Alexey Mishurovskiy
Задача у тестов в первую очередь убедится что новый код не сломал работу приложения
Max
Имхо это уже тестирование функционала, а не юнит
Alexey Mishurovskiy
Вам шашечки или ехать?
Павел
Неа, пришлось в тестовом конфиге писать для всех дефолт - public
Вроде с какой то старой версии создается отдельный test.container но все равно лучше прописать. Хотя даже это нормально раньше не помогало
Павел
Ну и хорошйи юнит, где и мокать ничего не надо
Павел
А где надо мокать перемокать - что то идет не совсем так скорее всего