Adampt Posted February 13, 2023 at 01:16 PM Report Share #630141 Posted February 13, 2023 at 01:16 PM Olá amigos. Estou tentando criar um ficheiro PDF a partir de uma tabela da BD. Para isto estou usando FPDF. Já consegui criar a tabela, mas precisava que após 25 linhas, fosse gerada uma nova página que continuasse com a impressão dos dados que vêm da tabela. Com o código que tenho neste momento a tabela é criada, mas após a linha 25 fica uma linha por página. Segue o meu código: <?php // Require composer autoload require '../pdf/fpdf.php'; $db = new PDO('XXXXXXXXXXXXXXXXXXXXXXXXX); class myPDF extends FPDF { public function header() { $db = new PDO(XXXXXXXXXXXXXXXXXXXXXX); $group = $db->query('select * from tbl_a WHERE ida=' . $_GET['idg']) ; $g2 = $group->fetch(PDO::FETCH_OBJ); $this->Image('../fimg/img.png', 10, 6, 50); $this->SetFont('arial', 'B', 16); $this->Cell(200, 25, 'TEXT', 0, 0, 'C'); $this->Ln(10); $this->Cell(200, 25, mb_convert_case(base64_decode($g2->gnome), MB_CASE_TITLE, 'UTF-8'), 0, 0, 'C'); $this->Ln(30); } public function footer() { $this->SetY(-10); $this->Image('../fimg/img2.png', 128, 265, 70); $this->SetFont('arial', '', 8); $this->Cell(0, 10, 'Page ' . $this->PageNo() . '/{nb}', 0, 0, 'C'); } public function headerTable() { $this->SetFont('arial', 'B', 11); $this->Cell(10, 10, 'No.', 1, 0, 'C'); $this->Cell(90, 10, 'Name', 1, 0, 'C'); $this->Cell(40, 10, 'PID', 1, 0, 'C'); $this->Cell(25, 10, 'Valid', 1, 0, 'C'); $this->Cell(25, 10, 'Birthday', 1, 0, 'C'); $this->Ln(); } public function viewtable($db) { $this->SetFont('arial', '', 10); $stmt = $db->query('select * from tbl2 WHERE id2=' . $_GET['idg']); $i = 1; while ($data = $stmt->fetch(PDO::FETCH_OBJ)) { $this->Cell(10, 8, $i, 1, 0, 'C'); $this->Cell(90, 8, mb_convert_case(base64_decode($data->nomegel), MB_CASE_TITLE, 'UTF-8'), 1, 0, 'L'); $this->Cell(40, 8, base64_decode($data->idcardgel), 1, 0, 'C'); $this->Cell(25, 8, $data->datavalidadegel, 1, 0, 'C'); $this->Cell(25, 8, $data->dnascimentogel, 1, 0, 'C'); $this->Ln(); if ($i>24){ $this->AddPage('P', 'A4', 0); }; $i++; } } } $pdf = new myPDF(); $pdf->AliasNbPages(); $pdf->AddPage('P', 'A4', 0); $pdf->headerTable(); $pdf->viewtable($db); $pdf->Output("List.pdf","I"); Desde já o meu obrigado. NOTA: Os dados do PDO foram ocultados e os nomes das tabelas e dos campos foram alterados, por razões de segurança. Link to comment Share on other sites More sharing options...
Azuma Posted February 13, 2023 at 03:59 PM Report Share #630143 Posted February 13, 2023 at 03:59 PM (edited) Boas. if ($i>24){ $this->AddPage('P', 'A4', 0); }; A partir do momento que i é maior que 24 vai adicionar sempre uma página porque vai ser sempre true. Parece-me que apenas precisas de voltar a colocar o $i = 1; if ($i>24){ $i = 1; $this->AddPage('P', 'A4', 0); }; Edited February 13, 2023 at 04:00 PM by Azuma Link to comment Share on other sites More sharing options...
Adampt Posted February 13, 2023 at 04:49 PM Author Report Share #630146 Posted February 13, 2023 at 04:49 PM Obrigado pela resposta, mas, parece-me, que desta forma if ($i>24){ $i = 1; $this->AddPage('P', 'A4', 0); }; Vai reiniciar a contagem, ou seja, o $i vai voltar a 1 e na nova página a contagem de registos irá recomeçar, que não é o que pretendo. O que preciso é que a contagem seja seguida aqui while ($data = $stmt->fetch(PDO::FETCH_OBJ)) { $this->Cell(10, 8, $i, 1, 0, 'C'); Link to comment Share on other sites More sharing options...
Azuma Posted February 13, 2023 at 05:09 PM Report Share #630147 Posted February 13, 2023 at 05:09 PM On 2/13/2023 at 4:49 PM, Adampt said: Obrigado pela resposta, mas, parece-me, que desta forma if ($i>24){ $i = 1; $this->AddPage('P', 'A4', 0); }; Vai reiniciar a contagem, ou seja, o $i vai voltar a 1 e na nova página a contagem de registos irá recomeçar, que não é o que pretendo. O que preciso é que a contagem seja seguida aqui while ($data = $stmt->fetch(PDO::FETCH_OBJ)) { $this->Cell(10, 8, $i, 1, 0, 'C'); Se não queres mexer nessa variável, adiciona outra de controlo que possas colocar a 1. Parece me o mais simples. Link to comment Share on other sites More sharing options...
Adampt Posted February 14, 2023 at 08:37 AM Author Report Share #630150 Posted February 14, 2023 at 08:37 AM Obrigado Azuma. Coloquei assim: $i = 1; $a = 1; while ($data = $stmt->fetch(PDO::FETCH_OBJ)) { .... .... .... $this->Ln(); if ($a>24){ $a = 1; $this->AddPage('P', 'A4', 0); }; $i++; $a++; } E resultou. Ele imprime as linhas até à 25 e depois insere nova página e continua com a numeração Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now