以下是我的代码,打印“HELLO”,然后是虚线。这件事重复了50次。一切都很好,但第二页开始时,虚线消失了。此代码需要进行哪些修改?
<?php
require("fpdf.php");
class PDF extends FPDF
{
function SetDash($black=null, $white=null)
{
if($black!==null)
$s=sprintf('[%.3F %.3F] 0 d',$black*$this->k,$white*$this->k);
else
$s='[] 0 d';
$this->_out($s);
}
}
$pdf = new PDF('P', 'mm', 'A4');
$pdf->AliasNbPages();
$pdf->AddPage();
$margin = 0;
$pdf->SetFont('Arial','B',12);
for ($i = 0; $i < 50; $i++)
{
$pdf->Cell(90, 10, "Hello", 0, 1);
$pdf->SetDrawColor(0,0,0);
$pdf->SetDash(2,2);
$margin = $margin + 10;
$pdf->Line(10,$margin,200,$margin);
}
$pdf->Output();
?>
答案 0 :(得分:1)
即使在循环中间发生分页符,您也会在每行之后将$margin
变量的值递增10。因此,第二页上第一行的上边距将比第一页上最后一行的上边距大10毫米。
添加新页面时需要重置边距。
此问题的解决方案是覆盖FPDF的AcceptPageBreak
方法。当达到页面底部时,此方法拦截添加新页面。
class PDF extends FPDF
{
var $lineY = 0;
// ...
function AcceptPageBreak()
{
$this->lineY = 0;
return parent::AcceptPageBreak();
}
}
然后,在你的循环中,你可以这样做:
$pdf->Line(10, $pdf->lineY, 200, $pdf->lineY);