2010-05-14 122 views
0

我使用tcpdf([示例8] [1])從txt模板創建PDF文件。 txt的模板看起來是這樣的:文本模板的字符串填充

SALUTATION 
FIRSTNAME LASTNAME        
STREET      CURRENTDATE 
SOMEMOREINFORMATION       MYWEBSITE 

我請用正確的價值的標誌。因此,它應該是這樣的:

Mr. 
John Doe     
Downingstreet 10   14th May, 2010 
[email protected]         www.stackoverflow.com 

在這個例子中,當我更換值,日期的縮進取決於街道名稱(我不希望)的長度。我可以用str_pad解決這個問題,但問題是,我通常使用三列,並且在最後一行中只有col1和col3中的內容。我該如何解決這個問題?有沒有像Word中的「覆蓋」功能,當你寫的時候,文本會被覆蓋?

在此先感謝。

回答

1

計算街道的字符串長度,然後添加/刪除左側填充的日期。

0

您可以使用sprintf,例如,

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

打印

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

(你可以從第三行看到的寬度規格是最小長度,所以你可能需要使用像substr()

0

我相信你只是str_replace()的佔位符與他們的價值?

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

想必您會遇到與SOMEMOREINFORMATION相同的問題。可以使用相同的解決方案。

我知道你說str_pad不是你理想的解決方案。但是,我不明白爲什麼,即使你把它擴展到三列。你仍然可以通過這種方法。