2015-07-21 3 views
0

Я новичок в PHP, но немного работал с стеком LAMP. Я хотел бы использовать Zend_PDF для заполнения форм с помощью PHP. У меня возникают проблемы и считаю, что я не знаю, как правильно загружать Zend Framework (или внешние библиотеки в целом). Вот то, что я в настоящее время:Использование Zend_PDF и Zend Framework, загрузка библиотек в PHP?

<?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

ответ

1

Есть несколько вопросов, с вашим вопросом.

Во-первых, упомянутый выше Zend_Pdf принадлежит ZF1, а не ZF2. Если вы действительно говорите о ZF2, то класс называется ZendPdf и может использоваться как отдельный компонент - вам не нужно иметь полную копию ZF2, доступную для автозагрузки (композитор будет генерировать автозагрузчик - вам просто нужно будет 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'); 

Вы, очевидно, необходимо скорректировать пути в коде выше, для того, чтобы заставить его работать правильно, но когда-то вы делаете это и запускаете скрипт, вы должны создать пример .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, установленную просто для получения рабочего автозагрузчика.

+0

Какой замечательный ответ, большое вам спасибо. Я имел в виду ZF2, но не понял, что Zend_Pdf был только в ZF1. После тестирования это выглядит так: ZendPdf не имеет возможности редактировать текстовые поля, а только рисовать. Полагаю, я буду играть с координатами какое-то время. Спасибо вам за помощь! – howdoisysadmin

+0

Добро пожаловать - рад, что я мог бы помочь. Удачи вам в кодировании! – JamesG

+0

У меня есть еще один вопрос, если вы все еще можете мне помочь. '$ filename =' new.pdf '; $ pdf-> save ($ filename); ' работает в то время как '$ filename =' /forms/new.pdf '; $ pdf-> save ($ filename); ' не делает. как сохранить/открыть в других каталогах? – howdoisysadmin

Смежные вопросы