Magento 2 - размер файла PDF во вложении электронной почты намного больше, чем при печати от администратора - PullRequest
0 голосов
/ 03 августа 2020

Я столкнулся со странной проблемой с 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, я немного не понимаю, что еще я мог сделать неправильно. Кто-нибудь может мне объяснить, почему размер файла вложения электронной почты настолько смехотворно велик по сравнению с «распечатанным»?

...