Я новичок в PHP, только немного поработав со стеком LAMP. Я хотел бы использовать Zend_PDF для заполнения форм с использованием PHP. У меня возникают проблемы, и я считаю, что не знаю, как правильно загрузить Zend Framework (или внешние библиотеки в целом). Вот что у меня сейчас:
<?php
include_path='.:/var/www/html/lib/';
require_once'.:/var/www/html/lib/Zend/Loader/ClassMapAutoloader.php';
$pdf = Zend_Pdf::load('.:/var/www/html/forms/test.pdf');
echo count($pdf->pages);
?>
Я использовал count();
в качестве теста, но я хочу использовать setTextField();
функции. У меня нет файла «/Loader/Autoloader.php», на который есть ссылки в некоторых руководствах.
Как правильно загрузить библиотеку, чтобы я мог использовать setTextField();
функционировать?
PHP 5.4.16,
Zend Framework 2.4.4,
CentOS7
Есть несколько вопросов с вашим вопросом.
Во-первых, Zend_Pdf
Вы упомянули выше, принадлежит ZF1, а не ZF2. Если вы действительно говорите о ZF2, то класс называется ZendPdf
и может использоваться в качестве автономного компонента — вам не нужно иметь полную копию ZF2, доступную для автозагрузки (composer сгенерирует автозагрузчик — вам просто нужно require
что в вашем сценарии). В прошлый раз, когда я проверял (что, по общему признанию, было пару лет назад), две версии были функционально эквивалентны, так что вам, вероятно, следует просто использовать версию, которая соответствует версии Zend Framework, которую вы фактически используете.
Что подводит меня к следующему вопросу. Поскольку я не был полностью уверен, на какую версию вы ссылались, я сделал быстрый текстовый поиск и обнаружил, что setTextField()
метод существует только в Zend_Pdf
от ZF1, а не ZendPdf
класс, который связан с ZF2, поэтому я не уверен, почему вы упомянули ZF2 в своем вопросе. Но в любом случае, я выяснил, как заставить работать версию ZF2 до того, как сделал это открытие, поэтому я включил оба метода ниже для полноты картины.
Кроме того, у вас есть ошибка в вашем require_once
утверждение — оно не должно содержать «.:» в начале. Теперь перейдем к моему актуальному ответу.
загрузка Zend_Pdf
от Zend Framework 1 Standalone
Это должно работать:
set_include_path( '/path/to/zf1/library' . PATH_SEPARATOR . get_include_path());
require_once( '/path/to/zf1/library/Zend/Loader/Autoloader.php' );
Zend_Loader_Autoloader::getInstance();
$pdf = new Zend_Pdf();
$pdf->pages[0] = new Zend_Pdf_Page( Zend_Pdf_Page::SIZE_A4 );
$pdf->pages[0]->setFont(Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_HELVETICA), 24 );
$pdf->pages[0]->drawText( "Hello world!", 240, 400 );
$pdf->save( 'example.pdf' );
Очевидно, вам нужно будет отрегулировать пути в приведенном выше коде, чтобы заставить его работать должным образом, но как только вы сделаете это и запустите сценарий, вы должны создать файл example.pdf.
загрузка ZendPdf
от Zend Framework 2 Standalone
Скачать ZendPdf
проект от github (https://github.com/zendframework/ZendPdf) используя инструкции на странице проекта или клонируйте репозиторий напрямую, используя git
Если вы предпочитаете.
Перейдите в каталог, где ZendPdf
был размещен и запущен composer install
скачать вспомогательные файлы.
В том же каталоге (то есть. Корень проекта ZendPdf
), создайте файл с именем test.php
со следующим содержанием:
require 'vendor/autoload.php';
use ZendPdf\PdfDocument;
use ZendPdf\Page;
use ZendPdf\Font;
$pdf = new PdfDocument();
$pdf->pages[0] = new Page( Page::SIZE_A4 );
$pdf->pages[0]->setFont( Font::fontWithName( Font::FONT_HELVETICA ), 24 );
$pdf->pages[0]->drawText( 'Hello world!', 240, 400 );
$pdf->save( 'example.pdf' );
Бежать php test.php
и файл example.pdf должен быть создан.
Волшебство в этом втором решении исходит от composer
, который создает autoload.php
файл для вас. Есть много, много преимуществ использования этого подхода, одним из которых является то, что вам не нужно устанавливать полную копию Zend Framework 2 просто для того, чтобы получить работающий автозагрузчик.
Других решений пока нет …