Yii - создание PDF

14.11.2011

В который раз уже сталкиваюсь с вопросом генерации PDF в yii. Впервые - для отрисовки купонов, а сейчас для отрисовки простой таблицы с нужными мне данными.

Для этих целей использую отличное расширение - tcpdf - http://www.yiiframework.com/extension/tcpdf

Задача:

Сгенерировать PDF-файл с данными, взятыми из БД(пусть это будет название и текст статьи). Данные представляем в виде таблицы.

Решение:

  1. http://www.yiiframework.com/extension/tcpdf - скачиваем отсюда расширение TCPDF и распаковываем в папку /protected/extensions/tcpdf
  2. Идем на сайт http://www.tcpdf.org/ и скачиваем сам архив со скриптом. Распаковываем в /protected/extensions/tcpdf/tcpdf.
    Таким образом у нас получается следующая структура директорий:Генерация PDF в Yii
  3. Теперь нужно создать контроллер, в котором будет производиться выборка данных из БД, генерация таблицы и самого PDF. Пример действия для такого контроллера:
    public function actionPrint() {
            if ($checked = $_POST['checkedOrder']) {
                $pdf = Yii::createComponent('application.extensions.tcpdf.ETcPdf', 'P', 'cm', 'A4', true, 'UTF-8');
                $pdf->SetCreator(PDF_CREATOR);
                $pdf->SetAuthor("Belyakov Yuriy");
                $pdf->SetTitle("Orders");
                $pdf->SetSubject("Orders");
                $pdf->SetKeywords("Orders");
                $pdf->setPrintHeader(false);
                $pdf->setPrintFooter(false);
                $pdf->AddPage();
                $pdf->SetFont('freeserif', '', 14);
                $tbl = "" . date('d.m.Y', time()) . "
    "; $pdf->SetFont('freeserif', '', 10); $tbl .= ''; $printOrders = null; foreach ($checked as $k => $v) { $order = Order::model()->findByPk((int) $v); $priority = Order::model()->getPriority($order->priority); $tbl .= ""; } $tbl .= "
    КлиентСодержание
    Адрес: {$order->client->title} - {$order->client->division} ({$order->client->address})
    Приоритет: {$priority}
    {$order->text}
    "; $pdf->writeHTML($tbl, true, false, false, false, ''); $pdf->Output('orders.pdf', 'I'); } else { Yii::app()->user->setFlash('myOrder', 'Выберите заявки для печати.'); ; $this->redirect(array('/order/myorder')); } }

Тут мы создаем компонент, инициализируем его начальными значениями, подробнее можно посмотреть на сайте www.tcpdf.org

Итог:Генерация PDF в Yii

Замазана некоторая информация, которую не могу раскрывать ;) Ну суть вы поняли!.
Вообще это берется из CGridView, в котором чек-боксами отмечаются необходимые поля для печати!

blog comments powered by Disqus
Наверх