2011-02-09 2 views
3

У меня есть код ниже в моем магазине Magento, который добавляет адрес клиентов в PDF-файл счета. Иногда строки адреса были бы слишком длинными для ярлыков адресов, поэтому я добавил значение $ value = wordwrap ($ text, 10, "
\ n"); это может создать новую строку. Однако, похоже, это не работает в документах PDF, и я просто получаю смешной символ, где мне бы хотелось, чтобы линия была. Кто-нибудь знает, как я могу получить новую строку?PHP + PDF Line Break

P.S - Знание 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; 
} 
} 
} 
} 

ответ

7

Использование 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() увеличиваю

+0

Спасибо! Проработал угощение :) – a1anm

0

Magento 1,7

вместо (строка 415 в приложении/код/​​местная/Маг/Продажи/Модель/Заказ/Pdf/Abstract.php, если у вас нет файла на этом пути, скопируйте его из приложения/кода/ядра/Мага/Продажи ... место)

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 to Mage :: helper ('core/string') -> splitWords``