У меня есть простой скрипт, который создает файл PDF. Я получаю необходимую информацию из базы данных и использую foreach
для создания страниц PDF-файла, а на последней странице у меня есть диаграммы и другая информация, которые не извлекаются из БД. Все страницы, кроме последнего, должны иметь подзаголовок.
Мой текущий код:
foreach ($sql as $key => $value) { $pdf->Cell(20, $line_height, $value['sale_id'], '', '', 'L'); $pdf->Cell(90, $line_height, $value['product'], '', '', 'L'); $pdf->Cell(90, $line_height, $value['ammount'], '', '', 'L'); $pdf->Cell(90, $line_height, $value['value'], '', '', 'L'); }
В принципе, мне нужно, чтобы заголовок описывал каждую строку. Но если я это сделаю, все строки будут иметь подзаголовок:
foreach ($sql as $key => $value) { $pdf->SetFont('Arial', 'B', $font_size); $pdf->Ln(2 * $line_height); $pdf->Cell(20, $line_height, 'Number', '', '', 'L'); $pdf->Cell(120, $line_height, 'Product', '', '', 'L'); $pdf->Cell(40, $line_height, 'Ammount', '', '', 'L'); $pdf->Cell(40, $line_height, 'Value ($)', '', '', 'L'); // $pdf->SetFont('Arial', 'B', $font_size); $pdf->Ln(2 * $line_height); $pdf->Cell(20, $line_height, $value['sale_id'], '', '', 'L'); $pdf->Cell(120, $line_height, $value['product'], '', '', 'L'); $pdf->Cell(40, $line_height, $value['ammount'], '', '', 'L'); $pdf->Cell(40, $line_height, $value['value'], '', '', 'L'); }
Мне нужна эта подзаголовок на каждой странице, кроме последней. Я попытался сделать какой-то сумасшедший код с pageNo()
, но это не сработало.
Благодаря!
Хорошо, ребята, я решил свою проблему. Для тех, кто ищет что-то подобное, вот что я сделал: GetY()
возвращает позицию Y этой строки, поэтому, когда она является первой строкой страницы, это значение будет равно 0 (или константе, зависит от вашего раскладка). Я только что сделал:
foreach ($sql as $key => $value) { if ($pdf->GetY() == 0) { $pdf->SetFont('Arial', 'B', $font_size); $pdf->Ln(2 * $line_height); $pdf->Cell(20, $line_height, 'Number', '', '', 'L'); $pdf->Cell(120, $line_height, 'Product', '', '', 'L'); $pdf->Cell(40, $line_height, 'Ammount', '', '', 'L'); $pdf->Cell(40, $line_height, 'Value ($)', '', '', 'L'); } $pdf->SetFont('Arial', 'B', $font_size); $pdf->Ln(2 * $line_height); $pdf->Cell(20, $line_height, $value['sale_id'], '', '', 'L'); $pdf->Cell(120, $line_height, $value['product'], '', '', 'L'); $pdf->Cell(40, $line_height, $value['ammount'], '', '', 'L'); $pdf->Cell(40, $line_height, $value['value'], '', '', 'L'); }
Спасибо вам всем!
У меня была такая же проблема, пытаясь получить заголовок на каждой странице. Это также связано с базой данных MySql. Вот, что закончилось для меня.
<?php //PDF USING MULTIPLE PAGES //FILE Originally CREATED BY: Carlos José Vásquez Sáez //I fixed this on May 3/2013 as it was not working correctly for me. define('FPDF_FONTPATH', '/font/'); require('fpdf.php'); //Connect to your database $link = mysql_connect("localhost","","") or die ('Could not select database.'); $db_select = mysql_select_db("", $link) or die ('Could not select database.'); //Create new pdf file $pdf=new FPDF(); //Open file $pdf->Open(); //Disable automatic page break $pdf->SetAutoPageBreak(false); //Add first page $pdf->AddPage(); //set initial y axis position per page $y_axis_initial = 10; //Set Row Height $row_height = 8; //print column titles for the actual page $pdf->SetFillColor(232, 232, 232); $pdf->SetFont('Arial', 'B', 11); $pdf->SetY($y_axis_initial); $pdf->SetX(10); $pdf->Cell(80, $row_height, 'Products', 1, 0, 'C', 1); $pdf->Cell(20, $row_height, 'Price', 1, 0, 'C', 1); $pdf->Cell(30, $row_height, 'Customer', 1, 0, 'C', 1); //Select the Products you want to show in your PDF file $result=mysql_query('SELECT Product,Price,Customer FROM your_table ORDER BY Product', $link); //initialize counter $i = 0; //Set maximum rows per page $max = 30; //Data Table y axis position starting point $y_axis = $y_axis_initial + $row_height; while($row = mysql_fetch_array($result)) { //If the current row is the last one, create new page and print column title if ($i == $max) { $pdf->AddPage(); //print column titles for the current page $pdf->SetY($y_axis_initial); $pdf->SetX(10); $pdf->Cell(80, $row_height, 'Product', 1, 0, 'C', 1); $pdf->Cell(20, $row_height, 'Price', 1, 0, 'C', 1); $pdf->Cell(30, $row_height, 'Customer', 1, 0, 'C', 1); //Set $i variable to 0 (first row) $i = 0; //Reset the y axis value $y_axis = $y_axis_initial + $row_height;; } $Product = $row['Product']; $Price = $row['Price']; $Cust = $row['Customer']; $pdf->SetY($y_axis); $pdf->SetX(10); $pdf->Cell(80, $row_height, $Product, 1, 0, 'L', 1); $pdf->Cell(20, $row_height, $Price, 1, 0, 'L', 1); $pdf->Cell(30, $row_height, $Cust, 1, 0, 'L', 1); //Go to next row $y_axis = $y_axis + $row_height; $i = $i + 1; } mysql_close($link); //Create file $pdf->Output();
переопределите заголовок метода () FPDF в вашем классе.
class PDF extends FPDF { public function Header() { $this->Cell(0, 8, "HEADER TEXT", 0, 0, 'R'); } }
Этот метод будет автоматически вызван FPDF при добавлении новой страницы.