Generování pdf pomocí mPDF & Template

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
mfajfr
Člen | 26
+
-5
-

Ahoj,
podařilo se mi vygenerovat PDF, ale to bohužel obsahuje prvky {$var} a nejsou nahrazeny za jejich hodnoty.
Styl „__toString()“ nepomáhá.

Cesta k souboru je správná.

David Kudera
Člen | 455
+
+8
-

Ahoj, myslím, že máš chybu na řádku 83, ale nejsem si úplně jistý.. Mohl by jsi jen tak pro jistotu poslat kód, který ti nefunguje správně?

mfajfr
Člen | 26
+
0
-

To jsem tušil, že to někdo napíše, tak snad ten kód pomůže.

<?php
abstract class AbstractPDF {
    protected $_css;
    protected $_template;
    protected $_mpdf;

    public function __construct($template, $css) {
        $this->_css = $css;
        $this->_template = new FileTemplate();
        $this->_template->setFile(__DIR__ . '/../../templates/' . $template);
        $this->_mpdf = new mPDF('utf-8', 'A4');
    }

    public function getContentOfCSS(){
        return file_get_contents($this->_css);
    }

    public function getContentOfTemplate(){
        return $this->_template->__toString();
    }

    public function writeHTML(){
        //$this->_mpdf->WriteHTML('<style>' . $this->getContentOfCSS() . '</style>', 1);
        $this->_mpdf->WriteHTML($this->getContentOfTemplate());
    }

    public function download($name = 'neznamy_nazev'){
        $this->_mpdf->Output($name, 'D');
    }

    public function show($name = 'neznamy_nazev'){
        $this->writeHTML();
        return $this->_mpdf->Output($name, 'I');
    }

    public function save($path){
        $this->_mpdf->Output($path, 'F');
    }
}
?>
David Matějka
Moderator | 6445
+
0
-

nemas registrovany latte filter: https://latte.nette.org/cs/#…

David Kudera
Člen | 455
+
0
-

Bezva :-) víš bez kódu se problém hledá docela složitě no.. prostě není to jen tak

no a jinak ti teda hned pro začátek poradím použít pdfResponse . Běží to v pohodě a je tam i návod, jak správně použít šablony. Je to jen takový šikovný obalovátko kolem celýho mPDF

ps: doufám, že nenapíšeš „na co jsem teda posílal ten kód“.. metod na tvoření pdf je totiž více ;-)

jo a vlastně možná kdyby jsi i vzal jen ten kousek kódu z odkazu, jak vytvořit šablonu, tak třeba by to fungovalo i s tím tvým řešením.. Tuším totiž, že jen takhle new FileTemplate toho sám o sobě moc umět nebude

mfajfr
Člen | 26
+
0
-

Děkuji, problém byl skutečně v registraci filtru.

Co se týče pdfResponse, tak ho zkusím nastudovat.

ViPEr*CZ*
Člen | 817
+
0
-

Když už to tu je… nemáte nějakou zajímavou alternativu pro mPDF, neboť to je poměrně dobrej žrout prostředků??? Takovou tabulku o 50 stránkách s hlavičkama a patičkama je poměrně opruz generovat. Jak na RAM, tak na time. Každá rada dobrá :-)

David Kudera
Člen | 455
+
0
-

Na něco velkýho bych asi nejspíš zkusil použít wkhtmltopdf.. možná.. jestli by to bylo lepší

Casper
Člen | 253
+
0
-

Porovnání mPDF a wkhtmltopdf je nesrovnatelné. Přecházel jsem přesně takto a generování ve wkhtmltopdf je asi tak 10× rychlejší pro větší soubory. Také podpora css je nesrovnatelná. Pokud ovšem potřebuješ čistě PHP řešení a nemůžeš spouštět externí skripty, asi bohužel nic lepšího než mPDF nenajdeš. Existuje sice například DomPdf (lepší podpora css, trochu rychlejší generování, …), ale nemá tak dobrou podporu UTF-8 jako mPDF. Při generování PDF totiž vkládá celý font do PDF, nikoliv pouze subset jako to dělá mPDF. Díky tomu jsou soubory zbytečně velké. Nebo alespoň tak to bylo v době, kdy jsem hledal alternativu v PHP (rok dva zpátky?).

Knihovna wkhtmltopdf má ale také jednu mouchu a to je problém s kerningem pro některé fonty. Více viz staré a nové issue.

ViPEr*CZ*
Člen | 817
+
0
-

Tuhle knihovnu jsem také zkoušel… bohužel mi v tom spousta věcí co šlape v mPDF nešla. Například problém jsem měl s tím, když bych chtěl mít očíslované stránky. Nebo pokud bych chtěl mít hlavičku jen na první stránce nebo pokud bych chtěl mít hlavičku tabulky na každém listu. Takový poměrně mouchy, ale vcelku důležitý. Jinak je pravda, že pokud má člověk server, je wkhtmltopdf rozhodně lepší varianta pro lehčí htmlpdfka… rychlost i ram jsou úplně někde jinde.