DbHelp.ru
Маленький Yii блог
Комментарии
Гость: wh0cd3078423 [url=http://sildenafil04.us.org/]sildenafil citrate generic[/url] [url=http://xenical02...
Гость: wh0cd2594827 [url=http://dapoxetine911.us.com/]dapoxetine[/url] [url=http://lisinopril03.us.com/]40 ...
Гость: buy essays essay buying order essay now https://buyessay.us.com - college essay helper
Гость: Предлагаем Вам возможность работы в сети интернет, выб...
Гость: http://xukute.yfapuluzun.ru/2017/12/17-jukov-obshchaya-teoriya-deneg-i-kredita.htm http://zbgs.ruzo...



Сервер Ultima Online - Forest Wars (от создателя данного блога)

Отображаем PDF на Yii при помощи Zend

Рубрика: Мелкие заметки на тему Yii

Оцените эту статью:

Рейтинг: 0.00 (0)
5 Ноя. 2009
Опубликовать в Twitter Написать в Facebook Опубликовать в своем блоге livejournal.com

Yii Framework Blog img http://dbhelp.ruPDF_red Интеграция Zend/Pdf в Yii Framework...

---

 

Введение

Yii является одним из распостраненных PHP фреймворков. В этой статье мы рассмотрим пример интеграции библиотеки для создания PDF файлов из ZendFramework.

Прим. переводчика: статья очень полезна в плане опыта интеграции классов из ZendFramework. При помощи полученного опыта вы можете связать практически любой класс с Yii без малейших проблем.

Программное обеспечение

Для выполнения всего этого я рекомендую закачать упрощенную версию Zend фреймворка (http://framework.zend.com/download/current/). При создании этого урока я использовал версию 1.9.5. Ekstrak ZendFramework-1.9.5-minimal.tar.gz и получил её следующим образом:

$ tar -xzvf ZendFramework-1.9.5-minimal.tar.gz

Прим. переводчика: Автор статьи использует консоль для закачки Zend Framework-а. Далее в уроке — он очень часто будет использовать её и читателям без опыта работы в Linux наверняка будет трудно понять происходящее. Если вы используете Windows — постарайтесь следователь комментариям между примерами кода и у вас всё получится.

Результат выглядел следующим образом:

[[email protected] software]$ cd ZendFramework-1.9.5-minimal/
[[email protected] ZendFramework-1.9.5-minimal]$ ls -la
total 32
drwxr-xr-x 4 bpdp users 4096 2009-10-27 00:19 .
drwxr-xr-x 7 bpdp users 4096 2009-10-30 11:19 ..
-rw-r--r-- 1 bpdp users 3438 2009-10-26 20:33 INSTALL.txt
-rw-r--r-- 1 bpdp users 1547 2009-10-26 20:33 LICENSE.txt
-rw-r--r-- 1 bpdp users 6496 2009-10-27 00:19 README.txt
drwxr-xr-x 2 bpdp users 4096 2009-10-26 20:39 bin
drwxr-xr-x 3 bpdp users 4096 2009-10-26 20:38 library
[[email protected] ZendFramework-1.9.5-minimal]$

После этого я скопировал все содержимое Zend каталога в zax/protected/vendors. (я использую имя zax в качестве корневой папки приложения. У вас она может иметь другое имя или вовсе отсутствовать)

[[email protected] vendors]$ ls -la
total 12
drwxr-xr-x  3 root root 4096 2009-10-30 09:56 .
drwxr-xr-x 12 root root 4096 2009-10-30 08:49 ..
drwxr-xr-x 59 root root 4096 2009-10-30 09:56 Zend
[[email protected] vendors]$

Прим. переводчика: Как вы видите — в папку protected/vendors мы перемещаем папку Zend вместе со всем её содержимым.

Для того чтобы использовать PDF в качестве отображения — нам необходимо создать только контроллер. Вот пример создания контроллера PdfviewController:

[[email protected] zax]# protected/yiic shell
Yii Interactive Tool v1.0 (based on Yii v1.0.10)
Please type 'help' for help. Type 'exit' to quit.

>> controller pdfview
 generate PdfviewController.php
 mkdir /opt/web/httpd/htdocs/zax/protected/views/pdfview
 generate index.php

Controller 'pdfview' has been created in the following file:
 /opt/web/httpd/htdocs/zax/protected/controllers/PdfviewController.php

You may access it in the browser using the following URL:
 http://hostname/path/to/index.php?r=pdfview
>> [[email protected] zax]#

После этого немного изменим главный экшинс:

class PdfviewController extends CController
{
  public function actionIndex()
  {
    // подключаем Zend/Pdf
    Yii::import('application.vendors.*');
    require_once('Zend/Pdf.php');

    // создаем новый обьект PDF
    $pdf1 = new Zend_Pdf();

    // создаем страницу и определяем её размер
    $page = new Zend_Pdf_Page(Zend_Pdf_Page::SIZE_A4);

    // шрифт по умолчанию
    $font = Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_HELVETICA);

    // применяем шрифт. указываем размер
    $page->setFont($font, 36);

    // вывод текста на странице
    $page->drawText('Hello from Yii', 72, 720);

    // добавляем странциу в pdf файл
    $pdf1->pages[] = $page;

    // получим результат всего pdf обьекта
    $pdfcontents = $pdf1->render();

    // показываем в браузере. п.с. незабудь указать тип содержимого в заголовке
    header('Content-Type: application/pdf');
    $this->layout = false;
    $this->renderText($pdfcontents);
  }

Результат (http://server/zax/index.php?r=pdfview) выглядит следующим образом:

Yii Framework Blog img http://dbhelp.ruscreenshot

Откуда это взялось?

Для того чтобы лучше понять описанный выше код и создавать более сложные PDF – я рекомендую прочитать обширную документацию разработчика по Zend классам. В первую очередь советую ознакомится с Zend_Pdf

Прим. переводчика: Статья является переводом с индонезийского. За что спасибо словарю и Google переводчику. Оригинал статьи - смотрим тут.



Если хотите опубликовать этот материал у себя - пожалуйста, разместите ссылку на страницу откуда вы его взяли.
Другие yii статьи:

  1. Рамки MVC весьма размыты, поэтому моё понимание может не совпадать с полученными вами ранее знаниями. Хотел бы напомнить что ... "Шаг 3 : Что такое MVC?"

  2. Знаете многое людей отталкивает (а многих притягивает) в Yii - это штука для генерации кода. Тем кто с таким ... "Первое приложение на Yii своими силами"

  3. Новое сообщение на официальном сайте поддержки Yii информирует нас про утверждение нового дизайна сайта, логотипа и стиля. Как сообщает разработчик фреймворка, ... "Новый Yii дизайн"

[adm] zolter

Было сказано: Четверг, 05 Ноябрь 2009

Первый мой перевод с индонезийского :) Текста не много, но для себя пару слов запомнил :)

[guest] Гость

Было сказано: Четверг, 05 Ноябрь 2009

Подскажите как соединить две таблицы. Оффициальная дока не помогает, обьязательно таблицы должны быть как ИнноДБ и объявлены внешние ключи?

[guest] Гость

Было сказано: Четверг, 05 Ноябрь 2009

Пока реализовал через DAO, а как реализовать соединение таблиц через AR для меня до сих пор остается загадкой :(

[adm] zolter

Было сказано: Пятница, 06 Ноябрь 2009

А чем relation обычной AR модели не подходит?

Если какие то ошибки - киньте кусок кода, разберемся. Ну и дамп таблиц помог бы

[guest] Гость

Было сказано: Пятница, 06 Ноябрь 2009

Делал все по офф. манам, по логике должно работать. Скажите обязательно ли соединять таблицы внешним ключом и соответственно использовать тип InnoDB? а дальше я попробую сам разобратся, что бы не флудить лишний раз. А еще столкнулся с проблемой разбияния на страницы, почему то дописывается index.php в адрес и еще кажется названия экшена (index), собсно как и на Вашем блоге :)

[adm] zolter

Было сказано: Пятница, 06 Ноябрь 2009

Нет, InnoDB не обязательно. У меня таблицы в MyISAM, и все отлично работает с AR. Внешние ключи не обязательны, и я их в принципе не использую совсем. Удаляю связи скриптово (через бехавиор) если требуется. Насколько мне извесно только примари кей является обязательным, и то утверждать не буду, т.к. у меня в базе все таблицы с примари и автоинкрементом на индексе.

По поводу дописывания index.php - так это в конфиг файле (config/main.php) надо указать showScriptName = false. Т.е. вот так вот :


'urlManager'=>array(
'showScriptName' => false, // что бы не цеплялся index.php к ссылкам
'urlFormat'=>'path',
),

[guest] Гость

Было сказано: Пятница, 06 Ноябрь 2009

Спс большое за ответ и за блог в целом, разобрался)) судя по всему создавался он не зря :)

[adm] zolter

Было сказано: Пятница, 06 Ноябрь 2009

Спасибо :)

ATI

Было сказано: Пятница, 13 Ноябрь 2009

Скоро будет, что нибудь новенькое? :)

[adm] zolter

Было сказано: Пятница, 13 Ноябрь 2009

Постараюсь завтра выполнить перевод статьи как использовать префиксы к таблицам в модели. А в общем еще собираюсь начать писать что то крупное по одному из уроков, то думаю сильно я затянул :)

ATI

Было сказано: Пятница, 13 Ноябрь 2009

Спасибо за оперативный ответ;) Ждём!

[guest] Anya

Было сказано: Среда, 23 Декабрь 2009

Прекрасная статья!
Но у меня возник вопрос - как распечатать такой pdf файл?
В том смысле, что например на сайте есть статья, а внизу ссылка "Распечатать", нажав на которую сперва формируется pdf файл и сразу же отправляется на печать. Как это реализовать?

[guest] zolter

Было сказано: Среда, 23 Декабрь 2009

Повесьте действие window.print(); на load к примеру или просто на странице в конце (<script>window.print()</script>)формирования pdf сделайте. тогда после вывода на экран - сразу будет пробовать его распечатать

[guest] Anya

Было сказано: Четверг, 24 Декабрь 2009

Спасибо, попробую

[guest] МОТОРИСТ

Было сказано: Пятница, 02 Июль 2010

А не слишком ли вырастет объем приложения, если туда еще один фреймворк загрузить? Тем более zend.

[guest] Maxx

Было сказано: Пятница, 02 Июль 2010

Вся суть иметь инструмент под руками и возможность им воспользоваться. А увеличение размера это пустяк если PDF или другой класс с Zend-а очень сильно понадобится :)

[guest] Гость

Было сказано: Четверг, 27 Январь 2011

Неплохой пост, но возникает вопрос:как использовать кириллицу?

[guest] Гость

Было сказано: Четверг, 11 Октябрь 2012

Fatal error: Class 'Zend\Barcode\Renderer\AbstractRenderer' not found in Z:\home\localhost\www\testdrive\protected\vendors\Zend\library\Zend\Barcode\Renderer\Pdf.php on line 25

[guest] Гость

Было сказано: Пятница, 19 Октябрь 2012


Указать конкретное имя файла тожно вот так:

header('Content-Type: application/pdf');
header('Content-Disposition: inline; filename="'.$filename.'.pdf"');
$this->layout = false;
$this->renderText($pdfcontents);


[guest] Гость

Было сказано: Среда, 07 Май 2014

От души, так во время я эту статью нашел и так классно все теперь работает.

Оставить комментарий


Код:
Имя: