Bir metin şablonu için dizesi doldurma

3 Cevap

Ben TCPDF ile bir txt-şablondan bir PDF dosyası oluşturma ediyorum ([Örnek 8] [1]). Txt-şablonu bu gibi görünüyor:

SALUTATION  
FIRSTNAME LASTNAME                            
STREET                     CURRENTDATE
SOMEMOREINFORMATION                           MYWEBSITE

Ben doğru değer ile bu işaretçileri değiştirin. Böyle olmazdı, böylece:

Mr.  
John Doe                   
Downingstreet 10           14th May, 2010
john@doe.com                                  www.stackoverflow.com

Ben değerlerin yerine bu örnekte, tarih girinti (istemiyorum) cadde adının uzunluğuna bağlıdır. Ben str_pad ile bu sorunu çözebilir ama sorun ben normalde üç sütun kullanın ve yalnızca son satırı olarak col1 ve col3 içerik var hatları vardır, olduğunu. Nasıl bu sorunu çözebilir? Word'de "üzerine yaz" fonksiyonu gibi bir şey yazdığınızda, metin sadece üzerine alır var mı?

Şimdiden teşekkürler.

3 Cevap

Sokaktaki dize uzunluğunu sayın ve sonra tarih sol dolgu ekle / kaldır.

Sen sprintf, örneğin kullanabilirsiniz

function something($street, $currentDate, $foo) {
  $s = sprintf('%-20s    %-18s    %s',
    $street, 
    $currentDate, 
    $foo
  );
  return $s;
}

echo something('streetA', '14th May, 2010', 'lalala'), "\n";
echo something('Downingstreet 10', '14th May, 2010', 'lalala'), "\n";
echo something('abcdefghijklmnopqrstuvwxyz 10', '14th May, 2010', 'lalala'), "\n";

baskılar

streetA                 14th May, 2010        lalala
Downingstreet 10        14th May, 2010        lalala
abcdefghijklmnopqrstuvwxyz 10    14th May, 2010        lalala

(Eğer üçüncü satırında gördüğünüz gibi genişliği şartname minimum length, yani substr() gibi bir şey kullanmak gerekebilir)

Ben kendi değerleri ile yer tutucular ing ') sadece str_replace (vardır tahmin?

$streetPlaceHolder = 'STREET                     ';
$streetReplacement = str_pad('Downingstreet 10', strlen($streetPlaceHolder));
$template = str_replace($streetPlaceHolder, $streetReplacement, $template);

Muhtemelen sen SOMEMOREINFORMATION ile aynı sorun haline çalışır. Bu, aynı çözelti kullanılabilir.

Ben str_pad sizin için ideal bir çözüm olmadığını söyledi biliyoruz. Ancak, üç sütun için bu uzatmak bile, neden anlamıyorum. Eğer hala bu yöntemle ile alabilirsiniz.