字符串填充文本模板

时间:2010-05-14 07:38:11

标签: php

我正在使用tcpdf([例8] [1])从txt模板创建PDF文件。 txt模板如下所示:

SALUTATION  
FIRSTNAME LASTNAME                            
STREET                     CURRENTDATE
SOMEMOREINFORMATION                           MYWEBSITE

我用正确的值替换这些标记。所以它看起来像这样:

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

在此示例中,当我替换值时,日期的缩进取决于街道名称的长度(我不想要)。我可以用str_pad解决这个问题,但问题是,我通常使用三列,并且有一些行只在col1中有内容,而col3在最后一行中。我该如何解决这个问题?是否有像Word中的“覆盖”功能,当你写,文本被覆盖?

提前致谢。

3 个答案:

答案 0 :(得分:1)

计算街道的字符串长度,然后添加/删除日期的左边距。

答案 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()这样的东西)

答案 2 :(得分:0)

我认为你只是str_replace()使用它们的值来占位符?

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

据推测,你将遇到与SOMEMOREINFORMATION相同的问题。可以使用相同的解决方案。

我意识到你说str_pad对你来说不是一个理想的解决方案。但是,我不明白为什么,即使你把它扩展到三列。你仍然可以使用这种方法。