Я столкнулся со странной проблемой с Magento 2. Печать PDF-файла счета-фактуры из бэкэнда размер файла документа составляет около 120 КБ. Когда он прикреплен к транзакционному электронному письму, размер файла составляет 2 МБ и более.
Это особенно интересно, потому что сам PDF-файл создается точно так же.
Это Magento 2 стандартная функция printPdf в бэкэнде:
public function execute()
{
$invoiceId = $this->getRequest()->getParam('invoice_id');
if ($invoiceId) {
$invoice = $this->_objectManager->create(
\Magento\Sales\Api\InvoiceRepositoryInterface::class
)->get($invoiceId);
if ($invoice) {
$pdf = $this->_objectManager->create(\Magento\Sales\Model\Order\Pdf\Invoice::class)->getPdf([$invoice]);
$date = $this->_objectManager->get(
\Magento\Framework\Stdlib\DateTime\DateTime::class
)->date('Y-m-d_H-i-s');
$fileContent = ['type' => 'string', 'value' => $pdf->render(), 'rm' => true];
return $this->_fileFactory->create(
'invoice' . $date . '.pdf',
$fileContent,
DirectoryList::VAR_DIR,
'application/pdf'
);
}
} else {
return $this->resultForwardFactory->create()->forward('noroute');
}
}
А здесь функция setPdfAttachment
private function setPdfAttachment($emailType, Message $message, $obj)
{
$pdfModel = 'Magento\Sales\Model\Order\Pdf\\' . ucfirst($emailType);
/** @var \Zend_Pdf $pdf */
$pdf = $this->objectManager->create($pdfModel)->getPdf([$obj]);
$message->createAttachment(
$pdf->render(),
'application/pdf',
\Zend_Mime::DISPOSITION_ATTACHMENT,
\Zend_Mime::ENCODING_BASE64,
$emailType . $obj->getIncrementId() . '.pdf'
);
}
Вы заметите, что обе функции создают PDF-файл через $pdf->render();
, в то время как обе также загружают один и тот же счет объект через (\Magento\Sales\Model\Order\Pdf\Invoice
).
Поскольку ENCODING_BASE_64
кажется единственным вариантом для вложений PDF с помощью Zend, я немного не понимаю, что еще я мог сделать неправильно. Кто-нибудь может мне объяснить, почему размер файла вложения электронной почты настолько смехотворно велик по сравнению с «распечатанным»?