我想在销售时生成自定义pdf,并将其附加到所有自定义模块中的销售电子邮件中。
我认为我需要扩展Magento\Sales\Model\Order\Pdf\AbstractPdf
以生成pdf,但我不确定。
有没有人做过这件事,或者我是否在正确的轨道上有任何想法?
//编辑:
根据评论,这是有关如何将http://www.fpdf.org/纳入自定义模块的基本布局:
首先,我下载了fpdf软件包。我提取了文件并将它们全部放入“模块” Helper
文件夹,现在看起来像这样:
- Helper
-- font (folder)
-- makefont (folder)
-- FPDF.php
-- Data.php
Data.php
是我在此文件夹中已经拥有的唯一文件,因为它包含我的助手数据类。
接下来,我编辑了FPDF.php并将模块命名空间添加到其中。
我编辑了助手Data.php
文件,并使用了命名空间FPDF类:
use Company\ModuleName\Helper\FPDF as FPDF;
我在数据类中定义了我需要的任何pdf信息-您不需要这样做:
// PDF INFOS
protected $pdfFileDir = 'someDir/someSubDir/';
protected $logo1 = 'myLogo.jpg';
protected $logo2 = 'myExtraLogo.jpg';
/**
* @var \Company\ModuleName\Helper\FPDF
*/
protected $_pdf;
并构建它
/**
* @param \Company\ModuleName\Helper\FPDF $pdf
* @param array $data
*/
public function __construct(
(...)
FPDF $pdf,
(...)
array $data = []
) {
(...)
$this->_pdf = $pdf;
(...)
parent::__construct($context);
}
然后,我创建了我的方法并生成了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;
}
然后,通过助手(当然需要包括它)在控制器中调用方法:
$this->dataHelper->generatePdf($yourVars);