2010-05-14 59 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不是你理想的解决方案。但是,我不明白为什么,即使你把它扩展到三列。你仍然可以通过这种方法。