【发布时间】:2016-09-13 08:11:28
【问题描述】:
我的拼贴项目即将结束,我现在正在尝试编写一个使用 FPDF 生成 PDF 文件的脚本。
该脚本应查询数据表并从一个表返回作业数据并从另一表返回作业 cmets。这一切都有效。
然后我以每页最多 25 行的行输出每个作业(横向)。同样,所有这些都有效。输出所有作业后,我需要在作业数据下方输出 cmets 数据。
这可行,但 cmets 数据不会在页面底部之前分页。任何人都可以看到我哪里出错了。我在我认为错误的地方用 //***** 标记了下面的脚本。我知道脚本很长,但我认为它可以更好地解释我的问题。
$pdf = new PDF();
$pdf->AliasNbPages();
$pdf->SetAutoPageBreak(false);
$pdf->AddPage(L);
$y_axis_initial = 40;
//initialize counter
$i = 0;
//Set maximum rows per page
$max = 25;
$y_axis = 40;
//Set Row Height
$row_height = 6;
$y_axis = $y_axis + $row_height;
$pdf->SetFillColor(232,232,232);
$pdf->SetFont('Arial','B',9);
$pdf->SetY(40);
$pdf->SetX(10);
$pdf->Cell(13,6,'SeqID',1,0,'L',1);
$pdf->SetX(23);
$pdf->Cell(150,6,'Sequence',1,0,'L',1);
$pdf->SetX(150);
$pdf->Cell(110,6,'Item',1,0,'L',1);
$pdf->SetX(255);
$pdf->Cell(25,6,'Status',1,0,'L',1);
$column_seqid = "";
$column_headerid = "";
$column_seq = "";
$column_status = "";
//For each row, add the field to the corresponding column
while ($row_Audits = mysql_fetch_assoc($Audits))
{
if ($i == $max)
{
$pdf->AddPage('L');
$newY = $pdf->GetY();
$y_axis = 40;
$pdf->SetFillColor(232,232,232);
//print column titles for the current page
$pdf->SetFont('Arial','B',9);
$pdf->SetY(40);
$pdf->SetX(10);
$pdf->Cell(13,6,'SeqID',1,0,'L',1);
$pdf->SetX(23);
$pdf->Cell(150,6,'Sequence',1,0,'L',1);
$pdf->SetX(150);
$pdf->Cell(110,6,'Item',1,0,'L',1);
$pdf->SetX(255);
$pdf->Cell(25,6,'Status',1,0,'L',1);
//Go to next row
$y_axis = $y_axis + $row_height;
//Set $i variable to 0 (first row)
$i = 0;
}
if(strlen($row_Audits['SeqNo']) <4)
{
$SeqID = "0".$row_Audits['SeqNo'];
} else {
$SeqID = $row_Audits['SeqNo'];
}
$column_seqid = $SeqID;
$column_headerid = $row_Audits['SeqHeader'];
if($row_Audits['SeqNo'] =="1306")
{
$Seq = $row_Audits['SeqText'] . " " . $row_Audits['WaterHot'];
}elseif($row_Audits['SeqNo'] =="1307")
{
$Seq = $row_Audits['SeqText'] . " " . $row_Audits['WaterCold'];
} else {
$Seq = $row_Audits['SeqText'];
}
$column_seq = $Seq;
if($row_Audits['Status'] == "")
{
$Status = "Pass";
}elseif($row_Audits['Status'] == "1")
{
$Status = "Fail";
}elseif($row_Audits['RepairCode'] == "4")
{
$Status = "Repaired";
}elseif($row_Audits['Status'] == "3")
{
$Status = "Fixed";
}elseif($row_Audits['Status'] === "")
{
$Status = "Required";
}
$column_status = $Status;
$pdf->SetFont('Arial','',8);
$pdf->SetY($y_axis);
$pdf->SetX(10);
$pdf->Cell(13,6,$column_seqid,1);
$pdf->SetX(23);
$pdf->Cell(127,6,$column_headerid,1,'L');
$pdf->SetX(150);
$pdf->Cell(105,6,$column_seq,1,'L');
$pdf->SetX(255);
$pdf->Cell(25,6,$column_status,1,'L');
$y_axis = $y_axis + $row_height;
$i = $i + 1;
}
//*******************************************************************
// Up to this point the output is corrent in it's format. I then need to display the data concerning any comments.
// But when the PDF is displayed the comments data will not break at the botton of the page
if($totalRows_Comments > 0)
{
$column_comments = "";
$column_seq_comments = "";
while ($row_Comments = mysql_fetch_assoc($Comments)) {
$SeqComments = substr($row_Comments['SeqID'], 5);
$CommentsText = $row_Comments['Comments'];
$column_seq_comments = $column_seq_comments.$SeqComments."\n";
$column_comments = $column_comments.$CommentsText."\n";
}
//Create lines (boxes) for each ROW (Product)
//If you don't use the following code, you don't create the lines separating each row
$pdf->SetFont('Arial','B',10);
$newY = $pdf->GetY();
$y_axis = $newY + 28;
$pdf->Ln(10);
$pdf->SetFont('Arial','',8);
$pdf->SetY($y_axis - 10);
$pdf->SetX(10);
$pdf->Cell(64,6,'Auditors comments',0,0,'L',0);
$pdf->SetY($y_axis);
$pdf->SetX(10);
$pdf->MultiCell(10,6,$column_seq_comments,1);
$pdf->SetY($y_axis);
$pdf->SetX(20);
$pdf->MultiCell(260,6,$column_comments,1);
while ($i < $totalRows_Comments)
{
$pdf->SetX(10);
$pdf->MultiCell(194,6,'',1);
$i = $i +1;
}
}
$pdf->Ln();
$newY = $pdf->GetY();
$y_axis = $newY + 5;
$pdf->SetFont('Arial','B',10);
$pdf->SetX(10);
$pdf->MultiCell(81,6,'Engineers comments:',0);
$newY = $pdf->GetY();
$y_axis = $newY + 5;
$pdf->SetY($y_axis);
$pdf->SetX(10);
$pdf->MultiCell(81,6,'Engineer:....................................',0);
$newY = $pdf->GetY();
$y_axis = $newY + 5;
$pdf->SetY($y_axis);
$pdf->SetX(10);
$pdf->Cell(81,6,'Repair date:....................................',0);
$pdf->Output();
在这方面的任何帮助都会很棒,我提前感谢您的时间。
附加代码
if($totalRows_Comments > 0) {
$column_comments = "";
$column_seq_comments = "";
$max_comments_per_page_ = 25;
$pdf->SetFont('Arial','B',10);
$newY = $pdf->GetY();
$pdf->Ln(10);
$pdf->SetFont('Arial','',8);
$pdf->SetY($newY + 10);
$pdf->SetX(10);
$pdf->Cell(64,6,'Auditors comments',0,0,'L',0);
while ($row_Comments = mysql_fetch_assoc($Comments)) {
if ($j == $max_comments_per_page) {
$j = 1;
$pdf->AddPage('L');
$pdf->Ln(10);
$pdf->SetFont('Arial','',8);
$pdf->SetY(50);
$pdf->SetX(10);
$pdf->Cell(64,6,'Auditors comments',0,0,'L',0);
}
$SeqID = preg_replace("/[^0-9,.]/", "", $row_Comments['SeqID']);
if(strlen($SeqID) <4) {
$SeqComments = "0".$SeqID;
} else {
$SeqComments = $SeqID;
}
$CommentsText = $row_Comments['Comments'];
$column_seq_comments = $column_seq_comments.$SeqComments."\n";
$column_comments = $column_comments.$CommentsText."\n";
//$pdf->SetY($y_axis);
$pdf->SetX(10);
$pdf->MultiCell(10,6,$column_seq_comments,1);
//$pdf->SetY($y_axis);
$pdf->SetX(20);
$pdf->MultiCell(260,6,$column_comments,1);
$j++;
}
}
附加代码
$_row_cmets 数组包含。示例:
Array ([UniqueID] => NXLHR01071474538755 [SeqID] => SeqID110 [Comments] => 碎裂 - 划痕 - 染色 - 需要油漆) Array ( [UniqueID] => NXLHR01071474538755 [SeqID] => SeqID203 [Comments] =>房间门把手/防撞板 - 不安全/不工作 安全门链 - 不工作 房间门死锁 - 未正确操作 ) 阵列 ( [UniqueID] => NXLHR01071474538755 [SeqID] => SeqID304 [Comments] => 单位 - 嘈杂 -不工作)阵列([UniqueID] => NXLHR01071474538755 [SeqID] => SeqID404 [评论] => 门铰链 - 吱吱声/棒 - 需要油/维修)阵列([UniqueID] => NXLHR01071474538755 [SeqID] => SeqID502 [评论] => 门把手/防撞板 - 不安全/不工作 ) 阵列 ( [UniqueID] => NXLHR01071474538755 [SeqID] => SeqID1411 [评论] => 水龙头 - 不安全/泄漏 - 修复弹出塞或插头 - 需要调整布线 - 损坏/破损 - 修复浴缸面板 - 损坏 - 修复不良开裂的灌浆/密封胶/硅/条 - 修复淋浴头 - 曝气器de-Scaled ) Array ( [UniqueID] => NXLHR01071474538755 [SeqID] => SeqID1305 [Comments] => 染色/变色/水垢可见/失去光泽 - 修复)
【问题讨论】:
-
$pdf->AddPage(L);L应该用引号引起来(在代码的顶部)。 -
您需要使用行而不是手动添加单元格。如果启用 $pdf->SetAutoPageBreak。它会自动添加分页符。
-
@Martin 感谢您的评论,错过了该评论,但仍然存在布局问题。再次非常感谢。