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.php
meine 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);