Komponenta pro generování PDF v nette2?

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

Dobrý den, chci se zeptat, zda je nějaká komponenta na generování pdf, která je funkční v novém nette, nebo jestli někdo nemá nějaké svoje řešení, co by poskytl ke generování faktur do pdf.

Děkuji

Jack06
Člen | 168
+
0
-

v addonech jsou označeny šedivě a co jsem koukal, tak šedivě je tam to co v nette 2 nefunguje, tak proto jsem napsal sem :-)

iguana007
Člen | 970
+
0
-

já používám mPDF, ale ne jako addon, prostě to v akci includnu, napíšu 5 řádků PHP a je to …

Filip Procházka
Moderator | 4668
+
0
-

Nechat indexovat mPDF robotLoaderem je docela sebevražda. Máš ponětí, kolik to může sežrat paměti, „roztokenovat“ 25MB soubor? :)

Jack06
Člen | 168
+
0
-

Jde mi o to, že potřebuju udělat nějaký základní layout v nějakém wysiwyg editoru, aby se pak dal lehce měnit, takže jestli se nemylím, pokud ano budu rád za komenty, tak by byl nejlepší https://componette.org/search/?…

JuniorJR
Člen | 181
+
0
-

@HosipLan: tak to mi jaksi nedošlo, neměl jsem představu o tom, že má tolik, v tom případě beru svůj předchozí post zpět

crempa
Člen | 198
+
0
-

Problem je ze obecne pro PHP neexistuje slusne reseni pro mail merge (a generovani PDF obecne). Vsechny HTML2PDF reseni jsou jen takove znacne nekoncepcni nahrazky. Pokud bych mel switchnout na Javu tak to bude kvuli nastrojum typu jasperreports

iguana007
Člen | 970
+
0
-

HosipLan napsal(a):

Nechat indexovat mPDF robotLoaderem je docela sebevražda. Máš ponětí, kolik to může sežrat paměti, „roztokenovat“ 25MB soubor? :)

mam ho mezi Disallow v netterobots.txt, neboj :)

kaspr11
Člen | 3
+
0
-

iguana007 napsal(a):

HosipLan napsal(a):

Nechat indexovat mPDF robotLoaderem je docela sebevražda. Máš ponětí, kolik to může sežrat paměti, „roztokenovat“ 25MB soubor? :)

mam ho mezi Disallow v netterobots.txt, neboj :)

Muzes nejak naznacit, jak si to v Robotloaderovi „disallowal“ :) ? Dik, moc.

Jan Endel
Člen | 1016
+
0
-
kaspr11
Člen | 3
+
0
-

pilec napsal(a):

viz dokumentace

dík, ale řve to pořád stejně…

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 35 bytes) in /var/www/program/libs/Nette/Loaders/RobotLoader.php on line 279

PS: Omlouvám se, ale prostě to nechce jet.. :)

Patrik Votoček
Člen | 2221
+
0
-

hod si do aresare s tou knihovnou soubor

netterobots.txt

Disallow: *
kaspr11
Člen | 3
+
0
-

Patrik Votoček napsal(a):

hod si do aresare s tou knihovnou soubor

netterobots.txt

Disallow: *

díky za pomoc, ale problém zůstal.. jen na 20 bytech „(tried to allocate 20 bytes)“;

Asi by bylo vhodné dodat že verze mého nette je Nette Framework 2.0-beta (revision d2c39f5 released on 2011–07–02)

jchorvat
Člen | 12
+
0
-

@Hosiplan: mPDF nema 25MB ale iba 1.2MB

Je mozne pridat na zaciatok suboru toto: #//netteloader=mPDF a robotloader ho nebude parsovat

David Ďurika
Člen | 328
+
0
-

kaspr11 napsal(a):
díky za pomoc, ale problém zůstal..

mne to tiez neslo, ale vyriesil som to tak, ze do nadradeneho adresara som dal:
netterobots.txt
Disallow: /mPdf

Editoval achtan (28. 2. 2012 8:50)

fabian
Člen | 20
+
0
-

Ahoj,

prosel jsem si tohle tema a chci pouzit mPDF primo v action presenteru:

<?php
public function renderPdf($titleSeo)
{
        $template = new \Nette\Templating\FileTemplate(APP_DIR.'/ChildrenModule/templates/Article/pdf.latte');
        $template->registerFilter(new \Nette\Latte\Engine);
        $template->article = $this->article;

        include_once(LIBS_DIR.'/mPDF/mpdf.php');

        $mpdf = new \mPDF('utf-8');
        $mpdf->WriteHTML((string) $template->render());
        $mpdf->Output();
        $this->terminate();
}
?>

Bohuzel toto mi vygeneruje prazdne PDF. Kdyz zkusim udelat

<?php
$mpdf->WriteHTML('<h1>test</h1>');
?>

tak se PDF v poradku vygeneruje. V sablone mam zatim napsano jen „xxx“ pro test.

Muze mi nekdo poradit, proc mPDF vystup z sablony nezvladne?

Diky

radas
Člen | 221
+
0
-

mPDF sice neznám, nepoužívám, ale nehraje tam roli Latte? Jestli to tvoje HTML třeba neescapuje, s čímž si potom mPDF neporadí?

fabian
Člen | 20
+
0
-

No nefunguje to ani, kdyz Latte vypnu. Navic tam mam v te sablone zatim jen „xxx“. Kdyz dam

<?php
echo (string) $template->render();exit;
?>

tak v prohlizeci vidim ciste xxx.
Akorat se tam pridava Nette Debug bar koukam.

llsm
Člen | 121
+
0
-

Pokud je zapnuty DebugBar, tak mPDF vraci prazdnou stranku nebo skonci mPDF s nejakou chybou – memory limit nebo time exceeded. Zkus vypnout v bootstrapu a uvidis

Editoval llsm (8. 3. 2012 15:31)

radas
Člen | 221
+
0
-

Použití actionPdf() namísto renderPdf() nepomůže?

fabian
Člen | 20
+
0
-

Ani zmena na action ani nastaveni production modu pro zbaveni se Debug baru:(

<?php
$configurator->setProductionMode(true);
Nette\Diagnostics\Debugger::enable(true);
?>
radas
Člen | 221
+
0
-

A nějaké informace ve FireBugu?

llsm
Člen | 121
+
0
-

V tom pripade zkus sablonu stavet po kouscich. A rozhodne nech vypnuty ten debug bar, s nim to alespon u me vzdy skonci v pekle, ted jsem to zkousel. Asi pred rokem jsem takhle delal sablonu pro faktury v mPDF a stravil jsem s tim par dni, nez jsem vychytal, aby mi to vykreslilo moje HTML jak jsem chtel. A obcas to prave nezobrazilo nic, aniz bych udelal jinou zmenu nez v HTML. Pripadne muzes zkusit tu sablonu poslat…

Editoval llsm (8. 3. 2012 16:21)

saimons
Člen | 293
+
0
-

Ja pouzivam toto:

	$template = new \Nette\Templating\FileTemplate;
$template->setFile(APP_DIR . '/PDF/template.latte');
$template->registerFilter(new \Nette\Latte\Engine);
$template->registerHelperLoader('Nette\Templating\DefaultHelpers::loader');

	include(WWW_DIR . '/libs/mpdf/mpdf.php');
$mpdf = new \mPDF('utf-8', 'A4');
	...
	$mpdf->WriteHTML($template->__toString());
	$mpdf->Output($cestaSouboru,'F');

Editoval saimons (9. 3. 2012 13:18)

LuBoss
Člen | 21
+
0
-

Příklad od ‚saimonse‘ funguje výborně, ale jde nějak odeslat do mPDF aktuální šablonu ($this->template) včetně vyplněných dat? Myslím tím něco jako PdfResponse, ale jenom za pomoci mPDF.
Něco jako " $mpdf->WriteHTML($this->template->__toString())".

Moje představa je taková, že aktuální šablonu naplním daty voláním jiné akce stejného presenteru,
kterou používám pro standartní HTML výstup a tím omezím duplicitu vytváření dat.

(Nette 2.0, mPDF 5.4)

castamir
Člen | 629
+
0
-

mělo by fungovat něco na způsob:

$template = $this->createTemplate(); // to by melo nacist i latte a helpery
$template->setFile($pathToView);
// pripadne
$template->setView($view) // nazev aktualni sablony

$template->foo = $foo; // pridani promenne by melo fungovat uplne stejne jako u klasickeho renderovani

a zbytek je v podstate stejny

Editoval castamir (31. 8. 2012 11:24)

LuBoss
Člen | 21
+
0
-

Podařilo se mi vypotit nějaké funkční řešení, tak třeba se to někomu hodí.

Jedná se o to, jak pomocí mPDF vygenerovat aktuální view do pdf souboru ke stažení a ještě použít pro šablonu data, která vytvoří jiná, již existující funkce.

Presenter:

<?php
	include_once(LIBS_DIR.'/mpdf/mpdf.php'); //vložení mPDF (přepsat dle aktuální cesty ke knihovně)

	$this->template->setFile(APP_DIR . '/FrontModule/templates/Meals/lunch2pdf.latte'); //nastavení šablony - nebude použit @layout.latte
//soubor šablony je nutné zadat, aby byl funkční export $this->template->__toString()

	$this->renderLunch($id); //volání jiné metody aktuálního presenteru pro naplnění dat do šablony
	//Nač znovu psát dolování dat a předávání do šablony, když to již existuje a je používáno i jinde

	$mpdf = new \mPDF('utf-8', 'A4');
	$mpdf->WriteHTML($this->template->__toString());
	$mpdf->Output('Jidelni_listek-obedy.pdf','D'); //dám souboru nějaké jméno a odešlu ho do browseru jako soubor k uložení
?>