将分页符动态添加到 html,其中包含可变大小的可变部分
Dynamically add page-breaks to html with variable amount of sections of variable sizes
我正在尝试解决当前的问题,我可以在以下方面寻求帮助:
从使用 php 的数据库中,页面必须加载 X 个部分,每个部分在顶部有一些内容,一个 table 和底部有一些内容,table 可以有 0到任意数量的行,具体取决于数据库中以前的内容。
除了 table 之外,其余内容的大小没有变化。
由于 table,我无法事先知道每个部分的大小,通常至少有 30 个部分。
此页面必须易于打印,除了分页符之外,一切都已经正常工作了。
我需要找到一种方法来动态添加分页符以适合页面中的部分而不在页面之间剪切它们。
代码大约有 400 行,所以 post 在这里不切实际,但是部分结构是这样的:
<section class="row">
<section>
<section class="col-md-2"></section>
<section class="col-md-8 printcenter">
<p class="docenteheader" >
<span class="tabspaceright">NAME: <strong>name</strong></span>
<span class="tabspaceleft">ID: <strong>number</strong></span>
</p>
<table>
<tr>
<th><strong>1:</strong></th>
<th><strong>2:</strong></th>
<th><strong>3:</strong></th>
<th><strong>4:</strong></th>
</tr>
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
</tr>
</table>
<p><strong>Something1:</strong> Something</p>
<p>
<span><strong>Something2: number</strong></span>
<span ><strong>Something3: number</strong></span>
</p>
<section class="rel_endline"></section>
</section>
<section class="col-md-2"></section>
</section>
</section>
我去掉了css类和原来的名字和PHP代码方便查看
这是示例 PHP 代码,如果有任何不清楚的地方,请告诉我。我尝试使用不言自明的变量名。
<?php
$PAGEBREAK_LENGTH = 1000; // Add a page break every 1000 characters.
$lengthTracker = '';
while ($row = odbc_fetch_array($res)){
$lengthTracker .= $row['article'];
$lengthSize = strlen($lengthTracker);
if ($lengthSize > $PAGEBREAK_LENGTH) {
echo '<div class="page-break">This is a page break</div>';
$lengthTracker = ''; // Reset length tracker since we just added a break
}
echo '<div class="article">';
echo $row['article'];
echo '</div>';
}
?>
如果您在回显文章之前包含 if ($lengthSize > $PAGEBREAK_LENGTH)
,您将倾向于包含分页符 "more often."如果您在回显文章之后包含 if
语句,您将较少出现分页符(因此您可能会有更大的文本块)。
尝试两种方式,看看您喜欢哪种风格,因为您(大概)不能在文章中间包含分页符。
我发现我的问题不是由错误的分页符引起的,而是我在一个元素中有负边距,这扰乱了分页符的整个工作方式,通过删除它,它可以正常工作。
我正在尝试解决当前的问题,我可以在以下方面寻求帮助: 从使用 php 的数据库中,页面必须加载 X 个部分,每个部分在顶部有一些内容,一个 table 和底部有一些内容,table 可以有 0到任意数量的行,具体取决于数据库中以前的内容。 除了 table 之外,其余内容的大小没有变化。
由于 table,我无法事先知道每个部分的大小,通常至少有 30 个部分。
此页面必须易于打印,除了分页符之外,一切都已经正常工作了。
我需要找到一种方法来动态添加分页符以适合页面中的部分而不在页面之间剪切它们。
代码大约有 400 行,所以 post 在这里不切实际,但是部分结构是这样的:
<section class="row">
<section>
<section class="col-md-2"></section>
<section class="col-md-8 printcenter">
<p class="docenteheader" >
<span class="tabspaceright">NAME: <strong>name</strong></span>
<span class="tabspaceleft">ID: <strong>number</strong></span>
</p>
<table>
<tr>
<th><strong>1:</strong></th>
<th><strong>2:</strong></th>
<th><strong>3:</strong></th>
<th><strong>4:</strong></th>
</tr>
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
</tr>
</table>
<p><strong>Something1:</strong> Something</p>
<p>
<span><strong>Something2: number</strong></span>
<span ><strong>Something3: number</strong></span>
</p>
<section class="rel_endline"></section>
</section>
<section class="col-md-2"></section>
</section>
</section>
我去掉了css类和原来的名字和PHP代码方便查看
这是示例 PHP 代码,如果有任何不清楚的地方,请告诉我。我尝试使用不言自明的变量名。
<?php
$PAGEBREAK_LENGTH = 1000; // Add a page break every 1000 characters.
$lengthTracker = '';
while ($row = odbc_fetch_array($res)){
$lengthTracker .= $row['article'];
$lengthSize = strlen($lengthTracker);
if ($lengthSize > $PAGEBREAK_LENGTH) {
echo '<div class="page-break">This is a page break</div>';
$lengthTracker = ''; // Reset length tracker since we just added a break
}
echo '<div class="article">';
echo $row['article'];
echo '</div>';
}
?>
如果您在回显文章之前包含 if ($lengthSize > $PAGEBREAK_LENGTH)
,您将倾向于包含分页符 "more often."如果您在回显文章之后包含 if
语句,您将较少出现分页符(因此您可能会有更大的文本块)。
尝试两种方式,看看您喜欢哪种风格,因为您(大概)不能在文章中间包含分页符。
我发现我的问题不是由错误的分页符引起的,而是我在一个元素中有负边距,这扰乱了分页符的整个工作方式,通过删除它,它可以正常工作。