1

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

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

我用谷歌搜索了很多,但找不到任何符合我要求的结果。也附上最终输出格式

(在答案栏中,我打印了一些值,即每行所需的高度)样本输出

提前致谢

4

3 回答 3

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>,我会尽力提供帮助。

于 2013-08-05T06:43:33.563 回答
1

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

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

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

这是小提琴

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

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

编辑

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

这是我的下一个建议。

您正在从循环中构建表格,因此它可能看起来像这样。

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

如果你添加data-height="'.$row['height'].'"那么你有一个值,我们可以像这样使用 jQuery 的数据获得。

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

这是一个使用静态数据高度值的示例。让我知道你是怎么办的。

于 2013-08-05T09:28:14.117 回答
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>

于 2013-08-05T06:51:34.197 回答