Bonjour,
dans une application symfony j'ai intallé HTML2PDF 5.2 pour editer des factures.
J'ai installé un service HTML2PDF comme suit:
<?php
namespace App\Service;
class HTML2PDF
{
public $pdf;
/**
* @param null $orientation
* @param null $format
* @param null $lang
* @param null $unicode
* @param null $encoding
* @param null $margin
*/
public function create(
$orientation = null,
$format = null,
$lang = null,
$unicode = null,
$encoding = null,
$margin = null
): void {
$this->pdf = new \HTML2PDF(
$orientation ? $orientation : $this->orientation,
$format ? $format : $this->format,
$lang ? $lang : $this->LANG,
$unicode ? $unicode : $this->unicode,
$encoding ? $encoding : $this->encoding,
$margin ? $margin : $this->margin
);
$this->pdf->SetDisplayMode('fullpage');
}
/**
* @param $template
* @param $name
* @return mixed
*/
public function generatePdf($template, $name)
{
$this->pdf->writeHTML($template);
return $this->pdf->Output($name.'.pdf');
}
}
phpStorm me met un warning sur les methodes SetDisplayMode, SetDisplayMode et output ,Method 'SetDisplayMode' not found in \HTML2PDF less... et un warning sur new \HTML2PDF , pour Undefined class HTML2PDF.
Ce qui montre bien que la classe n'est pas chargée.
Pourtant elle est bien dans mes services:
services:
...
App\Controller\:
resource: '../src/Controller'
tags: ['controller.service_arguments']
# add more service definitions when explicit configuration is needed
# please note that last definitions always *replace* previous ones
App.html2pdf:
class: App\Service\HTML2PDF
...
L'autowiring est activé
Option Value
Service ID App\Service\HTML2PDF
Class App\Service\HTML2PDF
Tags -
Public no
Synthetic no
Lazy no
Shared yes
Abstract no
Autowired yes
Autoconfigured yes
Quelle est la syntaxe de la configutation du service qui empeche de charger la classe HTML2PDF dans symfony?
Merci de votre aide
C'était bien cela:
contrairement à ce que raconte le tuto
https://www.supinfo.com/articles/single/3041-html2pdf-symfony
il ne faut pas créer de service; Je l'ai donc supprimé et j'appelle la classe istallée par composer en faisant:
$html2pdf = new Html2Pdf('P', 'A4', 'fr');
Et tout va bien...
désolé pour le temps perdu et merci.
Bonsoir.
Mais bien sur !
Avec aucune information sur la situation et le problème exact que tu rencontres, nous ne risquons pas de pouvoir t'aider.
Pour commencer, si tu veux aider l'IDE pour qu'il sache à quoi se rapporte la propriété pdf
de ta classe, commente celle-ci, exemple :
/**
* @var \HTML2PDF
*/
public $pdf;
Ensuite, je ne comprends pas l'intérêt d'utiliser des propriétés immaginaires, si elles valent toutes null
, autant mettre directement null
en seconde valeur de tes conditions ternaires.
Soit :
public function create(
$orientation = null,
$format = null,
$lang = null,
$unicode = null,
$encoding = null,
$margin = null
): void {
$this->pdf = new \HTML2PDF(
$orientation ? $orientation : null,
$format ? $format : null,
$lang ? $lang : null,
$unicode ? $unicode : null,
$encoding ? $encoding : null,
$margin ? $margin : null
);
$this->pdf->SetDisplayMode('fullpage');
}
Peut-être que ce qui te bloque est cette ligne là : Public no
.
Il te faudra donc peut-être ajouter public: true
dans la configuration de ton service.
Thanks to the _defaults
section in services.yaml
, every service defined in this file is public: false
by default.
What does this mean? When a service is public, you can access it directly from the container object, which is accessible from any controller that extends Controller
Merci,
j'avais remarqué le "public no" et commencé des recherches pour voir comment le passer à true.
Pour la structure du fichier je l'ai pompé chez un formateur et je la laisse telle quelle pendant mes tests.
Je simplifirai tout cela quand cela marchera. Effectivement je n'aurait pas écris cela comme cela non plus...
Merci pour ton aide , je teste et je dirai si cela marche.
j'avais remarqué le "public no" et commencé des recherches pour voir comment le passer à true.
Exemple de la documentation :
# config/services.yaml
services:
# ... same code as before
# explicitly configure the service
App\Service\MessageGenerator:
public: true
_Source_
Voilà, cela ne change rien Hélas
Information for Service "App\Service\HTML2PDF"
==============================================
---------------- ----------------------
Option Value
---------------- ----------------------
Service ID App\Service\HTML2PDF
Class App\Service\HTML2PDF
Tags -
Public yes
Synthetic no
Lazy no
Shared yes
Abstract no
Autowired yes
Autoconfigured yes
---------------- ----------------------
Cela fait 3 jours que je galère pour intaller un simple bundle
Je pens que dsur symfony 3 je n'aurai pas eu tout ces problèmes...
Je continue à chercher.
Cela fait 3 jours que je galère pour intaller un simple bundle
Veux-tu dire que c'est un Bundle pour HTML2PDF que tu as récupéré et non créé ?
Car si c'est le cas, j'ai regardé sur Packagist et les seuls que j'ai trouvé sont spécifiques pour Symfony 2, donc non fonctionnels pour Symfony 4.
J' ai installé:
[https://www.html2pdf.fr/download]()
et je me suis inspiré de cet article:
[https://www.supinfo.com/articles/single/3041-html2pdf-symfony
D'après ce que j'ai compris cela devrait etre bon....
Si tu as installé la librairie spipu/html2pdf
, tu la charges mal, car ce n'est pas new \HTML2PDF
mais new \Spipu\Html2Pdf\Html2Pdf
.
Il y a celui-ci qui fonctionne très bien et est hyper simple à implémenter : https://github.com/KnpLabs/KnpSnappyBundle
Bonjour
Quand je met
$this->pdf = new \spipu\html2pdf\Html2Pdf(
mon editeur me propose d'importer la Classe et si je lui répond oui il me dit qu'elle existe déja.
Or effectivement lorsque je vais dans Vendor/Composer/autoload_psr4.php je trouve une ligne:
'Spipu\\Html2Pdf\\' => array($vendorDir . '/spipu/html2pdf/src'),
qui bien que je n'y connaisse pas grand chose , m'a l'air de charger la classe html2pdf, ce qui expliquerai le conflit.
Comment se sortir de là?