#php #fpdf
#php #fpdf
Вопрос:
У меня есть два примера кода ниже. Один работает, но второй (использующийся extend
для создания новой оболочки класса) — нет.
Обратите внимание, я значительно упростил следующие примеры.
Подход # 1
page.php:
<?php
include("fpdf.php");
$pdf = new FPDF;
$pdf->AddPage();
$pdf->SetFont('Arial','',11);
$pdf->Output();
?>
Это работает так, как ожидалось. Это создает пустую страницу.
Подход # 2
Но затем, используя FPDF по наследованию, я получаю сообщение об ошибке (см. Ниже блоки кода).
myPDF.php:
<?php
require ("fpdf.php");
class myPDF extends FPDF {
function createMyPage() {
$this->AddPage();
$this->SetFont('Arial','',11);
$this->Output();
}
}
?>
page.php:
<?php
include("myPDF.php");
$pdf = new myPDF;
$pdf->createMyPage();
?>
Этот второй подход выдает следующее предупреждение PHP и ошибку FPDF:
Предупреждение: in_array() ожидает, что параметром 2 будет array, значение null указано в /var/www/fpdftest/fpdf.php в строке 526 ошибка FPDF: неопределенный шрифт: helvetica
Есть идеи, чего мне здесь не хватает?
Комментарии:
1. Я не верю, что FPDF все еще поддерживается; однако, TCPDF является его логическим преемником (также бесплатным). Если вы можете (и я знаю, что это не всегда возможно с устаревшим кодом), переключитесь на TCPDF. (РЕДАКТИРОВАТЬ: И я вижу, что на форуме есть недавние ответы, так что, возможно, он не такой мертвый, как я думал, но я отчетливо помню, как читал автора, предлагающего людям перейти на TCPDF.)
2. Кроме того, чтобы попытаться ответить на ваш вопрос, вы можете захотеть вызвать
$this->FPDF($orientation,$unit,$size);
конструктор: fpdf.org/en/tutorial/tuto6.htm3. Кроме того, это буквально две разные ошибки или одна? Как в,
Warning
иFPDF error
?.4. Спасибо, Джаред, второе было именно тем, что требовалось, чтобы заставить его работать. Обе ошибки вызваны одним и тем же. Я также благодарен, что вы указали на TCPDF. Я не знал об этом. Я определенно собираюсь попробовать.
5. Нет проблем, я добавил это в качестве ответа, и, как я уже сказал, FPDF не может быть неактивным (форумы, конечно, не предполагают, что он, по крайней мере, не поддерживается). Мне действительно нравится TCPDF, но у FPDF также есть свои применения.
Ответ №1:
Когда вы создаете свой класс-оболочку, обязательно вызовите родительский конструктор:
<?php // Always use the full <?php open tag
require ("fpdf.php");
class myPDF extends FPDF {
// Or, __construct() if you only care about PHP5
function myPDF($orientation='P', $unit='mm', $size='A4') {
// Call parent constructor
$this->FPDF($orientation,$unit,$size);
// Initialization
$this->B = 0;
$this->I = 0;
$this->U = 0;
$this->HREF = '';
}
function createMyPage() {
$this->AddPage();
$this->SetFont('Arial','',11);
$this->Output();
}
}