Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PHP + PDF Line Break

Tags:

php

pdf

magento

I have the below code in my Magento store it adds the customers address to the invoice PDF's. Sometimes the lines of the address would be too long for the address labels so I added the $value = wordwrap($text, 10, "
\n"); line thinking this could create a new line. However, this doesn't seem to work in PDF docs and i just end up with a funny symbol where I'd like the line to be. does anyone know how I can get a new line?

P.S - My PHP knowledge is very basic.

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;
}
}
}
} 
like image 384
a1anm Avatar asked Nov 18 '25 00:11

a1anm


1 Answers

Using wordwrap is a good start, but it won't get you all the way there. What you will likely want to do is do a separate call to $page->drawText for each line.

So for example something like this.

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

And be aware that depending on where you have this on the pdf, it can get quite complex. For example, if the user can enter in as much text as they want into this section, you will also need to make sure that this text doesn't overrun into another section's text. By this I mean if you have this block of text just above another block of text, you need to push down the y-coordinates of the lower block as the number of lines created by wordwrap() increases

like image 179
shaune Avatar answered Nov 20 '25 16:11

shaune



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!