PHP + PDF разрыв строки - PullRequest
       0

PHP + PDF разрыв строки

3 голосов
/ 10 февраля 2011

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

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;
}
}
}
} 

Ответы [ 2 ]

7 голосов
/ 10 февраля 2011

Использование 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 голосов
/ 26 марта 2013

Magento 1.7

(около строки 415 в app / code / local / Mage / Sales / Model / Order / Pdf / Abstract.php, если у вас нет файла по этому пути, скопируйте его из app / code/ core / 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:: помощник ( 'ядро / строка') -> splitWords``

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...