Knihovna pro export do PDF a zavádění PHP CS fixer a PHPStan
- BaruCepa
- Člen | 33
Zdravím, v práci momentálně na projektu řešíme, jakou knihovnu použít pro export dat do PDF. Historicky se používal mpdf, ale ten už není úplně ideální, tak hledáme náhradu. Měl by někdo tip, na jaké knihovny se podívat? Vyvíjíme v Nette 3.1. Kamarádka doporučovala dompdf, že na něj taky v rámci Symfony přecházeli právě z mpdf, ale řekla jsem si, že se zeptám i zde, ať je třeba z čeho vybírat :)
Další věc, co bychom chtěli do pracovních projektů zavést, je PHP CS fixer a PHPStan, protože dosud se na toto kašlalo a teď je nás víc juniorů na projektu, tak by bylo fajn to trošku ošéfovat a dát tomu nějakou štábní kulturu. A má otázka je, zda je nějaká specialita ohledně zavádění do Nette? Má vlastně Nette nějaké coding standards, které by se daly provázat s CS fixerem?
- Marek Bartoš
- Nette Blogger | 1260
Všechny php knihovny pro generování pdf z html jsou špatné. Správně
ti dovede pdf vygenerovat jen prohlížeč.
My máme vlastní implementaci pro headless chrome, ale prozatím není
veřejná a instalace na server není úplně triviální.
Doporučuju použít službu Browserless Je trochu pomalejší, ale cena je naprosto
zanedbatelná a na pozadí mají též headless chrome. Je fajn všechny
obrázky, skripty, styly a fonty mít inline v html souboru – jinak musí
dělat request zpět na váš server, aby si z odkazů data stáhnuli.
- Marek Bartoš
- Nette Blogger | 1260
cs fixer tu používá málokdo, většinou narazíš na konkurenční
codesniffer.
Nette má integrované obojí, ale nemám s tím žádné zkušenosti – https://github.com/…ing-standard
Já už několik let mám vlastní (hodně striktní) coding standard postavený
na codesnifferu – https://github.com/…standard-php
- Marek Bartoš
- Nette Blogger | 1260
phpstan – krom phpstan/phpstan si nainstalujte i balíčky
phpstan/phpstan-deprecation-rules, phpstan/phpstan-nette,
phpstan/phpstan-strict-rules a phpstan/extension-installer.
Též je fajn si nastavit level 8, při kterém vám to nahlásí prakticky
všechny reálné chyby. K tomu zapnout bleeding edge, který přidává
nějaká nová pravidla a optimalizace.
Existující chyby nemusíte řešit hned – dá se vygenerovat tzv. baseline,
kam se existující chyby uloží.
Inspirovat se můžete třeba tady https://github.com/…th/tree/v1.x
Všechno relevantní je v composer.json, Makefile a tools/phpstan.neon
Ale stejně doporučuju pročíst si v dokumentaci, co jednotlivá nastavení
dělají.
Počítejte s tím, že budete dostávat nějaké false positives – hlavně kolem formulářů a databáze, kterým phpstan prostě nerozumí. Pokud používáte doctrine nebo nextras/orm, tak pro ně existují phpstan rozšíření.
Editoval Marek Bartoš (27. 2. 12:33)
- Pepino
- Člen | 256
Já mám docela dobré zkušenosti s generováním PDF přes wkhtmltopdf. https://packagist.org/?…
- dms
- Člen | 93
Takhle to jedeme u nás a došli jsme k tomu po spoustu různých pokusech a omylech.
PDF:
- dompdf/dompdf tam kde je kladen důraz na rychlost (např faktury kterých se tiskne třeba 100 naráz)
- https://pptr.dev tam kde je kladen důraz na přesnost vůči grafické předloze (musí se rozjet na node serveru ale funguje skvěle)
Code styling a checker jedeme takovou cz nette klasiku (phpstan, rector a k tomu laravel pint který má úplně primitivní nastavení na psr12)
"require-dev": {
"laravel/pint": "^1.1",
"phpstan/extension-installer": "^1.1",
"phpstan/phpstan": "^1.2",
"phpstan/phpstan-deprecation-rules": "^1.0",
"phpstan/phpstan-nette": "^1.0",
"phpstan/phpstan-strict-rules": "^1.3",
"rector/rector": "^1.0",
"roave/security-advisories": "dev-latest"
}
- mystik
- Člen | 308
Na coding standard bych taky doporučil Code Sniffer. K němu je pak spousta užitečných pravidel v https://github.com/…ing-standard.
U PHPStanu kromě toho co zde už padlo pak můžeš vyzkoušet ještě dvě rozšíření na jejichž vývoji se podílím:
- https://github.com/…hpstan-latte (kontrola latte šablon PHPStanem)
- https://github.com/…-nette-links (kontrola zda se při vytváření linků odkazuje na existujícíc presenter/akci a předávají se správné parametry)
- Marek Bartoš
- Nette Blogger | 1260
Já mám docela dobré zkušenosti s generováním PDF přes wkhtmltopdf
Ten taky používá chrome. Ale nefunguje tak dobře jako browserless, který na pozadí používá chrome skrze puppeteer
dompdf/dompdf tam kde je kladen důraz na rychlost
Bohužel kompatibilita s moderním css se od toho čekat nedá. Ten puppeteer je též hodně rychlý, ale musí si ho pak člověk provozovat sám.
laravel pint
Laravel pint je jen předělaný interface codesnifferu, s předvolenou sadou pravidel, která skoro nic neřeší
spousta užitečných pravidel v https://github.com/…ing-standard.
Používám též, ale je to „sestav si sám“. Když to chceš hodně ladit, tak dopadneš se stovky řádků dlouhou konfigurací jako já https://github.com/…set-base.xml
- Gappa
- Nette Blogger | 207
Marek Bartoš napsal(a):
Já mám docela dobré zkušenosti s generováním PDF přes wkhtmltopdf
Ten taky používá chrome. Ale nefunguje tak dobře jako browserless, který na pozadí používá chrome skrze puppeteer
Technická – wkhtmltopdf používá Qt WebKit, což je něco, co se prakticky nevyvíjí a nemělo by používat:
Samotný wkhtmltopdf je taky prakticky vzato mrtvola – poslední verze z 2020–06–11.
- https://wkhtmltopdf.org/downloads.html
- https://github.com/…/wkhtmltopdf – archivovaný repozitář
- https://wkhtmltopdf.org/status.html
Qt 4 (which wkhtmltopdf uses) hasn’t been supported since 2015, the WebKit in it hasn’t been updated since 2012.
Také to mělo problém s některými SSL certifikáty, prostě to web/obsah nenačetlo.
Ale abych přispěl také něčím konstruktivním :)
Na pár projektech používám Pupetteer, to funguje dobře. Ale je to divně napojené – volání nodejs procesu z PHP.
Existuje Gotenberg (zatím jsem nezkoušel), což je připravený (nejenom) Pupetteer v Dockeru s aktivním vývojem:
Umí to také konvertovat různé dokumenty do PDF pomocí LibreOffice:
Pak ještě klasika mPDF – „na faktury dobrý“ :) Ale složitější layouty/grafika jsou problém.
- Pavel Kravčík
- Člen | 1194
Nám hodně pomohlo na začátku také toto od Slevomatu. Pak to u nás kolega přepisuje na náš CS (závorky na nový řádek apod.).
Editoval Pavel Kravčík (28. 2. 10:11)