У меня есть код ниже в моем магазине Magento, он добавляет адрес клиентов в PDF-файл счета. Иногда строки адреса были бы слишком длинными для ярлыков адресов, поэтому я добавил значение $ value = wordwrap ($ text, 10,
\ n "); линия думает, что это может создать новую строку. Однако, похоже, это не работает в документах PDF, и я просто получаю смешной символ, где мне бы хотелось, чтобы линия была. Кто-нибудь знает, как я может получить новую строку?
PS – Мои знания PHP очень просты.
if (!$order->getIsVirtual()) { if ($this->y < 250) { $page = $this->newPage(); } $this->_setFontRegular($page, 6); $page->drawText('Ship to:', 75, 222 , 'UTF-8'); $shippingAddress = $this->_formatAddress($order->getShippingAddress()->format('pdf')); $line = 185; $this->_setFontRegular($page, 12); $num_lines = count($shippingAddress); $curr_line = 0; foreach ($shippingAddress as $value) { $curr_line += 1; if ($curr_line < $num_lines) { if ($value!=='') { $value = wordwrap($value, 20, "\n"); $page->drawText(strip_tags(ltrim($value)), 75, $line, 'UTF-8'); $line -=14; } } } }
Использование wordwrap – хорошее начало, но это не поможет вам до конца. То, что вы, скорее всего, захотите сделать, это сделать отдельный вызов $page->drawText
для каждой строки.
Так например, что-то вроде этого.
$textChunk = wordwrap($value, 20, "\n"); foreach(explode("\n", $textChunk) as $textLine){ if ($textLine!=='') { $page->drawText(strip_tags(ltrim($textLine)), 75, $line, 'UTF-8'); $line -=14; } }
И имейте в виду, что в зависимости от того, где у вас есть это в pdf, он может стать довольно сложным. Например, если пользователь может ввести столько текста, сколько захочет в этот раздел, вам также необходимо убедиться, что этот текст не переполняется текстом другого раздела. Под этим я подразумеваю, что если у вас есть этот блок текста чуть выше другого блока текста, вам нужно нажать y-координаты нижнего блока, так как количество строк, созданных функцией wordwrap (), увеличивается
Magento 1.7
(вокруг строки 415 в app / code / local / Mage / Sales / Model / Order / Pdf / Abstract.php, если у вас нет файла на этом пути, скопируйте его из приложения / кода / ядра / Mage / Sales … location)
foreach ($payment as $value){ if (trim($value) != '') { //Printing "Payment Method" lines $value = preg_replace('/<br[^>]*>/i', "\n", $value); foreach (Mage::helper('core/string')->str_split($value, 50, true, true, "\n") as $_value) { $page->drawText(strip_tags(trim($_value)), $paymentLeft, $yPayments, 'UTF-8'); $yPayments -= 15; } } }
использовать это
foreach ($payment as $value){ if (trim($value) != '') { //Printing "Payment Method" lines $value = preg_replace('/<br[^>]*>/i', "\n", $value); foreach (Mage::helper('core/string')->splitWords($value, false,false, "\n") as $_value) { $page->drawText(strip_tags(trim($_value)), $paymentLeft, $yPayments, 'UTF-8'); $yPayments -= 15; } } }
также измените Mage :: helper ('core / string') -> str_split для Mage :: helper ('core / string') -> splitWords“