Ich möchte beim Verkauf ein benutzerdefiniertes PDF erstellen und es innerhalb eines benutzerdefinierten Moduls an die Verkaufs-E-Mail anhängen.
Ich denke, ich muss erweitern Magento\Sales\Model\Order\Pdf\AbstractPdf, um das PDF zu generieren, aber ich bin nicht sicher.
Hat das schon mal jemand gemacht oder hat er eine Idee, ob ich auf dem richtigen Weg bin?
// edit:
Gemäß den Kommentaren finden Sie hier ein grundlegendes Layout, wie ich http://www.fpdf.org/ in mein benutzerdefiniertes Modul aufgenommen habe:
Zuerst habe ich das fpdf-Paket heruntergeladen. Ich habe die Dateien extrahiert und sie alle in meinen Modulordner gelegt Helper, der jetzt so aussieht:
- Helper
-- font (folder)
-- makefont (folder)
-- FPDF.php
-- Data.php
Data.php ist die einzige Datei, die ich bereits in diesem Ordner hatte, da sie meine Hilfsdatenklasse enthält.
Als nächstes habe ich die Datei FPDF.php bearbeitet und meinen Modul-Namespace hinzugefügt.
Ich habe Data.phpmeine Hilfsdatei bearbeitet und die FPDF-Klasse meiner Namespaces verwendet:
use Company\ModuleName\Helper\FPDF as FPDF;
Ich habe alle PDF-Informationen definiert, die ich in der Datenklasse benötige - das brauchen Sie nicht:
// PDF INFOS
protected $pdfFileDir = 'someDir/someSubDir/';
protected $logo1 = 'myLogo.jpg';
protected $logo2 = 'myExtraLogo.jpg';
/**
* @var \Company\ModuleName\Helper\FPDF
*/
protected $_pdf;
und konstruiere es
/**
* @param \Company\ModuleName\Helper\FPDF $pdf
* @param array $data
*/
public function __construct(
(...)
FPDF $pdf,
(...)
array $data = []
) {
(...)
$this->_pdf = $pdf;
(...)
parent::__construct($context);
}
Ich habe dann meine Methode erstellt und das PDF generiert:
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;
}
Dann rufen Sie Ihre Methode in Ihrem Controller über Ihren Helfer auf (was Sie natürlich einschließen müssen):
$this->dataHelper->generatePdf($yourVars);