Magento2: come creare un PDF in un modulo personalizzato


8

Vorrei generare un pdf personalizzato al momento della vendita e allegarlo all'e-mail di vendita, tutto all'interno di un modulo personalizzato.

Penso di dover estendere Magento\Sales\Model\Order\Pdf\AbstractPdfper generare il pdf ma non ne sono certo.

Qualcuno l'ha mai fatto prima o ha idea se sono sulla strada giusta?

// modificare:

Come da commenti, ecco un layout di base su come ho incluso http://www.fpdf.org/ nel mio modulo personalizzato:

Per prima cosa ho scaricato il pacchetto fpdf. Ho estratto i file e li ho inseriti tutti nella mia Helpercartella Modules , che ora ha questo aspetto:

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

Data.php è l'unico file che ho già avuto in questa cartella in quanto contiene la mia classe di dati di supporto.

Successivamente ho modificato FPDF.php e vi ho aggiunto lo spazio dei nomi dei miei moduli.

Ho modificato il mio Data.phpfile di supporto e utilizzo la classe FPDF dei miei spazi dei nomi:

use Company\ModuleName\Helper\FPDF as FPDF;

Ho definito tutte le informazioni pdf di cui ho bisogno nella classe di dati - non è necessario questo:

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


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

e costruirlo

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

Ho quindi creato il mio metodo e generato il 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;
}

Quindi chiami il tuo metodo nel tuo controller tramite il tuo helper (che ovviamente devi includere):

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


Sei arrivato da qualche parte con questo?
LM_Fielding

1
Dopotutto non ho seguito quella strada. Ci ho provato ma alla fine mi è sembrato troppo complesso provare ad usare la classe AbstractPdf. Ho finito per includere FPDF con il mio modulo (nell'Helper) e l'ho usato per generare i file pdf. fpdf.org
tecjam,

1
Brillante. Hai considerato dompdf? github.com/dompdf/dompdf
LM_Fielding

1
L'ho fatto, ma uno dei motivi per cui non l'ho usato era che non volevo prima rendere l'html e poi renderizzare l'html nel pdf. C'erano anche altri motivi, ma non riesco a ricordare quali fossero. Per il tuo uso potrebbe essere migliore, ma solo tu puoi decidere.
Tecjam,

Ciao, eventuali aggiornamenti su questa domanda. Sto cercando di generare PFD per il mio modulo personalizzato Magento2.
Dev

Risposte:


1

È possibile utilizzare FPDF o TCPDF per la creazione di PDF.

Prova a eseguire uno dei seguenti comandi dalla directory principale di M2

composer require setasign/fpdf:1.8.1

Aggiungerà la libreria fpdf nella cartella del fornitore come setasign / fpdf. Una volta installato fpdf puoi usare FPDF nel tuo modulo personalizzato per creare PDF.

$ pdf = new \ FPDF ();

O

composer require tecnickcom/tcpdf

Aggiungerà la libreria tcpdf nella cartella del fornitore come tecnickcom / tcpdf. Una volta installato tcpdf è possibile utilizzare TCPDF nel modulo personalizzato per la creazione di PDF.

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


0

Magento2: come creare un PDF in un modulo personalizzato

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'
        );
    }
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.