生成具有动态行高度的HTML表

时间:2013-08-05 06:34:18

标签: php html

我需要使用PHP根据数据库中的某些值动态打印带行高度集的html表。似乎html 5不支持内联高度和标签,而是使用css代替。 我的要求是生成一个html文件,然后使用DOM pdf将其转换为pdf。

请指导我如何动态设置这些参数或使用css或者库是否已用于相同目的。

我搜索了很多,但无法找到符合我要求的任何结果。 也是附加最终输出格式

(在答案栏中,我打印了一些值,即每行所需的高度)Sample Output

提前致谢

3 个答案:

答案 0 :(得分:1)

您可以使用内联样式:

<tr style="height: 300px;"></tr>

我不确定您是否可以有效设置<tr>代码的高度,因此您可能需要单独设置行中每个<td>的高度。试一试。

此外,我不确定你是如何构建你的行和列数组的,但是这可能会对如何实现它有所启发。

<?php
$array=array(array(50,'r1c1','r1c2'),array(50,'r2c1','r2c2'));
echo '<table>';
foreach($array as $row)
{
    echo '<tr style="height: '.$row[0].'px;">';
    echo '</tr>';
    for($i=1;$i<count($row);++$1)
    {
        echo '<td>'.$row[$i].'</td>';
    }
}
echo '</table>';
?>

如果您仍然需要帮助,请将您想要转换的确切数组发布到<table>,我会尽力协助您。

答案 1 :(得分:1)

如果我理解这一点,你的表行可以是彼此不同的大小,但是对于每一行,数据库中都有一个规则,它设置行的高度,无论行的内容有多高,对吧?然后你可以使用这样的东西:

<html>
<head>
    <style>
        <?php foreach($yourRows as $key => $row) { ?>
            #row<?=$key;?>{
                height: <?=$row['height']; ?>px;
            }
        <?php } ?>
    </style>
</head>
<body>
    <table>
    <?php foreach($yourRows as $key => $row) { ?>
        <tr id="row<?=$key; ?>">
            ...
        </tr>
    <?php } ?>
    </table>
</body>

在样式标记中,您可以将“#row<?=$key;?>”替换为“#row<?=$key;?> td

Updated

无论如何,如果你想使用内联样式,你可以这样做:

<html>
<body>
    <table>
        <?php foreach($yourRows as $row) { ?>
                <tr style="height:<?=$row['height']; ?>px">
                    Or you can apply height to td instead of the tr...
                </tr>
        <?php } ?>
    </table>
</body>

答案 2 :(得分:1)

如果您认为jQuery可能在这里工作是一个建议。我不确定它是否适用于DOMPDF但是因为我们正在动态创建CSS,所以一旦DOM加载就应该没问题。

如果您确切知道每行的高度 - 然后使用eq使用jQuery选择它们。

$(document).ready(function() {
    $('table tr').eq(1).css({'height':'250'});
    $('table tr').eq(3).css({'height':'450'});
});

这是fiddle

这样您就不必修改输出,但必须假设内容不会高于固定高度。

如果您需要更加动态,那么您需要将标识符与行关联,例如类或类似的东西。或者,如果您的内容中有一个模式是创建一个正则表达式来扫描您的内容并以这种方式识别它 - 那么您可以使用jQuery匹配后对这些行应用CSS规则。

修改

好的,如果您将高度值存储在数据库中,我可能会有些误解。它看起来好像你已经确定你无法使用内联样式。

这是我的下一个建议。

你是从一个循环构建表,所以它可能看起来像这样。

foreach($rows as $row) {
  echo '<tr data-height="'.$row['height'].'"><td>...</td></tr>;
}

如果你添加 data-height =“'。$ row ['height']。'”那么你有一个我们可以使用jQuery data这样的值。< / p>

$(document).ready(function() {
    $('table tr').each(function() {
        var height = $(this).data('height');
        $(this).css({ 'height': height });
    });
});

以下是具有静态数据高度值的示例fiddle。让我知道你是怎么过的。