Magento2: Comment créer un PDF dans un module personnalisé


8

Je voudrais générer un pdf personnalisé lors de la vente et le joindre à l'e-mail de vente dans un module personnalisé.

Je pense que je dois m'étendre Magento\Sales\Model\Order\Pdf\AbstractPdfpour générer le pdf mais je n'en suis pas certain.

Quelqu'un a-t-il déjà fait cela ou sait-il si je suis sur la bonne voie?

// Éditer:

Selon les commentaires, voici une présentation de base de la façon dont j'ai inclus http://www.fpdf.org/ dans mon module personnalisé:

J'ai d'abord téléchargé le package fpdf. J'ai extrait les fichiers et les ai tous placés dans mon Helperdossier Modules , qui ressemble maintenant à ceci:

- Helper -- font (folder) -- makefont (folder) -- FPDF.php -- Data.php

Data.php est le seul fichier que j'avais déjà dans ce dossier car il contient ma classe de données d'assistance.

Ensuite, j'ai édité le FPDF.php et y ai ajouté l'espace de noms de mes modules.

J'ai édité mon Data.phpfichier d' aide et utilisé mes espaces de noms FPDF classe:

use Company\ModuleName\Helper\FPDF as FPDF;

J'ai défini toutes les informations pdf dont j'ai besoin dans la classe de données - vous n'en avez pas besoin:

// PDF INFOS
protected $pdfFileDir = 'someDir/someSubDir/';
protected $logo1 = 'myLogo.jpg';
protected $logo2 = 'myExtraLogo.jpg';


/**
 * @var \Company\ModuleName\Helper\FPDF
 */
protected $_pdf;

et le construire

/**
 * @param \Company\ModuleName\Helper\FPDF $pdf
 * @param array $data
 */
public function __construct(
    (...)
    FPDF $pdf,
    (...)
    array $data = []
) {
    (...)
    $this->_pdf = $pdf;
    (...)
    parent::__construct($context);
}

J'ai ensuite créé ma méthode et généré le pdf:

public function generatePdf($productId, $someOtherVars)
{
    #start the pdf
    $pdf = new FPDF();

    $pdf->AddPage();
    $pdf->SetAutoPageBreak(0, 5);
    $pdf->SetFont('Arial', 'B', 16);

    // do your FPDF stuff here
    // eg: $pdf->Cell('', '', iconv('UTF-8', 'windows-1252', 'Page Header Title'), 0, 1);

    // $pdf->Ln(8);
    // $pdf->Cell('', '', $today, 0, 1, 'L');
    // and so forth .. see the FPDF documentation

    // render pdf
    $filename = 'somename' . $productId . '.pdf';
    $pdf->Output($this->getPdfBaseDir() . $filename, 'F');

    return $this->getPdfBaseDir() . $filename;
}

Ensuite, vous appelez votre méthode dans votre contrôleur via votre assistant (que vous devez bien sûr inclure):

$this->dataHelper->generatePdf($yourVars);


Avez-vous obtenu quelque chose avec ça?
— LM_Fielding

1
Je n'ai pas suivi cette voie après tout. J'ai essayé mais à la fin, cela semblait trop complexe pour essayer d'utiliser la classe AbstractPdf. J'ai fini par inclure FPDF avec mon module (dans l'aide) et je l'ai utilisé pour générer les fichiers pdf. fpdf.org
— tecjam

1
Brillant. Avez-vous pensé à dompdf? github.com/dompdf/dompdf
— LM_Fielding

1
Je l'ai fait, mais l'une des raisons pour lesquelles je ne l'ai pas utilisé était que je ne voulais pas avoir à rendre le html en premier, puis à le rendre au format pdf. Il y avait aussi d'autres raisons, mais je ne me souviens pas ce qu'elles étaient. Pour votre usage, cela peut être mieux, mais vous seul pouvez en décider.
— tecjam

Bonjour, toutes les mises à jour sur cette question. J'essaie de générer PFD pour mon module personnalisé - Magento2.
— Dev

Réponses:


1

Vous pouvez utiliser FPDF ou TCPDF pour créer un PDF.

Essayez d'exécuter l'une des commandes suivantes à partir du répertoire racine M2

composer require setasign/fpdf:1.8.1

Il ajoutera la bibliothèque fpdf dans le dossier du fournisseur en tant que setasign / fpdf. Une fois fpdf installé, vous pouvez utiliser FPDF dans votre module personnalisé pour créer des PDF.

$ pdf = new \ FPDF ();

OU

composer require tecnickcom/tcpdf

Il ajoutera la bibliothèque tcpdf dans le dossier du fournisseur sous la forme tecnickcom / tcpdf. Une fois tcpdf installé, vous pouvez utiliser TCPDF dans votre module personnalisé pour créer des PDF.

$ pdf = new \ TCPDF (PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);


0

Magento2: Comment créer un PDF dans un module personnalisé

public function execute()
{
    $file = $this->getRequest()->getParam('file');

    if(isset($file) && !empty($file)) {

        $pdf = \Zend_Pdf::load($this->directory_list->getPath(DirectoryList::MEDIA) . DIRECTORY_SEPARATOR . $file);
        $fileName = test.pdf;
        $this->fileFactory->create(
        $fileName,
        str_replace('/Annot /Subtype /Link', '/Annot /Subtype /Link /Border[0 0 0]', $pdf->render()),
        \Magento\Framework\App\Filesystem\DirectoryList::VAR_DIR,
        'application/pdf'
        );
    }
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.