Knihovna pro export do PDF a zavádění PHP CS fixer a PHPStan

BaruCepa
Člen | 33
+
0
-

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 | 1173
+
+1
-

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 | 1173
+
+1
-

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 | 1173
+
+2
-

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 | 249
+
0
-

Já mám docela dobré zkušenosti s generováním PDF přes wkhtmltopdf. https://packagist.org/?…

dms
Člen | 87
+
+1
-

Takhle to jedeme u nás a došli jsme k tomu po spoustu různých pokusech a omylech.

PDF:

  1. dompdf/dompdf tam kde je kladen důraz na rychlost (např faktury kterých se tiskne třeba 100 naráz)
  2. 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 | 291
+
+1
-

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:

  1. https://github.com/…hpstan-latte (kontrola latte šablon PHPStanem)
  2. 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 | 1173
+
0
-

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 | 199
+
0
-

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.

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.

dakur
Člen | 493
+
0
-

Na code style je super ecs od Tomáše Votruby, který sdružuje jak code sniffer, tak cs fixer. Jen se tím člověk musí prokousat, protože ne vždy je úplně jasné, jak se co používá, a taky upgrade guidy by zasloužily víc péče.

Pavel Kravčík
Člen | 1182
+
0
-

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)