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);

tecjam
la source
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);

Ajay
la source
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'
        );
    }
Divyesh
la source