PDF中文乱码
1、添加支持的中文字体(SourceHanSans-Regular.ttf)
将字体放到 lib/internal/GnuFreeFont/
目录下即可
2、重写\Magento\Sales\Model\Order\Pdf\Invoice
及 Magento\Sales\Model\Order\Pdf\Shipment
(注:抽象类 Magento\Sales\Model\Order\Pdf\AbstractPdf
不支持重写,所以需要重写继承了它的子类)
1)di.xml
<?xml version="1.0"?><config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd"> <!--Pdf support chinese fonts--> <preference for="Magento\Sales\Model\Order\Pdf\Invoice" type="Vendor_name\Module_name\Model\Order\Pdf\Invoice" /> <preference for="Magento\Sales\Model\Order\Pdf\Shipment" type="Vendor_name\Module_name\Model\Order\Pdf\Shipment" /></config>
2)Vendor_name\Module_name\Model\Order\Pdf\Invoice.php
<?phpnamespace Vendor_name\Module_name\Model\Order\Pdf;class Invoice extends \Magento\Sales\Model\Order\Pdf\Invoice{ /** * Set font as regular * * @param \Zend_Pdf_Page $object * @param int $size * @return \Zend_Pdf_Resource_Font */ protected function _setFontRegular($object, $size = 7) { $font = \Zend_Pdf_Font::fontWithPath( $this->_rootDirectory->getAbsolutePath('lib/internal/GnuFreeFont/SourceHanSans-Normal.ttf') ); $object->setFont($font, $size); return $font; } /** * Set font as bold * * @param \Zend_Pdf_Page $object * @param int $size * @return \Zend_Pdf_Resource_Font */ protected function _setFontBold($object, $size = 7) { $font = \Zend_Pdf_Font::fontWithPath( $this->_rootDirectory->getAbsolutePath('lib/internal/GnuFreeFont/SourceHanSans-Normal.ttf') ); $object->setFont($font, $size); return $font; } /** * Set font as italic * * @param \Zend_Pdf_Page $object * @param int $size * @return \Zend_Pdf_Resource_Font */ protected function _setFontItalic($object, $size = 7) { $font = \Zend_Pdf_Font::fontWithPath( $this->_rootDirectory->getAbsolutePath('lib/internal/GnuFreeFont/SourceHanSans-Normal.ttf') ); $object->setFont($font, $size); return $font; }}
Vendor_name\Module_name\Model\Order\Pdf\Shipment.php
同上;
PDF内容(products, address)过长未自动换行
1、products 过长需重写 Magento\Sales\Model\Order\Pdf\Items\Invoice\DefaultInvoice
下 draw() 方法;
2、address 过长需重写 Magento\Sales\Model\Order\Pdf\AbstractPdf
_formatAddress() 方法;
注:以上2个function中 split() 的第二个参数即用于设置换行长度,将其修改为自己需要的长度即可