Jump to content

Geração de PDF com FPDF


Adampt

Recommended Posts

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

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 by Azuma
Link to comment
Share on other sites

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

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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.