Stáhnutí PDF a zobrazení hodnoty v šabloně pomocí Joseki / pdfResponse
- Hubert
- Člen | 8
Dobrý den,
v metodě, která mi vytvoří a stáhne PDF mám:
<?php
public function actionPrint(){
$template = $this->createTemplate();
$template->setFile('CESTA K SABLONE\pdf.latte');
$template->value = 10;
$pdf = new \Joseki\Application\Responses\PdfResponse($template);
$pdf->setSaveMode(PdfResponse::DOWNLOAD);
$this->sendResponse($pdf);
}
?>
a v šabloně pdf.latte:
<?php
<h1>Nadpis</h1>
{$value}
?>
Dostávám chybu „Undefined variable: value“, přitom do value přiřazuji číslo 10 a pokud zakomentuji v šabloně {$value}, pak bych očekával, že se mi stáhne PDF ve kterém bude pouze text Nadpis, místo toho se mi stránka(šablona pdf.latte) zobrazí v prohlížeči.
Dokázal by mi prosím někdo poradit co s tím?
Nainstalováno pomocí composeru do nette 2.4.
Editoval Hubert (8. 12. 2018 8:34)
- lightteka
- Backer | 17
Hubert napsal(a):
Alsatian napsal(a):
Jsem začátečník, ale nemáš v šabloně navíc PHP?
<h1>Nadpis</h1> {$value}
Díky za reakci. Moc nerozumím co tím myslíš… v šabloně mám pouze to co jsem uvedl, nic víc tam není.
Ze by tam zrejme nemely byt ty <?php znacky v tom pdf.latte souboru.
- Alsatian
- Člen | 175
Hele a normálně ti generování PDF funguje a nebo tvoříš první příklad?
Co kdybys na zkoušku umístil tvorbu PDF přímo do presenteru?
Dívám se, že u new máš uvedeno
\Joseki\Application\Responses\PdfResponse a u setSaveMode uz jenom PdfResponse.
Předpokládám ale, že jsi použil use
\Joseki\Application\Responses\PdfResponse;
Třeba „PdfPresenter.php“
namespace App\Presenters;
use Nette;
use \Joseki\Application\Responses\PdfResponse;
public function renderPdfObjednavka($hash = NULL)
{
$template = $this->createTemplate();
$template->setFile(__DIR__ . "/templates/components/pdf-objednavka.latte");
$template->value = 10;
$pdf = new PdfResponse($template);
$pdf->setSaveMode(PdfResponse::DOWNLOAD); // stažení
$pdf->setSaveMode(PdfResponse::INLINE); // zobrazit jako stránku, lepší pro test
$this->sendResponse($pdf);
}
K tomu mám vytvořenou routu, kde pomocí hash předám svůj parametr, třeba pro identifikaci faktury a podobně:
$router[] = new Route('pdf/<action>[/<hash>]', 'Pdf:');
Pro zobrazení nebo stažení souboru se stačí odkázat na
mojedomena.cz/pdf/objednavka/3feb3ba4138bb7d6427ac359588255ee
kde hash „3fer3ba4138ab7d6427ac358588255ee“ mám uložený v DB ke
konkrétní objednávce.
pdf-objednvka.latte
<html>
<head>
<link rel="stylesheet" media="all" href="{$basePath}/css/pdf.css" type="text/css" />
</head>
<body>
{* Nastavení paty stránky pro mPDF: https://mpdf.github.io/headers-footers/method-4.html*}
{* Použít htmlpagefooter a sethtmlpagefooter. *}
{* Definice musí být v BODY. *}
{* V patičce nezapomenout vypnout Latte makra => n:syntax="off" *}
<htmlpagefooter name="Footer1">
<table width="100%" n:syntax="off">
<tr>
<td width="50%">
<small>Vlastní text</small>
</td>
<td width="50%" align="right">
<small><em>Strana {PAGENO}/{nbpg}</em></small>
</td>
</tr>
</table>
</htmlpagefooter>
<sethtmlpagefooter name="Footer1" value="on" />
<h1>Nadpis</h1>
{$value}<br>
<br>
<div align="right" n:if="$dodavatel->foto_razitko">
<img src="{$basePath}/obrazky/mujobrazek.jpg" width="200">
</div>
</body>
</html>
Editoval Alsatian (8. 12. 2018 20:33)
- Hubert
- Člen | 8
Alsatian napsal(a):
Hele a normálně ti generování PDF funguje a nebo tvoříš první příklad?
Co kdybys na zkoušku umístil tvorbu PDF přímo do presenteru?
Dívám se, že u new máš uvedeno \Joseki\Application\Responses\PdfResponse a u setSaveMode uz jenom PdfResponse. Předpokládám ale, že jsi použil use \Joseki\Application\Responses\PdfResponse;Třeba „PdfPresenter.php“
namespace App\Presenters; use Nette; use \Joseki\Application\Responses\PdfResponse; public function renderPdfObjednavka($hash = NULL) { $template = $this->createTemplate(); $template->setFile(__DIR__ . "/templates/components/pdf-objednavka.latte"); $template->value = 10; $pdf = new PdfResponse($template); $pdf->setSaveMode(PdfResponse::DOWNLOAD); // stažení $pdf->setSaveMode(PdfResponse::INLINE); // zobrazit jako stránku, lepší pro test $this->sendResponse($pdf); }
K tomu mám vytvořenou routu, kde pomocí hash předám svůj parametr, třeba pro identifikaci faktury a podobně:
$router[] = new Route('pdf/<action>[/<hash>]', 'Pdf:');
Pro zobrazení nebo stažení souboru se stačí odkázat na mojedomena.cz/pdf/objednavka/3feb3ba4138bb7d6427ac359588255ee
kde hash „3fer3ba4138ab7d6427ac358588255ee“ mám uložený v DB ke konkrétní objednávce.pdf-objednvka.latte
<html> <head> <link rel="stylesheet" media="all" href="{$basePath}/css/pdf.css" type="text/css" /> </head> <body> {* Nastavení paty stránky pro mPDF: https://mpdf.github.io/headers-footers/method-4.html*} {* Použít htmlpagefooter a sethtmlpagefooter. *} {* Definice musí být v BODY. *} {* V patičce nezapomenout vypnout Latte makra => n:syntax="off" *} <htmlpagefooter name="Footer1"> <table width="100%" n:syntax="off"> <tr> <td width="50%"> <small>Vlastní text</small> </td> <td width="50%" align="right"> <small><em>Strana {PAGENO}/{nbpg}</em></small> </td> </tr> </table> </htmlpagefooter> <sethtmlpagefooter name="Footer1" value="on" /> <h1>Nadpis</h1> {$value}<br> <br> <div align="right" n:if="$dodavatel->foto_razitko"> <img src="{$basePath}/obrazky/mujobrazek.jpg" width="200"> </div> </body> </html>
Právě tvořím první příklad, jakou používáš verzi Nette? Zkoušel jsem tvůj příklad akorát bez předání parametru, to nepotřebuji a mám furt stejnou chybu, „Undefined variable: value“, konkrétně <?php echo LR\Filters::escapeHtmlText($value) /* line 20 */ ?><br>
- Hubert
- Člen | 8
Alsatian napsal(a):
@Hubert verzi Nette mam stejnou jako ty, 2.4. Napada me udelat novy projekt (pokud ve stavajicim mas neco dalsiho), zazipovat a hodit sem jako odkaz. Mrkneme se ti na to. Někde tam něco nehraje.
Udělal jsem tu věc, že jsem si stáhl nový projekt, nainstaloval pomocí composeru PdfResponse a šablonu nazval místo pdf.latte ⇒ print.latte a už funguje vše jak má :)
Každopádně díky za tvůj čas a tvé reakce!