为什么我的FPDF类函数SetMargins()不影响第一行?

时间:2015-05-15 16:39:25

标签: php mysql fpdf

我正在使用FPDF类根据mysql查询的结果创建pdf。信息按照预期在表格中输出为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();

?>

2 个答案:

答案 0 :(得分:8)

在添加第一页之前,只需定义页边距。该位置不会被setMargins()调用重置,从而导致"硬编码的帖子"在AddPage()中设置:

$pdf = new Table('P', 'mm', 'Letter');
$pdf->SetMargins(5, 5);
$pdf->AddPage();

答案 1 :(得分:1)

FPDF类中有一个名为$ cMargin的属性,它用于计算文本在单元格中打印之前的x偏移量,但似乎没有为它设置setter。它是一个公共属性,因此在您实例化FPDF类之后,只需调用:

$pdf->Ln(); //workaround for 1st line
  $pdf->Cell(..);

或者你可以解决你的第一行

class Hash
  def method_missing(key,*args)
    (args.empty? && key?(key)) ? self[key] : super
  end
end