/**
  * Generate PDF book by category
  * 
  * @param Zend_Db_Table_Row $category Category
  * @param int $page Start page number
  * 
  * @return Zend_Pdf Generated book
  * 
  * @api
  */
 public function byCategory($category, $page = 1, $except = null, $secondTime = 0, $return_categories = array())
 {
     $this->logger->log('Start to generate new pdf', Zend_Log::INFO);
     $this->category_page = $page;
     // переопределяем номер страницы
     $categories = $this->categoryChilds($category);
     if ($except) {
         foreach ($except as $exceptId) {
             foreach ($categories as $key => $category) {
                 if ($category->id == $exceptId) {
                     unset($categories[$key]);
                 }
             }
         }
     }
     if ($this->format == 'A4' && $this->print) {
         $this->margins = array('top' => 49, 'right' => 54, 'bottom' => 34, 'left' => 44);
     } else {
         $this->margins = array('top' => 35, 'right' => 40, 'bottom' => 20, 'left' => 30);
     }
     if ($page % 2 == 0) {
         $this->margins = $this->swapMargins($this->margins);
     }
     $this->createBook($this->category_page);
     $this->addPage(false);
     $productIndexModel = new Model_DbTable_ProductIndex();
     $this->sideIconActive = $category->findTopParent()->id;
     $i = 0;
     //счетчик категорий
     $count_category = 0;
     //счетчик категорий в которых есть товары
     $flag = 0;
     $old_category = array();
     //списко категорий которые уже были отрендарины
     $pat = 0;
     //счетчик частей категорий
     foreach ($categories as $category) {
         $continue = false;
         $this->logger->log('$return_categories =' . count($return_categories), Zend_Log::INFO);
         foreach ($return_categories as $cat) {
             if ($category->id == $cat) {
                 //проверка на то что категория уже была
                 $continue = true;
                 break;
             }
         }
         if ($continue) {
             //если категория уже была проскакиваем ее
             continue;
         }
         $this->logger->log('Generate subcategory (id:' . $category->id . ', ' . $i . ' from ' . count($categories) . ')', Zend_Log::INFO);
         $products = $category->findManyToManyRowset("Model_DbTable_Products", "Model_DbTable_CategoryXref");
         $firstCPage = array();
         $count_exceptions = 0;
         foreach ($products as $key => $product) {
             $exceptIt = false;
             if (!is_null($this->exceptionProductList)) {
                 foreach ($this->exceptionProductList as $exceptProduct) {
                     if ($product->id === $exceptProduct) {
                         $count_exceptions++;
                         $exceptIt = true;
                         break;
                     }
                 }
             }
             if (!$exceptIt && !is_null($product)) {
                 $this->logger->log('Generate product (' . $product->id . ')', Zend_Log::INFO);
                 $this->byProduct($product, true);
                 // add product index
                 $row = $productIndexModel->createRow();
                 $row->product_id = $product->id;
                 $row->page = $this->product_page;
                 $firstCPage[] = $this->product_page;
                 $row->save();
             }
         }
         if (count($products) <= $count_exceptions || count($products) == 0) {
             $this->logger->log('Not products in ' . $category->id . ' categories', Zend_Log::INFO);
             //если товаров в категории нет пропускаем ее счет
         } else {
             $curCategory = $category->getParent(2);
             if (isset($curCategory->id)) {
                 $this->addCategoryToIndex($curCategory->id, $firstCPage[0], 2);
             }
             $count_category++;
             $old_category[] = $category->id;
             //записываем id категории которую мы уже отрисовали
         }
         ++$i;
         //проверяем на то что это не счет страниц и разделяем информацию на части, по 10 категорий
         if ($count_category != $flag && $count_category % 20 == 0 && $secondTime == 1) {
             $flag = $count_category;
             $this->logger->log('Save pat - ' . $pat, Zend_Log::INFO);
             $pat++;
             $this->finishBook();
             $saveFilename = str_repeat("0", 4 - strlen($this->category_page)) . $this->category_page . '-' . ($this->category_page + count($this->book->pages) - 1) . '.pdf';
             $this->logger->log($saveFilename, Zend_Log::INFO);
             $this->book->save(APPLICATION_ROOT . '/files/pdf/book/' . $saveFilename);
             $this->byCategory($category, count($this->book->pages) + $this->category_page, $except, 1, $old_category);
         }
     }
     //если прошли все интерации и $i равна количеству категорий то возвращаем категорию.
     if ($i == count($categories)) {
         $this->logger->log('Finishing...', Zend_Log::INFO);
         $this->finishBook();
         $this->book->end_pages = $this->category_page;
         return $this->book;
     }
 }