为什么我的 FPDF class 函数 SetMargins() 不影响第一行?
Why doesn't my FPDF class function SetMargins() effect the first row?
我正在使用 FPDF class 根据 mysql 查询的结果创建 pdf。信息按预期以 table 格式输出为 pdf,但是当我使用 SetMargins() 设置页边距时出现了问题。除了第一行之外的所有内容都会受到影响。第一行似乎被硬编码到某个位置或边距定义。
这是我的代码:
class Table extends FPDF
{
public function CreateTable($header, $data)
{
//Header
$this->SetFillColor(255);
$this->SetTextColor(0);
$this->SetFont('Arial','B', 12);
foreach ($header as $col) {
$this->Cell($col[1], 10, $col[0], 1, 0, 'C');
//Cell(float w [, float h [, string txt [, mixed border [, int ln [, string align [, boolean fill [, mixed link]]]]]]])
}
$this->Ln();
//Data
$this->SetFillColor(255);
$this->SetTextColor(0);
$this->SetFont('Arial', '', 8);
foreach ($data as $row) {
$i = 0;
foreach ($row as $field) {
$this->Cell($header[$i][1], 6, $field, 1, 0, 'C');
$i++;
}
$this->Ln();
}
}
}
//column headings for the department table
$dept_header = array(array('Name', 75), array('Phone', 40), array('Fax', 40));
//column headings for the team tables
$team_header = array(array('Name', 35), array('Role', 30), array('Office', 25), array('Cell', 25), array('Email', 45), array('Pager', 25));
//get data
$query = new ConnectQuery();
$dept_data = $query->all('SELECT * FROM Table');
$team_data = $query->all('SELECT CONCAT_WS(" ", FIRST_NAME, LAST_NAME), JOB_ROLE, OFFICE_PHONE, MOBILE_PHONE, EMAIL, PAGER_NUM FROM Table2');
$pdf = new Table('P', 'mm', 'Letter');
$pdf->AddPage();
$pdf->SetMargins(5, 5);
$pdf->CreateTable($team_header, $team_data);
$pdf->CreateTable($dept_header, $dept_data);
$pdf->Output();
?>
FPDFclass中有一个属性叫做$cMargin,用来计算文本在单元格内打印前的x偏移量,但是没有出现成为它的setter。这是一个 public 属性,因此在实例化 FPDF class 之后,只需调用:
$pdf = new fpdf('P','mm','A4');
$pdf->cMargin = 0;
或者你可以像
这样解决你的第一行
$pdf->Ln(); //workaround for 1st line
$pdf->Cell(..);
只需在添加第一页之前定义页边距。该位置不会被 setMargins() 调用重置,这会导致在 AddPage() 中设置的 "hardcoded postition":
$pdf = new Table('P', 'mm', 'Letter');
$pdf->SetMargins(5, 5);
$pdf->AddPage();
我正在使用 FPDF class 根据 mysql 查询的结果创建 pdf。信息按预期以 table 格式输出为 pdf,但是当我使用 SetMargins() 设置页边距时出现了问题。除了第一行之外的所有内容都会受到影响。第一行似乎被硬编码到某个位置或边距定义。
这是我的代码:
class Table extends FPDF
{
public function CreateTable($header, $data)
{
//Header
$this->SetFillColor(255);
$this->SetTextColor(0);
$this->SetFont('Arial','B', 12);
foreach ($header as $col) {
$this->Cell($col[1], 10, $col[0], 1, 0, 'C');
//Cell(float w [, float h [, string txt [, mixed border [, int ln [, string align [, boolean fill [, mixed link]]]]]]])
}
$this->Ln();
//Data
$this->SetFillColor(255);
$this->SetTextColor(0);
$this->SetFont('Arial', '', 8);
foreach ($data as $row) {
$i = 0;
foreach ($row as $field) {
$this->Cell($header[$i][1], 6, $field, 1, 0, 'C');
$i++;
}
$this->Ln();
}
}
}
//column headings for the department table
$dept_header = array(array('Name', 75), array('Phone', 40), array('Fax', 40));
//column headings for the team tables
$team_header = array(array('Name', 35), array('Role', 30), array('Office', 25), array('Cell', 25), array('Email', 45), array('Pager', 25));
//get data
$query = new ConnectQuery();
$dept_data = $query->all('SELECT * FROM Table');
$team_data = $query->all('SELECT CONCAT_WS(" ", FIRST_NAME, LAST_NAME), JOB_ROLE, OFFICE_PHONE, MOBILE_PHONE, EMAIL, PAGER_NUM FROM Table2');
$pdf = new Table('P', 'mm', 'Letter');
$pdf->AddPage();
$pdf->SetMargins(5, 5);
$pdf->CreateTable($team_header, $team_data);
$pdf->CreateTable($dept_header, $dept_data);
$pdf->Output();
?>
FPDFclass中有一个属性叫做$cMargin,用来计算文本在单元格内打印前的x偏移量,但是没有出现成为它的setter。这是一个 public 属性,因此在实例化 FPDF class 之后,只需调用:
$pdf = new fpdf('P','mm','A4');
$pdf->cMargin = 0;
或者你可以像
这样解决你的第一行$pdf->Ln(); //workaround for 1st line
$pdf->Cell(..);
只需在添加第一页之前定义页边距。该位置不会被 setMargins() 调用重置,这会导致在 AddPage() 中设置的 "hardcoded postition":
$pdf = new Table('P', 'mm', 'Letter');
$pdf->SetMargins(5, 5);
$pdf->AddPage();