Bonjour,
Voila je rencontre un petit problème avec mon code.
j'aimerai imprimer une page en pdf en utilisant la librairie html2pdf
voici ce que je fais dans mon layout ( /App/vew/Layouts/pdf)
<?php
header("Content-type:application/pdf");
ob_start();
?>
<?php
// $content = ob_get_clean();
App::import('Vendor', 'html2pdf/html2pdf');
try
{
$html2pdf = new HTML2PDF('P', 'A4', 'fr', true, 'UTF-8', 0);
$html2pdf->writeHTML($content,$this->fetch('content'));
$html2pdf->createIndex('Sommaire', 25, 12, false, true, 1);
$html2pdf->Output('facutre.pdf');
}
catch(HTML2PDF_exception $e) {
echo $e;
exit;
}
dans mon controlleur j'ai ceci:
public function admin_impression(){
$this->layout = 'pdf';
$this->response->type('pdf');
$this->set($content);
// $this->response;
}
en enfin dans ma vue admin_impression.ctp
j'ai ceci:
<style type="text/css">
<!--
table.page_header {width: 100%; border: none; background-color: #DDDDFF; border-bottom: solid 1mm #AAAADD; padding: 2mm }
table.page_footer {width: 100%; border: none; background-color: #DDDDFF; border-top: solid 1mm #AAAADD; padding: 2mm}
h1 {color: #000033}
h2 {color: #000055}
h3 {color: #000077}
div.niveau
{
padding-left: 5mm;
}
-->
</style>
<page backtop="14mm" backbottom="14mm" backleft="10mm" backright="10mm" style="font-size: 12pt">
<page_header>
<table class="page_header">
<tr>
<td style="width: 100%; text-align: left">
Exemple d'utilisation des bookmarkssddf
</td>
</tr>
</table>
</page_header>
<page_footer>
<table class="page_footer">
<tr>
<td style="width: 100%; text-align: right">
page [[page_cu]]/[[page_nb]]
</td>
</tr>
</table>
</page_footer>
<bookmark title="Sommaire" level="0" ></bookmark>
</page>
<page pageset="old">
<bookmark title="Chapitre 1" level="0" ></bookmark><h1>Chapitre 1</h1>
<div class="niveau">
Contenu du chapitre 1
</div>
</page>
<page pageset="old">
<bookmark title="Chapitre 2" level="0" ></bookmark><h1>Chapitre 2</h1>
<div class="niveau">
intro au chapitre 2
<bookmark title="Chapitre 2.1" level="1" ></bookmark><h2>Chapitre 2.1</h2>
<div class="niveau">
Contenu du chapitre 2.1
</div>
<bookmark title="Chapitre 2.2" level="1" ></bookmark><h2>Chapitre 2.2</h2>
<div class="niveau">
Contenu du chapitre 2.2
</div>
<bookmark title="Chapitre 2.3" level="1" ></bookmark><h2>Chapitre 2.3</h2>
<div class="niveau">
Contenu du chapitre 2.3
</div>
</div>
</page>
<page pageset="old">
<bookmark title="Chapitre 3" level="0" ></bookmark><h1>Chapitre 3</h1>
<div class="niveau">
intro au chapitre 3
<bookmark title="Chapitre 3.1" level="1" ></bookmark><h2>Chapitre 3.1</h2>
<div class="niveau">
Contenu du chapitre 3.1
</div>
<bookmark title="Chapitre 3.2" level="1" ></bookmark><h2>Chapitre 3.2</h2>
<div class="niveau">
intro au chapitre 3.2
<bookmark title="Chapitre 3.2.1" level="2" ></bookmark><h3>Chapitre 3.2.1</h3>
<div class="niveau">
Contenu du chapitre 3.2.1
</div>
<bookmark title="Chapitre 3.2.2" level="2" ></bookmark><h3>Chapitre 3.2.2</h3>
<div class="niveau">
Contenu du chapitre 3.2.2
</div>
</div>
</div>
</page>
dans mon index.ctp, j'ai un lien suivant:
<?php
echo $this->Html->link(' PDF',array('admin' => true,'controller' => 'Campagnes',
'action' => 'impression'),array('class'=> 'btn btn-orange btn-xs fa fa-arrow-left','title'=>'Imprimer'));
?>
Je veux que lorsque l'on clique sur le lien imprimer de la page index.ctp, que le contenu de la page imprimer s'affiche dans le pdf
présentement quand je clique j'obtiens mon pdf mais vide.
quelqu'un a une idée ? j'avous je suis débutant j'aimerai vraiment votre aide
Merci ametyste, voici ce que j'ai dans mon error.log
Request URL: /Mediatarget/admin/Campagnes/impression
Stack Trace:
2016-03-09 10:18:00 Error: [MissingViewException] View file "Campagnes\admin_impression.ctp" is missing.
Exception Attributes: array (
'file' => 'Campagnes\admin_impression.ctp',
)
Bonsoir.
L'erreur te dit tout simplement, qu'il ne trouve pas le fichier admin_impression.ctp
dans View/Campagnes/
.
Vérifies donc que tu aies bien créé le fichier dans le dossier correspondant.
Par contre, dans la fonction de ton controller, tu envoies une variable qui n'est pas définie, comment ta vue pourrait-elle la traiter ?
Merci Lartak,
mais le fichier admin_impression.ctp existe, et se trouve dans le repertoire vew/Themed/Administrators/Campagnes/
et voici ci ce que j'ai dans mon controleur :
public function admin_impression(){
$this->layout = 'pdf';
$this->response->type('pdf');
//$this->set($content);
$this->response;
}
mais toujour rien,
quelqu'un peut me dire comment faire pour bien intégré HTML2PDF dans cakephp2.7.1 s'il vout plait?
Salut je viens de constaté que lorsque je met ceci dans ma vue admin_impression.ctp :
<?php
ob_start();
header("Content-type:application/pdf");
?>
<style type="text/css">
<!--
table.page_header {width: 100%; border: none; background-color: #DDDDFF; border-bottom: solid 1mm #AAAADD; padding: 2mm }
table.page_footer {width: 100%; border: none; background-color: #DDDDFF; border-top: solid 1mm #AAAADD; padding: 2mm}
h1 {color: #000033}
h2 {color: #000055}
h3 {color: #000077}
div.niveau
{
padding-left: 5mm;
}
-->
</style>
<page backtop="14mm" backbottom="14mm" backleft="10mm" backright="10mm" style="font-size: 12pt">
<page_header>
<table class="page_header">
<tr>
<td style="width: 100%; text-align: left">
Exemple d'utilisation des bookmarkssddf
</td>
</tr>
</table>
</page_header>
<page_footer>
<table class="page_footer">
<tr>
<td style="width: 100%; text-align: right">
page [[page_cu]]/[[page_nb]]
</td>
</tr>
</table>
</page_footer>
<bookmark title="Sommaire" level="0" ></bookmark>
</page>
<page pageset="old">
<bookmark title="Chapitre 1" level="0" ></bookmark><h1>Chapitre 1</h1>
<div class="niveau">
</div>
</page>
<page pageset="old">
<bookmark title="Chapitre 2" level="0" ></bookmark><h1>Chapitre 2</h1>
<div class="niveau">
intro au chapitre 2
<bookmark title="Chapitre 2.1" level="1" ></bookmark><h2>Chapitre 2.1</h2>
<div class="niveau">
Contenu du chapitre 2.1
</div>
<bookmark title="Chapitre 2.2" level="1" ></bookmark><h2>Chapitre 2.2</h2>
<div class="niveau">
Contenu du chapitre 2.2
</div>
<bookmark title="Chapitre 2.3" level="1" ></bookmark><h2>Chapitre 2.3</h2>
<div class="niveau">
Contenu du chapitre 2.3
</div>
</div>
</page>
<page pageset="old">
<bookmark title="Chapitre 3" level="0" ></bookmark><h1>Chapitre 3</h1>
<div class="niveau">
intro au chapitre 3
<bookmark title="Chapitre 3.1" level="1" ></bookmark><h2>Chapitre 3.1</h2>
<div class="niveau">
Contenu du chapitre 3.1
</div>
<bookmark title="Chapitre 3.2" level="1" ></bookmark><h2>Chapitre 3.2</h2>
<div class="niveau">
intro au chapitre 3.2
<bookmark title="Chapitre 3.2.1" level="2" ></bookmark><h3>Chapitre 3.2.1</h3>
<div class="niveau">
Contenu du chapitre 3.2.1
</div>
<bookmark title="Chapitre 3.2.2" level="2" ></bookmark><h3>Chapitre 3.2.2</h3>
<div class="niveau">
Contenu du chapitre 3.2.2
</div>
</div>
</div>
</page>
<?php
$content = ob_get_clean();
App::import('Vendor', 'html2pdf/html2pdf');
try
{
$html2pdf = new HTML2PDF('P', 'A4', 'fr', true, 'UTF-8', 0);
$html2pdf->writeHTML($content, isset($_GET['vuehtml']));
$html2pdf->createIndex('Sommaire', 25, 12, false, true, 1);
$html2pdf->Output('facutre.pdf');
}
catch(HTML2PDF_exception $e) {
echo $e;
exit;
}
?>
cela me génère bien le pdf comme voulu mais quand j'essai d'affiché une valeur en php, en utilisant les helpers de cake par exemple,
<?php echo $this->Html->image($addresse['Adresse']['logo'],array('alt'=>'Media target logo','title'=>'mon logo'));?>
le pdf n'affiche rien just une page noir cela peut être dû à quoi selon vous? et comment faire pour utiliser les helpers de cake la dedans.
cela me crèe un fichier debug.log qui a l'intérieur indique que la variable de vue n'est pas défini:
2016-03-10 08:11:16 Debug: Notice (8): Undefined variable: vew in [C:\wamp\www\Mediatarget\app\View\Themed\Administrators\Campagnes\admin_impression.ctp, line 6]
Trace:
include - APP\View\Themed\Administrators\Campagnes\admin_impression.ctp, line 6
View::_evaluate() - CORE\Cake\View\View.php, line 971
View::_render() - CORE\Cake\View\View.php, line 933
View::render() - CORE\Cake\View\View.php, line 473
Controller::render() - CORE\Cake\Controller\Controller.php, line 960
Dispatcher::_invoke() - CORE\Cake\Routing\Dispatcher.php, line 200
Dispatcher::dispatch() - CORE\Cake\Routing\Dispatcher.php, line 167
[main] - APP\webroot\index.php, line 118
salut je viens de faire un autre constat.
lorsque dans mon action admin_imprimer je fais ceci:
public function admin_imprimer()
{
$this->layout = 'pdf';
$this->response->type('pdf');
$resultat['resultat'] = "resultat a affiché";
$this->set($resultat);
}
et dans ma vue admin_imprimer.ctp je met ceci
<?php echo $resultat; ?>
cela m'affiche bien le pdf .
mais lorsque j'e veux plutot affiché un tableau en ajoutant ceci dans mon action imprimer,
$tab['resultat'] = array('serge','roger','philip');
//$resultat['resultat'] = "resultat a affiché";
$this->set($tab)
cela m'affiche un tableau vide,
j'ai commme l'impression que tout ce fait de facon inline
quelqu'un a une idée?
j'ai comme l'impression personne n'as encore eu a utiliser HTML2PDF pour cakephp 2.7.1
Bonsoir.
C'est surtout que tu mélanges la conception d'une structure MVC avec du code procédural.
HTML2PDF est une librairie, elle s'utilise différemment entre une structure MVC et du simple code procédural.
Merci Lartak, mais comment débouché cela? parceque lorsque mes données sont inline (je veus dire juste une chaine de caractère, le pdf se génère normalement avec mes informations voulu) mais par contre quand je veux afficher un tableau ces la ou il y'a problème car cela m'affiche un tableau vide. S'il te plait comment m'y prendre? supposant que j'ai la librairie dans le App/vendor/html2pdf
Hum personne pour me donner un coup de main? SVP donner moi mem une direction pour que j'inplémente pardon
Salut, je ne utilise pas CakePHP. Mais en regardant la doc (ce lien), je pense que tu peux faire un truc du style :
class TonController
{
public function taMethode()
{
/*
* Ta vue et ton layout ne doivent contenir que les balises <page> et autres
* Dans la variable $html tu devrais avoir le html de ta vue
*/
$html = $this->render("taView", "tonLayout")->body();
$html2pdf = new HTML2PDF('P', 'A4', 'fr', true, 'UTF-8', 0);
$html2pdf->writeHTML($html);
$html2pdf->createIndex('Sommaire', 25, 12, false, true, 1);
$pdf = $html2pdf->Output('', 'S');
$this->response->body($pdf);
$this->response->type('pdf');
$this->response->download($name.'.pdf');
return $this->response;
}
}
J'espère que ça va t'aider.