PHP/FPDF - значение переменных класса не отображается в верхнем и нижнем колонтитулах

У меня возникли проблемы с настройкой верхнего и нижнего колонтитула PDF-файла, который я создаю с помощью FPDF. Как указано в руководстве по FPDF (http://www.fpdf.org/), я создал новый класс (PDF), который расширяет FPDF, чтобы я мог создавать верхний и нижний колонтитулы. Код для класса PDF следующий:

<?php
require('fpdf.php');

class PDF extends FPDF
{

var $primeiroNome;
var $ultimoNome;

function changeName($firstName, $lastName) {
 $this->primeiroNome = $firstName;
 $this->ultimoNome = $lastName;
}
// Cabeçalho
function Header()
{
 // Cor do texto
 $this->SetTextColor(0, 0, 0);
 // Logo
 $this->Image('Imagens/manviaPdf.png',110,6);
 // Tipo de letra
 if($this->page == 1) {
  $this->SetFont('Arial','B',15);
  // Titulo
  $this->Cell(30,10,'Currículo institucional de:',0,0,'L');
  // Quebra de linha
  $this->Ln(10);
  // Nome colaborador
  $this->Cell(30,10, $primeiroNome . ' ' . $ultimoNome,0,0,'L');
 }
 // Line break
 $this->Ln(12);
}

// Rodapé
function Footer()
{
 // Cor do texto
 $this->SetTextColor(0, 0, 0);
 // Posicionar o cabeçalho a 1,5 centimetros do fim da página
 $this->SetY(-15);
 // Tipo de letra
 $this->SetFont('Arial','I',8);
 // Número da página
 $this->Cell(0,10,'Pag '.$this->PageNo().'/{nb}',0,0,'L');
 // Informação adicional
 $this->Cell(0,10,'Curriculum Vitae de ' . $ultimoNome . ', ' . $primeiroNome . ' | MANVIA, S.A', 0, 0, 'R');
}

}
?> 

Переменные $primeiroNome и $ultimoNome, несмотря на то, что они установлены с помощью функции changeName (и я подтвердил, что переменные действительно сохраняют значение, используя эхо в конце changeName), не появляются при печати PDF, хотя появится остальная часть содержимого заголовка. Я также пытался использовать $GLOBALS, но безуспешно.

Объект PDF создается с использованием следующего кода:

$link = mysql_connect('localhost', 'user', 'password'); 
if (!$link) {
 die("A ligação ao servidor não foi possível!");
}
$bd_escolhida = mysql_select_db('criadorcv',$link);
if(!$bd_escolhida) {
 die("Não é possível escolher a base de dados definida");
}

$queryString = "SELECT primeiroNome, ultimoNome FROM cartaovisita WHERE id=" . $value; 
$query = mysql_query($queryString) or die ("Problema ao obter os dados do colaborador");
$row = mysql_fetch_array($query);

$pdf = new PDF();
$pdf->changeName($row['primeiroNome'], $row['ultimoNome']);

mysql_free_result($query);

$pdf->AliasNbPages();
$pdf->AddPage();
$pdf->AddFont('Garamond', '', 'GARA.php');
$pdf->SetFont('Arial','B',15);
$pdf->SetFillColor(174, 38, 22);
$pdf->SetTextColor(255, 255, 255);
$pdf->Cell(0,10,'Cartão de Visita',1, 0, 'L', true);
$pdf->SetTextColor(0, 0, 0);
.....

Любая помощь будет оценена по достоинству.


person Judas    schedule 07.09.2011    source источник
comment
При отладке старайтесь отбрасывать ненужный код. Если echo показывает, что ваши значения достигают changeName(), нет смысла устранять неполадки в коде SQL, который вы используете для их получения.   -  person Álvaro González    schedule 07.09.2011


Ответы (1)


Упомянутые вами переменные являются свойствами класса, а не локальными переменными методов, поэтому вы должны использовать префикс $this->. Вместо этого:

$this->Cell(0,10,'Curriculum Vitae de ' . $ultimoNome . ', ' . $primeiroNome . ' | MANVIA, S.A', 0, 0, 'R');
}

... сделай это:

$this->Cell(0,10,'Curriculum Vitae de ' . $this->ultimoNome . ', ' . $this->primeiroNome . ' | MANVIA, S.A', 0, 0, 'R');
}

Вы сохраняете их правильно, но называете их неправильно :)

person Álvaro González    schedule 07.09.2011