2013-03-14 35 views
1

基本上,我使用mpdf(一个自定义PHP类)为网站用户创建动态pdf。除了一件事之外,这一切都运行良好。我使用的是点的领导人在我的网站的HTML/CSS创建这种效果:如何使用php填充周期列表项目和价格?

http://jsfiddle.net/j6JWT/7/

dl { width: 400px } 
dt { float: left; width: 300px; overflow: hidden; white-space: nowrap } 
dd { float: left; width: 100px; overflow: hidden } 

dt span:after { content: " .................................................................................." } 

然而,MPDF当它生成PDF格式完全忽略了这个CSS。如果有人熟悉mpdf,如果你告诉我为什么这么做,我会很感激。

事情是,使用PHP实际生成期间可能是一个更好的主意。为了澄清,我希望通过PHP实现这种效果http://jsfiddle.net/j6JWT/7/

我在概念化方面遇到麻烦的是如何使它动态化。这些项目来自数据库,并且一些列表项目非常长,因此如果您了解,它们之间的点和价格之间的点就会减少。

任何和所有帮助价值!

+0

是等宽字体中的项目吗? – Popnoodles 2013-03-14 03:06:36

+0

如果您只是想要填充字符串,请查看http://php.net/manual/en/function.str-pad.php。也许看一下可以正常使用CSS的选项也很有趣。看看https://code.google.com/p/wkhtmltopdf/ – 2013-03-14 03:12:26

+0

@popnoodles很确定它不是一个等宽字体。 http://www.google.com/webfonts/specimen/Didact+Gothic – Starkers 2013-03-14 03:12:55

回答

2

我不认为这是一个安全的解决方案,用CSS或PHP生成“...”内容,因为您不确定策略的行为。它纯粹是一个演示问题。

可以产生一些更多的CSS

dl { width: 450px } 
dt { float: left; height: 20px; width: 300px; display: block; position: relative; } 
dd { float: left; height: 16px; padding-top: 6px; padding-left: 5px; width: 120px; overflow: hidden } 
dt { border-bottom: 1px dotted black; } 
dt span { border: 0; display: inline-block; height: 20px; position: absolute; left: 0; top: 6px; background-color: #FFFFFF; padding-right: 5px; } 

这里是一个工作示例相同的解决方案:jsfiddle

你只需要检查PDF类是妥善处理这些CSS规则。

+0

这是一个伟大的工作! – Starkers 2013-03-19 19:45:53

0

容易,如果它是一个等宽字体。

echo '<pre>'; 
// pretend we know the maximum item name strlen, these dots would be that length + 1 at least 
$maxdots='........................................................................'; 
$maxlen=strlen($maxdots); 

$items=array(array('Drug 1', '10ml'), array('Another drug', '20ml')); 
foreach ($items as $item){ 
    $item[1]=substr($maxdots.$item[1], strlen($item[0])-$maxlen); 
    echo $item[0].$item[1]."\n"; 

} 

,如果它不是等宽的另一种方法是使用重复的背景图片

<div class="dottedrow"> 
    <span class="title">Drug 1</span> 
    <span class="size">10ml</span> 
</div> 

使用CSS

.dottedrow{ 
    background:url(dots.png) bottom left repeat-x; /* or is it repeat-y?*/ 
    display:block; 
} 
.dottedrow span{ 
    background:#fff; /* knock out the image */ 
    float:left; 
} 
.dottedrow span.title{ 
    text-align:left; 
    width:70%; 
} 
.dottedrow span.size{ 
        text-align:right;  
        width:30%; 
    } 

现在我的想法。