Объединяя tfpdf и fpdi

Я использую следующий код

<?php

$hd1 = $_POST["hd1"];
require_once('fpdi.php');
require_once('fpdf.php');
require('tfpdf.php');

$pdf =& new FPDI();

$pagecount = $pdf->setSourceFile('template.pdf');
$tplIdx = $pdf->importPage(1); 
$s = $pdf->getTemplatesize($tplIdx);
$pdf->AddPage($s['h'] > $s['w'] ? 'P' : 'L', array($s['w'], $s['h'])); 
$pdf->useTemplate($tplIdx,0, 0, 0, 0, true); 

$pdf->AddFont('DejaVu','','DejaVuSansCondensed.ttf',true);
$pdf->AddFont('DejaVu', 'B', 'DejaVuSansCondensed-Bold.ttf', true);


$pdf->SetFont('DejaVu', '', 14);

$pdf->Cell(50,10,$hd1,0,1);
// Select a standard font (uses windows-1252)
$pdf->SetFont('Arial', '', 14);
$pdf->Ln(10);
$pdf->Write(5, 'The file uses font subsetting.');

$pdf->Output('doc.pdf', 'I');
?>

Я получаю ошибку:

Fatal error: Class 'FPDF' not found in C:\xampp\htdocs\san\ak-form\pdf\fpdi_bridge.php on line 33

Когда я использую следующий код от http://www.setasign.com/products/fpdi/demos/tfpdf-demo/

<?php

$hd1 = $_POST["hd1"];

// require tFPDF
require_once('tfpdf.php');

// map FPDF to tFPDF so FPDF_TPL can extend it
class FPDF extends tFPDF
{
    /**
     * "Remembers" the template id of the imported page
     */
    protected $_tplIdx;

    /**
     * Draw an imported PDF logo on every page
     */
    public function Header()
    {
        if (is_null($this->_tplIdx)) {
            $this->setSourceFile("template.pdf");
            $this->_tplIdx = $this->importPage(1);
        }
        $size = $this->useTemplate($this->_tplIdx, 130, 5, 60);

        $this->SetFont('DejaVu', 'B', 16);
        $this->SetTextColor(0);
        $this->SetXY($this->lMargin, 5);

        $text = 'tFPDF (v' . tFPDF_VERSION . ') and FPDI (v'
              . FPDI::VERSION . ')';
        $this->Cell(0, $size['h'], $text);
        $this->Ln();
    }
}

// just require FPDI afterwards
require_once('fpdi.php');

// initiate PDF
$pdf = new FPDI();

// Add some Unicode font (uses UTF-8)
$pdf->AddFont('DejaVu', '', 'DejaVuSansCondensed.ttf', true);
$pdf->AddFont('DejaVu', 'B', 'DejaVuSansCondensed-Bold.ttf', true);

// add a page
$pdf->AddPage();

$pdf->SetFont('DejaVu', '', 14);

// Select a standard font (uses windows-1252)
$pdf->SetFont('Arial', '', 14);
$pdf->Ln(10);
$pdf->Write(5, 'The file uses font subsetting.');

$pdf->Output('doc.pdf', 'I');
?>

И получаю следующую ошибку:

Warning: fopen(/home/content/w/i/s/wiseinmotion/html/test3/pdf/font/unifont/DejaVuSansCondensed.ttf): failed to open stream: No such file or directory in C:\xampp\htdocs\san\ak-form\pdf\font\unifont\ttfonts.php on line 496
Can't open file /home/content/w/i/s/wiseinmotion/html/test3/pdf/font/unifont/DejaVuSansCondensed.ttf

Как правильно использовать выход из pdf и использовать шрифт utf-8?

1 ответ

Решение

Вы задаете два разных вопроса здесь:

  1. почему нет FPDF определенный в первом примере кода, и

  2. почему он не может загрузить мой шрифт во втором примере кода.

Сначала я отвечу на вопрос №2, потому что это легко: файл шрифта не найден. Проверьте свой путь и убедитесь, что код ищет шрифт в нужном месте.

Что касается № 1: я подозреваю, что проблема сводится к вашему require_once заявления. В частности, вы требуете fpdf.php в вашем коде, когда пример кода нет. Я предполагаю, что где-то есть конфликт.

Вместо того, чтобы тратить много времени на поиск проблем в библиотеках, я бы начал с примера кода (который взят с веб-сайта разработчика, поэтому мы почти уверены, что он работает - возможно, нет, но давайте предположим, что он работает, пока не доказано обратное)). Предполагая, что код работает (и все, что вам нужно сделать, это исправить путь к шрифту), начните с него и измените его так, чтобы он делал то, что вы хотите.

Другие вопросы по тегам